Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何打包div中的内容,以便在内容到达div底部时向右移动_Javascript_Php_Jquery_Html_Css - Fatal编程技术网

Javascript 如何打包div中的内容,以便在内容到达div底部时向右移动

Javascript 如何打包div中的内容,以便在内容到达div底部时向右移动,javascript,php,jquery,html,css,Javascript,Php,Jquery,Html,Css,我用PHP生成了一些内容,但是当内容的数量超过5个之后,高度就会大于div的高度,所以我不希望它堆叠在div的顶部,而是移动到div的右侧并从顶部开始。这是一张图片 PHP echo '<a class="LibSectOpen"> <span style="display:none" class="SectionName">'.$Section.'</span> <div class="LibrarySects">&

我用PHP生成了一些内容,但是当内容的数量超过5个之后,高度就会大于div的高度,所以我不希望它堆叠在div的顶部,而是移动到div的右侧并从顶部开始。这是一张图片

PHP

echo '<a class="LibSectOpen">
       <span style="display:none" class="SectionName">'.$Section.'</span>
       <div class="LibrarySects"><div class="LibrarySectsHeader">'.$Section.'</div>
       <div class="LibrarySectsShelf">';
        while($row = mysql_fetch_array($log2)){ 
          echo '<div class="LibrarySectsShelf_Book" style="background-color:'.$Color.'"
          title="Author: '.$row['bbookauthor'].'">'.$row['bbookname'].'</div>';
        }
echo ' </div>
       </div>
      </a>';
$i=1;
echo '<a class="LibSectOpen">
<span style="display:none" class="SectionName">'.$Section.'</span>
<div class="LibrarySects"><div class="LibrarySectsHeader">'.$Section.'</div>
<div class="LibrarySectsShelf"><div class="move_right">';
while($row = mysql_fetch_array($log2)){ 
echo '<div class="LibrarySectsShelf_Book" style="background-color:'.$Color.'"
      title="Author: '.$row['bbookauthor'].'">'.$row['bbookname'].'</div>';
if($i%5==0)
{
    echo '</div><div class="move_right">';
}
$i++;
}
echo '</div></div></div></a>';

我相信这可能会有所帮助
JSFIDLE显示,如果您想使用css实现这一点,可以使用css列。否则,下面的答案会链接到一个js插件来实现这一点。或者,如果可能的话,您可以在PHP中创建内容时进行定位。

在我看来,您不需要主容器的完整宽度。 为什么不为这两个类别添加一个固定的宽度,并将它们设置为
display:inline
显示:内联块
(仍在混淆这两个…sry)

如果您想动态地确定它,您可以检查主容器的高度对于这两个类别是否足够。如果不是这样,您可以使用设置这两个类别的css属性(我非常希望它们具有相同的css类;)

我想这应该会很神奇


编辑:啊,sry。我没看到你的代码。。。它应该以这种方式工作;)

我的解决方案包括jQuery和插件

这是工作小提琴:

代码非常简单:

$('.LibrarySectsShelf').columnize({
    width: 166,
    height: 150,
    doneFunc: function () {
        $('.LibrarySectsShelf_Book').removeClass('hidden');
    }
});
css中唯一的变化是这个新类:

.hidden {
    visibility: hidden
}

应将其添加到每本
图书馆部门的帮助书中。这仅仅是为了防止无组织项目的闪烁。列化完成后,该类将被删除。

我将在这里为您提供两个解决方案,PHP和CSS,因为@ariel已经提供了一个jQuery解决方案,因为我一直喜欢独立于JS,而且它将使用第三方脚本和jQuery库(如果您不使用jQuery)为您节省时间,我首先选择了PHP,与CSS相比,CSS在IE方面可能不太兼容

如果您想使用PHP实现这一点,您需要更改循环并设置一个计数器,这将中断

假设我们有一个
数组
,我们想按照您的需要进行设置

<div class="wrapper">
    <ul>
        <?php
            $arr = array('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15');
            $counter = 0;
            foreach ($arr as $value) {
                if($counter%5==0 && $counter != 0){ echo "</ul><ul>";}
        ?>
            <li><?php echo $value; ?></li>
        <?php
                $counter++;
            }
        ?>
    </ul>
</div>
现在,正如您所说,但在内容数量超过5之后,高度将大于
div
的高度,因此如果您在标记中应用相同的逻辑,它将强制
div
启动另一列

-

CSS

* {
    margin: 0;
    padding: 0;
    -moz-box-sizing: border-box;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
}

.wrapper {
    height: 150px;
    margin: 50px;
    border: 1px solid #eee;
}

ul {
    float: left;
    list-style-type: none;
}

ul li {
    height: 30px;
    width: 150px;
    background: tomato;
    border: 1px solid #515151;
}
ul {
    list-style-type: none;
    -moz-column-count: 3;
    -webkit-column-count: 3;
    column-count: 3;
}

您可以仅使用您已经在使用的PHP、HTML、CSS解决方案来实现您想要的输出:

PHP

echo '<a class="LibSectOpen">
       <span style="display:none" class="SectionName">'.$Section.'</span>
       <div class="LibrarySects"><div class="LibrarySectsHeader">'.$Section.'</div>
       <div class="LibrarySectsShelf">';
        while($row = mysql_fetch_array($log2)){ 
          echo '<div class="LibrarySectsShelf_Book" style="background-color:'.$Color.'"
          title="Author: '.$row['bbookauthor'].'">'.$row['bbookname'].'</div>';
        }
echo ' </div>
       </div>
      </a>';
$i=1;
echo '<a class="LibSectOpen">
<span style="display:none" class="SectionName">'.$Section.'</span>
<div class="LibrarySects"><div class="LibrarySectsHeader">'.$Section.'</div>
<div class="LibrarySectsShelf"><div class="move_right">';
while($row = mysql_fetch_array($log2)){ 
echo '<div class="LibrarySectsShelf_Book" style="background-color:'.$Color.'"
      title="Author: '.$row['bbookauthor'].'">'.$row['bbookname'].'</div>';
if($i%5==0)
{
    echo '</div><div class="move_right">';
}
$i++;
}
echo '</div></div></div></a>';


首先。不要把div放在标签上。 然后您可以找到php函数。 所以你需要做什么。 如果你用它会更好。 PDO fetch all将返回
数组

 <?php 
        $chunkSize = 5; // or any other value you need
        $chunks = array_chunk($result_array,$chunkSize);

           foreach($chunks as $links_array):?>
               <div class="move_right">
                  <?php foreach($links_array as $link):?>
                        <!-- your link code -->
                  <?php endforeach; ?>
               </div>
    <?php  endforeach ?>

以下代码检测div的结尾,并使用css创建一个新列

var col = 1;
jQuery(
  function($)
  {
    $('#flux').bind('scroll', function()
          {
            if($(this).scrollTop() + 
               $(this).innerHeight()
               >= $(this)[0].scrollHeight)
                  {
                      $("#yourdiv").css("-moz-column-count",col);
                      $("#yourdiv").css("-webkit-column-count",col);
                      col++;
                  }
         })
    }
);
简单


在我测试的每一款浏览器中都能正常工作,尽管wiki页面声称没有这样做,而且它从IE8开始就存在了。

这里有很多很好的答案,我选择javascript/CSS唯一的解决方案是因为

1) PHP将全权负责获取屏幕上的数据(将来在新的演示文稿中重新使用相同的PHP逻辑)

2) Javascript和CSS可以灵活地提供每个设备、浏览器和视图大小的个性化标记安排

演示


标记-让PHP只生成项目,而不必考虑表示

<div class="container">
   <div class="item">An Item</div>
   <div class="item"> An Item</div>
   <div class="item">An Item</div>
   ....
CSS到布局

.move_right{
    display:inline-block;
    vertical-align:top;
}
.wrapper { display:inline-block; float:left; }
/* clear the float so the container keeps 'containing' */
.container:last-child:after { 
      clear:both; display:block;visibility:hidden; 
      height:0; content:"."; }
就这样


此外,如果我们需要“包裹计数”是动态的,我们可以根据
.item
的高度和
.container
的高度进行一些计算,以获得所需的“包裹”计数

假设容器有一个不允许增长的固定高度

.container { height: 300px; width: 100%; overflow: hidden; }
Javascript可以动态地找到“包装计数间隔”(找到项目在容器高度中的适合程度}

现在我们可以使用

var items = $(".item");
for(var i = 0; i < items.length; i+=wrapinterval) {
    items.slice(i, i+wrapinterval).wrapAll('<div class="wrapper"></div>');
}
var items=$(“.item”);
对于(变量i=0;i
带动态换行间隔的演示-


向同事们致歉如果这包含了已经以某种方式回答过的部分,我只是开始用CSS输入解决方案 最好的方法是使用CSS3 flex Box,如下所示:

以下是如何:

在CSS中,将这3行添加到
.LibrarySectsShelf{…}

.LibrarySectsShelf {
   display: flex;               // to add
   flex-flow: column wrap;      // to add
   align-content: flex-start;   // to add

   ... // the rest of your code
}
.LibrarySectsShelf_Book{ 
   flex: 0 0 23px;

   ... // the rest of your code
}
.LibrarySectsShelf\u Book{…}

.LibrarySectsShelf {
   display: flex;               // to add
   flex-flow: column wrap;      // to add
   align-content: flex-start;   // to add

   ... // the rest of your code
}
.LibrarySectsShelf_Book{ 
   flex: 0 0 23px;

   ... // the rest of your code
}
跨浏览器支持 请注意,由于Flex box是CSS3中的一项新功能,您可能需要添加一些浏览器前缀,如
-webkit-
-moz-
-ms-
,以使其在所有主要浏览器中正常工作

还请注意,flex box包装功能仅在Firefox 28及更新版本中可用

上提供了一个工作的跨浏览器示例

为什么选择Flexbox
因为它非常灵活,它将填满所有可用空间,您不必在PHP/JavaScript中硬编码行数。

只需复制并粘贴这段代码,然后尝试使用逻辑即可

<?php
for($i = 1; $i <= 20; $i++){
if($i % 5 == 1){
echo '<div style="float:left;">';
}
echo '<div class="LibrarySectsShelf_Book" style="background-color:'.$Color.'"
      title="Author: '.$row['bbookauthor'].'">'.$row['bbookname'].'</div>';

if($i % 5 == 0){
echo '</div>';
}
}
?>


至于动态,我不使用json,我在页面上使用php。你链接上的fiddle与这个问题中的问题相同。上面提到,并非所有浏览器都支持此功能。fiddle在firefox 26上对我有效,它显示了@Mr.Alien Really?。而且,正如我已经说过的,我测试了“?”浏览器,他们支持它-我测试了“不受支持”的浏览器,它支持它。
写入模式:垂直lr;
不受支持。但是没有它的示例可以正常工作。更正,它不起作用。它继续向左移动
.LibrarySectsShelf {
   display: flex;               // to add
   flex-flow: column wrap;      // to add
   align-content: flex-start;   // to add

   ... // the rest of your code
}
.LibrarySectsShelf_Book{ 
   flex: 0 0 23px;

   ... // the rest of your code
}
<?php
for($i = 1; $i <= 20; $i++){
if($i % 5 == 1){
echo '<div style="float:left;">';
}
echo '<div class="LibrarySectsShelf_Book" style="background-color:'.$Color.'"
      title="Author: '.$row['bbookauthor'].'">'.$row['bbookname'].'</div>';

if($i % 5 == 0){
echo '</div>';
}
}
?>