」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 理解 CSS 盒子模型:內容方塊與邊框、內嵌元素與區塊元素

理解 CSS 盒子模型:內容方塊與邊框、內嵌元素與區塊元素

發佈於2024-08-20
瀏覽:501

身為前端開發人員,了解 CSS 盒子模型是成敗的關鍵,以便能夠提供像素完美的佈局。讓我們深入討論內聯元素和區塊元素在兩種盒子模型類型(內容盒和邊框盒)的上下文中的行為有何不同。

基礎:盒子裡有什麼?

Understanding the CSS Box Model: content-box vs border-box, inline vs. block elements

在我們詳細討論之前,有必要回顧一下盒子模型是什麼。頁面上的每個元素都是一個盒子(是的,即使是那些實際上看起來不是四方形的元素)。盒子可以位於其他盒子內、包含其他盒子和/或與其他盒子並排。

盒子模型適用於所有這些,並由以下部分組成:

  • 內容方塊: 一個 HTML 元素或 CSS 偽元素,其中包含您的實際內容 - 文字、圖像、您擁有的內容。
  • 內邊距: 內容與邊框之間的空間。
  • 邊框: 圍繞內邊距和內容的線條。
  • 邊距: 邊框外的空間,將其他元素推開。

因此,幾乎每個 HTML 元素(包括

)以及每個 CSS 偽元素都是一個盒子。該盒子的“牆壁”是您的邊框,可以指定厚度(或寬度)。在該內容和該盒子的牆壁之間有填充。在這些牆壁和其他盒子之間有邊距。

內聯元素和區塊元素之間的主要區別

了解盒子模型如何影響內聯元素與塊元素的主要區別至關重要:

  1. 寬度: 預設情況下,區塊元素會展開以填滿其容器。內聯元素?它們只佔用足夠的空間來容納其內容。

  2. 高度:對於區塊元素,padding、border、margin都會增加高度。無論垂直內邊距或邊框如何,內聯元素都保持在行高內。

  3. 佈局影響:塊元素影響水平和垂直佈局。內聯元素都是關於水平流動的,對垂直間距的影響最小。

  4. 邊距折疊: 邊距折疊是一種特定於塊元素的行為,其中相鄰的垂直邊距可以合併(因此一個元素上的margin-bottom:20px 可以折疊為margin-top: 20px 在下面的元素上,建立一個20px 邊距)。內聯元素不玩這個遊戲。

現在我們知道了盒子模型的組成部分以及內聯元素和塊元素之間的區別,讓我們看看內容框如何根據它們是內聯元素還是塊元素而受到 box-sizing 屬性的影響。

框大小調整:內容框與邊框框

box-sizing 屬性控制如何計算元素的寬度和高度,它可以顯著影響佈局。

1. 帶有內嵌元素的內容框

當 box-sizing: content-box 應用於內嵌元素時:

  • 寬度與高度:寬度僅由內容決定。內邊距、邊框和邊距會新增在此寬度之上。
  • 佈局影響:由於內聯元素不會破壞文字流,因此元素的寬度僅與內容一樣寬。垂直內邊距和邊框在視覺上存在,但不會影響周圍線條的高度。

2. 帶有區塊元素的內容框

當 box-sizing: content-box 套用於區塊元素時:

  • 寬度與高度:指定的寬度或高度僅適用於內容區域。在其外部添加填充和邊框,增加元素的整體大小。
  • 佈局影響:除非另有指定,否則區塊元素預設擴展到其容器的整個寬度。填充和邊框會增加元素的大小,並將相鄰元素推得更遠。

3. 帶有內聯元素的邊框

當 box-sizing: border-box 應用於內聯元素:

  • 寬度和高度: 寬度包括內容、內邊距和邊框。內容區域縮小以容納指定寬度內的內邊距和邊框。
  • 佈局影響:元素的寬度仍然由內容決定,但現在內邊距和邊框都包含在該寬度內。垂直內邊距和邊框在視覺上仍然存在,但不會改變行高。

4. 帶有區塊元素的邊框

當 box-sizing: border-box 套用於區塊元素時:

  • 寬度和高度:指定的寬度和高度包括內容、內邊距和邊框。這意味著無論添加多少內邊距或邊框,元素的總大小都與指定的尺寸保持一致。
  • 佈局影響:區塊元素的大小更容易預測,因為內邊距和邊框包含在指定的寬度內。這使得佈局設計更易於管理,特別是在並排對齊元素時。

值得一提的是,雖然 content-box 是預設設置,但 border-box 被廣泛認為更直觀並提供最大程度的控制。


CSS 盒子模型不僅僅是一個強大的概念,它也是前端開發工具庫中的基礎工具。透過了解框架大小如何以不同的方式影響內聯和區塊元素,您可以開始創建既清晰又實用的完美佈局,而無需為錯誤佈局進行故障排除而煩惱。

如果您喜歡盒子模型上的下載,請將滑鼠懸停在左上角的心形盒子上,並向這篇文章展示所有的愛!

版本聲明 本文轉載於:https://dev.to/horaceshmorace/understanding-the-css-box-model-content-box-vs-border-box-inline-vs-block-elements-1amh?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-04-04
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 考慮文檔中給出的示例:這是內部發生的事情: 現在在3月3日添加另一個月,因為2月在2001年只有2...
    程式設計 發佈於2025-04-04
  • 如何正確使用與PDO參數的查詢一樣?
    如何正確使用與PDO參數的查詢一樣?
    在pdo 中使用類似QUERIES在PDO中的Queries時,您可能會遇到類似疑問中描述的問題:此查詢也可能不會返回結果,即使$ var1和$ var2包含有效的搜索詞。錯誤在於不正確包含%符號。 通過將變量包含在$ params數組中的%符號中,您確保將%字符正確替換到查詢中。沒有此修改,PD...
    程式設計 發佈於2025-04-04
  • 如何將PANDAS DataFrame列轉換為DateTime格式並按日期過濾?
    如何將PANDAS DataFrame列轉換為DateTime格式並按日期過濾?
    Transform Pandas DataFrame Column to DateTime FormatScenario:Data within a Pandas DataFrame often exists in various formats, including strings.使用時間數據時...
    程式設計 發佈於2025-04-04
  • 如何在無序集合中為元組實現通用哈希功能?
    如何在無序集合中為元組實現通用哈希功能?
    在未訂購的集合中的元素要糾正此問題,一種方法是手動為特定元組類型定義哈希函數,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    程式設計 發佈於2025-04-04
  • 如何將來自三個MySQL表的數據組合到新表中?
    如何將來自三個MySQL表的數據組合到新表中?
    mysql:從三個表和列的新表創建新表 答案:為了實現這一目標,您可以利用一個3-way Join。 選擇p。 *,d.content作為年齡 來自人為p的人 加入d.person_id = p.id上的d的詳細信息 加入T.Id = d.detail_id的分類法 其中t.taxonomy ...
    程式設計 發佈於2025-04-04
  • 為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,輸出...
    程式設計 發佈於2025-04-04
  • 如何限制動態大小的父元素中元素的滾動範圍?
    如何限制動態大小的父元素中元素的滾動範圍?
    在交互式接口中實現垂直滾動元素的CSS高度限制問題:考慮一個佈局,其中我們具有與用戶垂直滾動一起移動的可滾動地圖div,同時與固定的固定sidebar保持一致。但是,地圖的滾動無限期擴展,超過了視口的高度,阻止用戶訪問頁面頁腳。 映射{} 因此。我們不使用jQuery的“ .aimimate...
    程式設計 發佈於2025-04-04
  • 您可以使用CSS在Chrome和Firefox中染色控制台輸出嗎?
    您可以使用CSS在Chrome和Firefox中染色控制台輸出嗎?
    在javascript console 中顯示顏色是可以使用chrome的控制台顯示彩色文本,例如紅色的redors,for for for for錯誤消息? 回答是的,可以使用CSS將顏色添加到Chrome和Firefox中的控制台顯示的消息(版本31或更高版本)中。要實現這一目標,請使用以下...
    程式設計 發佈於2025-04-04
  • 如何簡化PHP中的JSON解析以獲取多維陣列?
    如何簡化PHP中的JSON解析以獲取多維陣列?
    php 試圖在PHP中解析JSON數據的JSON可能具有挑戰性,尤其是在處理多維數組時。要簡化過程,建議將JSON作為數組而不是對象解析。 執行此操作,將JSON_DECODE函數與第二個參數設置為true:[&&&&& && &&&&& json = JSON = JSON_DECODE($ ...
    程式設計 發佈於2025-04-04
  • 如何在php中使用捲髮發送原始帖子請求?
    如何在php中使用捲髮發送原始帖子請求?
    如何使用php 創建請求來發送原始帖子請求,開始使用curl_init()開始初始化curl session。然後,配置以下選項: curlopt_url:請求 [要發送的原始數據指定內容類型,為原始的帖子請求指定身體的內容類型很重要。在這種情況下,它是文本/平原。要執行此操作,請使用包含以下標頭...
    程式設計 發佈於2025-04-04
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-04-04
  • 如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    程式設計 發佈於2025-04-04
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    程式設計 發佈於2025-04-04
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-04-04

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3