【问题标题】:How to make each div the same height, in order to keep the 3 div per row alignment working如何使每个 div 具有相同的高度,以保持每行 3 个 div 对齐工作
【发布时间】:2015-04-12 07:30:21
【问题描述】:

我的网站包含一系列 div(由绿色框表示),我每行只需要 3 个。但它们的高度并不相同,所以它会推动其他 div 不对齐。

请看这里:

如果您向下滚动,这是我的演示网站,显示完整的问题:http://testsite24.netai.net/public/demo.html

这是其中一个 div(绿色框)的代码示例:

<div class="block personal fl">

                <!-- CONTENT -->
               <div class="content">
                  <p class="price">
                    <p class="vignette" style="background-image:url()"></p>
                  </p>

               </div>

                <ul class="features">
    <li class="titlebox">59 Acre Paradise</li>
    <li>Kings County</li>
    <li>Offered at $95,000</li>
                  </ul>

</div>

您能否提供一种解决方案,使所有 div 高度都相同,以便它们保持对齐?该解决方案必须适用于 IE8+。也许是一个脚本来识别行中最长的 div 并使其他两个高度相同?

以前我使用过这个脚本,但是 IE8/IE9 不支持 FlexWrap,所以我不得不放弃它。有任何想法吗?谢谢!!

<script>

;( function( $, window, document, undefined )
{
    'use strict';

    var s = document.body || document.documentElement, s = s.style;
    if( s.webkitFlexWrap == '' || s.msFlexWrap == '' || s.flexWrap == '' ) return true;

    var $list       = $( '.list' ),
        $items      = $list.find( '.list__item__inner' ),
        setHeights  = function()
        {
            $items.css( 'height', 'auto' );

            var perRow = Math.floor( $list.width() / $items.width() );
            if( perRow == null || perRow < 2 ) return true;

            for( var i = 0, j = $items.length; i < j; i += perRow )
            {
                var maxHeight   = 0,
                    $row        = $items.slice( i, i + perRow );

                $row.each( function()
                {
                    var itemHeight = parseInt( $( this ).outerHeight() );
                    if ( itemHeight > maxHeight ) maxHeight = itemHeight;
                });
                $row.css( 'height', maxHeight );
            }
        };

    setHeights();
    $( window ).on( 'resize', setHeights );
    $list.find( 'img' ).on( 'load', setHeights );

})( jQuery, window, document );

</script>

【问题讨论】:

标签: javascript jquery html alignment height


【解决方案1】:

当您可以在项目上使用vertical-align:top; 时,这似乎太过分了...给它们一个最小高度以使其更强大。

【讨论】:

  • 谢谢Shan,你能具体说明我附在哪个css项目上吗?它是否适用于 div 类“阻止个人 fl”?我使用了 Inspect Element,并将其更改为 .block { width: 30%;边距:0 15px;垂直对齐:顶部;边距底部:30px;最大高度:10%;最小高度:10%;溢出:隐藏;但看不到变化。
  • 是的,给那个块垂直对齐和display:inline-block它不会与块元素一起工作,仅供参考。你是怎么把那些盒子摆出来的?漂浮的?固定?百分比?
  • 这是我的页面的屏幕截图,在实施您的更改后。你可以看到我正在使用 float:left;它看起来。但这些更改似乎不起作用:testsite24.netai.net/public/screenshot3.png
【解决方案2】:

使用

display: table
display: table-cell

密码笔:http://codepen.io/anon/pen/mypGBV

【讨论】:

  • 好像不行,截图如下:testsite24.netai.net/public/screenshot2.png
  • 什么不起作用? div 按要求高度对齐,共有 3 列。
  • 我没有看到任何绿色框。我是不是误会了什么?我想要像这样的绿色框:testsite24.netai.net/public/screenshot4.png,除了偶数高度。您的示例只是带有文本的空白。
  • 用绿色框将其更改为尽可能简单。希望它现在可以工作
  • 似乎工作 Kira 谢谢你,除了我每行需要三个盒子。以下链接显示了一个包含 4 个框的演示,第 4 个在同一行。相反,我需要将第 4 个盒子放在第 1 个盒子下面。如果我在框 1 和 2 之间添加一个框(div),它应该将 2 推到 3 的位置,并将 3 推到新行中。想法?? testsite24.netai.net/public/demo4.html
【解决方案3】:

您可以使用 ma​​x-height 来强制 div(这会导致麻烦)不要大于特定值。例如,将所有 3 个 div 设置为 max-height:50px。它们不会变大并保持一致。

【讨论】:

  • 我添加了一个 600px 的最大高度,还有一个空白区域。这是截图:testsite24.netai.net/public/screenshot4.png
  • 其实max-height并没有设置当前高度。它只是告诉浏览器不要超过这个限制。
  • 那么,这不是我要寻找的解决方案吗?我只是希望所有绿色框的高度相同,响应高度基于 div 的内容。
【解决方案4】:

你不需要 JS。只需将每一行 div 包装在一个包装器 div 中,并设置为 clear: both 样式。请参阅此代码笔:http://codepen.io/anon/pen/GgyXNp

【讨论】:

  • 也许只有我一个人,但是当我查看你的 codepen 时,div 等高
猜你喜欢
  • 2013-08-02
  • 2014-10-28
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 2010-10-22
  • 1970-01-01
相关资源
最近更新 更多