【问题标题】:Make inline-block with columns to have right width使列的内联块具有正确的宽度
【发布时间】:2017-08-25 05:11:27
【问题描述】:

想用横列制作inline-block。我需要每个 inline-block 将宽度作为最小列数来适应内容。

问题是浏览器处理奇怪的列。

div {
  height: 10em;
  border: 1px solid red;
  display: inline-block;
  vertical-align: top;

  -moz-column-width: 10em;
  column-width: 10em;
  -moz-column-fill: auto;
  column-fill: auto;
}
<div>
  <p>Lorem ipsum dolor sit amet, an nec posse homero accumsan. Pro sale deseruisse ad. Vix cu integre fuisset insolens. Quo perfecto pericula ex. Te nam tritani honestatis, eam integre virtute ut.</p>
  <p>Cum an autem affert laoreet, ea ius falli impedit ocurreret. No duo aperiam perfecto lobortis, ut mea aliquid graecis, te has facete sententiae. Ut singulis laboramus his, meis laoreet docendi ius ad. Duo nisl alterum perfecto no, eum in etiam laboramus prodesset, rebum nobis nusquam in sit. Usu at expetendis consectetuer.</p>
</div>
<div>
  <p>Lorem ipsum dolor sit amet, an nec posse homero accumsan. Pro sale deseruisse ad. Vix cu integre fuisset insolens. Quo perfecto pericula ex. Te nam tritani honestatis, eam integre virtute ut.</p>
</div>
<div>
  <p>Lorem ipsum dolor sit amet, an nec posse homero accumsan.</p>
</div>
<div>
  <p>Lorem ipsum</p>
</div>

Chrome,可能会在没有列的情况下确定宽度,而不是将列放入该区域。第一个块有一列有额外的空间。其他块可能只有一列的宽度,但它们都有不同的宽度:

Firefox 将所有块的宽度设置为单个列,然后 xt 会溢出它。我可以在元素或其任何容器上强制滚动条,但我不能使它们中的任何一个具有正确的宽度。

我有一个 hack 让 Chrome 表现得像 Firefox,但它并不能帮助我解决问题:

div {
  height: 10em;
  border: 1px solid red;
  display: inline-block;
  vertical-align: top;

  -moz-column-width: 10em;
  column-width: 10em;
  -moz-column-fill: auto;
  column-fill: auto;
  
  /* chrome to firefox */
  width: -webkit-min-content;
  width: min-content;
  min-width: 10em;
}
<div>
  <p>Lorem ipsum dolor sit amet, an nec posse homero accumsan. Pro sale deseruisse ad. Vix cu integre fuisset insolens. Quo perfecto pericula ex. Te nam tritani honestatis, eam integre virtute ut.</p>
  <p>Cum an autem affert laoreet, ea ius falli impedit ocurreret. No duo aperiam perfecto lobortis, ut mea aliquid graecis, te has facete sententiae. Ut singulis laboramus his, meis laoreet docendi ius ad. Duo nisl alterum perfecto no, eum in etiam laboramus prodesset, rebum nobis nusquam in sit. Usu at expetendis consectetuer.</p>
</div>
<div>
  <p>Lorem ipsum dolor sit amet, an nec posse homero accumsan. Pro sale deseruisse ad. Vix cu integre fuisset insolens. Quo perfecto pericula ex. Te nam tritani honestatis, eam integre virtute ut.</p>
</div>
<div>
  <p>Lorem ipsum dolor sit amet, an nec posse homero accumsan.</p>
</div>
<div>
  <p>Lorem ipsum</p>
</div>

其实我需要得到这样的东西:

PS:Same question in russian.

【问题讨论】:

    标签: html css google-chrome css-multicolumn-layout


    【解决方案1】:

    如果需要 javascript,我有一个简单的解决方案,适用于固定大小的容器。如果尺寸可以动态变化,则需要重新计算(并且应该首先重置内联样式)。

    在 Chrome 51、FF 47、IE 11 和 Opera 12 中正常工作。

    var divs = document.querySelectorAll("div");
    
    for (var q=0; q<divs.length; ++q) {
      //divs[q].style.width = ""; // Reset old value if refreshing
      divs[q].style.width = divs[q].scrollWidth + 'px';
    }
    div {
      height: 10em;
      border: 1px solid red;
      display: inline-block;
      vertical-align: top;
    
      -moz-column-width: 10em;
      column-width: 10em;
      -moz-column-fill: auto;
      column-fill: auto;
      
      /* chrome to firefox */
      width: -webkit-min-content;
      width: min-content;
      min-width: 10em;
    }
    <div>
      <p>Lorem ipsum dolor sit amet, an nec posse homero accumsan. Pro sale deseruisse ad. Vix cu integre fuisset insolens. Quo perfecto pericula ex. Te nam tritani honestatis, eam integre virtute ut.</p>
      <p>Cum an autem affert laoreet, ea ius falli impedit ocurreret. No duo aperiam perfecto lobortis, ut mea aliquid graecis, te has facete sententiae. Ut singulis laboramus his, meis laoreet docendi ius ad. Duo nisl alterum perfecto no, eum in etiam laboramus prodesset, rebum nobis nusquam in sit. Usu at expetendis consectetuer.</p>
    </div>
    <div>
      <p>Lorem ipsum dolor sit amet, an nec posse homero accumsan. Pro sale deseruisse ad. Vix cu integre fuisset insolens. Quo perfecto pericula ex. Te nam tritani honestatis, eam integre virtute ut.</p>
    </div>
    <div>
      <p>Lorem ipsum dolor sit amet, an nec posse homero accumsan.</p>
    </div>
    <div>
      <p>Lorem ipsum</p>
    </div>

    【讨论】:

    • 这比我的解决方案要好得多。我没有考虑过使用scrollWidth
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多