CSS display: inline-block掉落到下一行

3
我有一个简单的网格布局正在测试中。
我决定将属性选择器[class* ='col-]中的某些内容从float:left更改为display:inline-block。
我想知道为什么使用float:left时,col-9有足够的空间,一切正常,但是当使用display:inline-block时,元素会下移到下一行。

* {
    box-sizing: border-box;
}

.header {
 border: 1px solid red;
 padding: 15px;
}

.col-1 {width: 8.33%;}
.col-2 {width: 16.66%;}
.col-3 {width: 25%;}
.col-4 {width: 33.33%;}
.col-5 {width: 41.66%;}
.col-6 {width: 50%;}
.col-7 {width: 58.33%;}
.col-8 {width: 66.66%;}
.col-9 {width: 75%;}
.col-10 {width: 83.33%;}
.col-11 {width: 91.66%;}
.col-12 {width: 100%;}

[class*='col-'] {
 display: inline-block;
 padding-top: 15px;
 border: 1px solid red;
}
 <div class='header'>
  <h1>China</h1>
 </div>
 <div class='row'>
  <div class='col-3'>
   <ul>
    <li>The Flight</li>
    <li>The City</li>
    <li>The Island</li>
    <li>The Food</li>
   </ul>
  </div>
  <div class='col-9'>
   <h1>The City</h1>
   <p>Chania is the capital of the Chania region on the island of Crete. The city can be divided in two parts, the old town and the modern city.</p>
   <p>Resize the browser window to see how the content respond to the resizing.</p>
  </div>
 </div>


我还没有检查你的代码,但是内联元素对它们周围的空格字符非常敏感,这可能会占用空间。它们可能正在渲染并推动你的元素。 - Joseph Young
.col-9.col-3之间的空格删除。请参考https://css-tricks.com/fighting-the-space-between-inline-block-elements/。 - mrfour
2个回答

5
<div class='header'>
        <h1>China</h1>
    </div>
    <div class='row'>
        <div class='col-3'>
            <ul>
                <li>The Flight</li>
                <li>The City</li>
                <li>The Island</li>
                <li>The Food</li>
            </ul>
        </div><!--
        --><div class='col-9'>
            <h1>The City</h1>
            <p>Chania is the capital of the Chania region on the island of Crete. The city can be divided in two parts, the old town and the modern city.</p>
            <p>Resize the browser window to see how the content respond to the resizing.</p>
        </div>
    </div>

小技巧,试一下这个<!-- -->,它会忽略空格。

编辑:如果你想要去掉标题栏上的微小间隙:

.col-9 {
  vertical-align: top;
}

demo


虽然这是一个聪明的解决方案,但当浏览器窗口处于不同的宽度时,它会导致 col-* 顶部出现间隙。 - Robert
1
哈!谢谢!太棒了,这个技巧真厉害! - Robert

2
@Thielicious的答案有一个很好的解决方案。这里是解释和你的答案。
引用: 我想知道为什么使用float:left时,有足够的空间来使用col-9,并且一切正常,但是当使用display:inline-block时,元素会掉到下一行。 内联块元素之间的空格在呈现页面上占据空间。 Chris Coyier提供了不同方法的概述以解决此问题(包括html注释的方法,如Thielicious的答案,以及其他HTML技巧和CSS方法)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接