显示和正常流

在一个完全没有 CSS 的页面上放三个段落和几个链接,它们仍然会自己布局:段落从页面顶部向下堆叠,链接坐在你写的文本中。没有人告诉浏览器这样做。在你写任何布局规则之前,已经有一个布局了,你稍后使用的每种技术都是对它的改变,而不是从零开始。这一章讲的是这个起点和那个控制它的单一属性。
正常流
当浏览器在没有你自己的布局 CSS 的情况下布局页面时,它使用**正常流**:元素排列的默认方式。像段落和标题这样的块级元素从上到下堆叠,每个都在自己的行上。文本和链接在一行内从左到右运行,当空间用完时换到下一行。
你已经见过流动的元素:这一章是在 盒模型 的基础上构建的,因为是那些框在流动。正常流之所以值得命名,是因为布局中的其他一切都是相对于它定义的。Flexbox、网格和定位都是说"与默认值不同地排列这些"的方式,所以了解默认值就是让这些改变有意义的原因。
块框和内联框
元素在正常流中有两种主要风格。**块框**占用其容器的整个宽度并在自己的行上堆叠,将下一个元素推向下方。段落 <p>、标题 <h1> 和 <div> 都是块,这就是为什么它们一个接一个地排列。
内联框是不同的。它坐在文本行中,只占用其内容所需的空间,所以几个可以共享一行。<span> 或链接 <a> 是内联的,这就是为什么句子内的链接停留在文字流中,而不是跳到自己的行上。
<p>这个段落是一个块,所以它自己占用一行。</p>
<p>阅读<a href="/css/box-model">盒模型</a>了解更多。</p>
<!-- 链接是内联的,所以它保持在句子内 --><p> 和 <div> 这样的块框占用全部宽度并在自己的行上堆叠。像 <span> 和 <a> 这样的内联框坐在一行内并只占用它们需要的空间。这就是为什么链接保持在你的句子内,而不是跳到自己的行上。 显示属性
每个元素都有一个默认类型,块或内联,但你不必坚持它。display 属性让你改变元素的表现方式。在链接上设置 display: block 现在它占用自己的行;在列表项上设置 display: inline 它坐在一行上。
有第三个值可以解决一个常见问题:display: inline-block。它像内联框一样在行中流动,但它接受宽度、高度和竖直填充,就像块一样。这是你想要的,比如按钮或导航药片,应该坐在其邻近元素旁边但仍然占用一个设定的大小。
.nav-link {
display: inline-block; /* 在行中流动,但接受宽度和填充 */
padding: 8px 16px; /* 竖直填充现在有效,不像纯粹的内联 */
}display 属性改变元素的表现方式是块还是内联框。block 占用自己的行,inline 坐在文本行中。方便的中间选项是 inline-block,它在行中流动但仍然接受宽度和填充,所以它是你想要的按钮和导航链接。 隐藏东西:display none 对 visibility hidden
有时你需要一个元素不显示。有两种方式,它们的表现不同。display: none 完全移除元素:它消失并没有留下间隙,就好像它不在页面上一样。visibility: hidden 使其不可见但保留其空间,所以在它曾经所在的地方有一个空洞。
你想要哪一个取决于你是否想要取回空间。使用 display: none 来完全删除某个东西,比如关闭的菜单。当你想要隐藏某个东西而不让布局跳动时使用 visibility: hidden,因为其框仍然被保留。
.closed-menu {
display: none; /* 消失了,没有留下间隙 */
}
.placeholder {
visibility: hidden; /* 不可见,但仍然占用其空间 */
}display: none 移除元素并没有留下间隙,visibility: hidden 使其不可见但保留其空间。当你也想要空间消失时选择 display: none,比如关闭的菜单。当你不想让布局跳动时选择 visibility: hidden。 显示如何改变内部布局
你已经看到 display 在块和内联之间切换元素。它做的不止这些。同一属性是将容器转变为 flexbox 或网格的东西,这是两个在行和列中排列子元素的现代工具。现在,要坚持的事情是 display 是决定框如何布局以及其子元素如何在其内部布局的一个拨号。
布局不是一个你翻转一次的大开关。你改变需要不同排列的特定容器上的 display,你留下的一切都停留在正常流中。flexbox 和 定位 章节从这里继续。
display 属性,它在块和内联之间切换,也是将容器转变为排列子元素的 flexbox 或网格的东西。布局不是你翻转一次的一个开关;你改变需要它的容器上的 display,其余的保留在正常流中。flexbox 和定位章节从这里继续。 
