普通流

本文解釋了普通流,或者如果您沒有更改其佈局,網頁元素如何自行佈局。

先決條件 HTML 基礎知識(學習 HTML 簡介),以及 CSS 工作原理的概念(學習 CSS 簡介)。
目標 解釋瀏覽器在預設情況下如何佈局網頁,在我們開始進行更改之前。

如上一課介紹佈局中所述,如果您沒有應用任何 CSS 來更改網頁元素的行為方式,則這些元素將按普通流進行佈局。而且,正如我們開始發現的那樣,您可以透過調整元素在普通流中的位置或完全將其從普通流中移除來更改元素的行為方式。從一個在普通流中可讀的、結構良好的文件開始是構建任何網頁的最佳方式。它確保即使使用者使用的是非常有限的瀏覽器或諸如螢幕閱讀器之類的讀取頁面內容的裝置,您的內容也仍然可讀。此外,由於普通流旨在建立可讀的文件,因此透過這種方式開始,您是在配合文件而不是在對抗文件,因為您正在對佈局進行更改。

在更深入地研究不同的佈局方法之前,值得回顧一下您在以前模組中學習的一些關於普通文件流的內容。

元素預設如何佈局?

該過程從單個元素的框以某種方式佈局開始,以便將它們可能具有的任何填充、邊框或邊距新增到其內容中。這就是我們所說的盒模型

預設情況下,塊級元素的內容會填充包含它的父元素的可用內聯空間,並沿塊維度增長以適應其內容。 內聯級元素的大小僅與其內容的大小相同。您可以在某些元素上設定 widthheight,這些元素具有 inline 的預設 display 屬性值,例如 <img>,但 display 值仍將保持 inline

如果要以這種方式控制內聯級元素的 display 屬性,請使用 CSS 將其設定為表現得像塊級元素(例如,使用 display: block;display: inline-block;,它混合了這兩者的特性)。

這解釋了元素是如何單獨構建的,但它們相互互動時是如何構建的呢?普通佈局流(在佈局簡介文章中提到)是元素放置在瀏覽器視口中使用的系統。預設情況下,塊級元素按塊流方向佈局,該方向基於父元素的 書寫模式初始:horizontal-tb)。每個元素都將顯示在最後一個元素下方的新行上,每個元素之間都由指定的邊距分隔。例如,在英語中(或任何其他水平的從上到下的書寫模式),塊級元素垂直佈局。

內聯元素的行為有所不同。它們不會出現在新行上;相反,只要有足夠的空間,它們會與任何相鄰(或換行)的文字內容一起出現在同一行上,前提是在父塊級元素的寬度內。如果沒有足夠的空間,則溢位的內容將移至新行。

如果兩個垂直相鄰的元素都設定了邊距,並且它們的邊距相接,則兩個邊距中較大的邊距將保留,較小的邊距將消失。這被稱為邊距摺疊。邊距摺疊僅與垂直方向相關。

讓我們看一個簡單的例子來解釋這一切

html
<h1>Basic document flow</h1>

<p>
  I am a basic block level element. My adjacent block level elements sit on new
  lines below me.
</p>

<p>
  By default we span 100% of the width of our parent element, and we are as tall
  as our child content. Our total width and height is our content + padding +
  border width/height.
</p>

<p>
  We are separated by our margins. Because of margin collapsing, we are
  separated by the size of one of our margins, not both.
</p>

<p>
  Inline elements <span>like this one</span> and <span>this one</span> sit on
  the same line along with adjacent text nodes, if there is space on the same
  line. Overflowing inline elements will
  <span>wrap onto a new line if possible (like this one containing text)</span>,
  or just go on to a new line if not, much like this image will do:
  <img src="long.jpg" alt="snippet of cloth" />
</p>
css
body {
  width: 500px;
  margin: 0 auto;
}

p {
  background: rgb(255 84 104 / 30%);
  border: 2px solid rgb(255 84 104);
  padding: 10px;
  margin: 10px;
}

span {
  background: white;
  border: 1px solid black;
}

總結

在本課中,您學習了正常流的基本知識——CSS 元素的預設佈局。通過了解內聯元素、塊級元素和邊距的預設行為,將來修改其行為將變得更容易。

在下一篇文章中,我們將在此基礎上,使用彈性盒佈局來更改 CSS 元素。