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

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

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

身為前端開發人員,了解 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]刪除
最新教學 更多>
  • TypeScript 如何讓 JavaScript 在大型專案中更加可靠。
    TypeScript 如何讓 JavaScript 在大型專案中更加可靠。
    介绍 JavaScript 广泛应用于 Web 开发,现在也被应用于不同行业的大型项目中。然而,随着这些项目的增长,管理 JavaScript 代码变得更加困难。数据类型不匹配、运行时意外错误以及代码不清晰等问题可能会导致查找和修复错误变得困难。 这就是TypeScript介入的地...
    程式設計 發佈於2024-11-05
  • 如何使用PHP的password_verify函數安全地驗證使用者密碼?
    如何使用PHP的password_verify函數安全地驗證使用者密碼?
    使用 PHP 解密加密密碼許多應用程式使用密碼雜湊等加密演算法安全地儲存使用者密碼。然而,在驗證登入嘗試時,將輸入密碼與加密的儲存版本進行比較非常重要。 加密問題password_hash 使用 Bcrypt,一元加密演算法方式雜湊演算法,表示加密的密碼無法逆轉或解密。這是一項安全功能,可確保即使資...
    程式設計 發佈於2024-11-05
  • 學習 Vue 部分 建立天氣應用程式
    學習 Vue 部分 建立天氣應用程式
    深入研究 Vue.js 就像在 DIY 工具包中發現了一個新的最喜歡的工具——直觀、靈活,而且功能強大得驚人。我接觸 Vue 的第一個副業專案是一個天氣應用程序,它教會了我很多關於框架功能以及一般 Web 開發的知識。這是我到目前為止所學到的。 1. Vue 入門:簡單與強大 Vu...
    程式設計 發佈於2024-11-05
  • NFT 預覽卡組件
    NFT 預覽卡組件
    ?剛剛完成了我的最新專案:使用 HTML 和 CSS 的「NFT 預覽卡元件」! ?查看並探索 GitHub 上的程式碼。歡迎反饋! ? GitHub:[https://github.com/khanimran17/NFT-preview-card-component] ?現場示範:[https:...
    程式設計 發佈於2024-11-05
  • Android 應用程式如何連接到 Microsoft SQL Server 2008?
    Android 應用程式如何連接到 Microsoft SQL Server 2008?
    將Android 應用程式連接到Microsoft SQL Server 2008Android 應用程式可以無縫連接到中央資料庫伺服器,包括Microsoft SQL Server 2008。這種連接允許開發人員從其行動應用程式存取和管理儲存在遠端伺服器上的資料。 連接方法雖然提供的範例程式碼專注...
    程式設計 發佈於2024-11-05
  • 以下是一些基於問題的標題選項,重點關注核心問題:

* C++ std::可選:為什麼沒有對引用類型進行專門化? (直接、切題)
* C++ std::option 中的參考類型
    以下是一些基於問題的標題選項,重點關注核心問題: * C++ std::可選:為什麼沒有對引用類型進行專門化? (直接、切題) * C++ std::option 中的參考類型
    C 中的可選:為什麼沒有專門化引用類型? 儘管在像 Boost 這樣的庫中存在對引用類型的專門化,C標準庫的 std::Optional 不提供這樣的功能。這項決定引發了對其理由和潛在替代機制的詢問。 遺漏背後的理由在討論 n3406(可選提案)期間,有人提出了擔憂關於包含可選參考文獻。認識到這些反...
    程式設計 發佈於2024-11-05
  • 評估機器學習分類模型
    評估機器學習分類模型
    大纲 模型评估的目标是什么? 模型评估的目的是什么,有哪些 常见的评估程序? 分类准确率有什么用,它的作用是什么 限制? 混淆矩阵如何描述一个 分类器? 可以从混淆矩阵计算哪些指标? T模型评估的目标是回答问题; 不同型号如何选择? 评估机器学习的过程有助于...
    程式設計 發佈於2024-11-05
  • 如何消除 Eval-Base64_Decode PHP 病毒並保護您的網站?
    如何消除 Eval-Base64_Decode PHP 病毒並保護您的網站?
    如何像PHP 病毒檔案一樣刪除Eval-Base64_Decode採用eval-base64_decode 技術的病毒,例如您的病毒已經描述過,可能會很麻煩。我們將幫助您了解病毒的性質及其潛在漏洞,並提供有關如何消除病毒的全面指南。 了解病毒此特定病毒以 eval-base64_decode 程式碼...
    程式設計 發佈於2024-11-05
  • 如何在 Serp 中排名 4
    如何在 Serp 中排名 4
    搜索引擎排名页面 (SERP) 是网站争夺可见性和流量的地方。到 2024 年,在 Google 和其他搜索引擎上的高排名仍然对在线成功至关重要。然而,SEO(搜索引擎优化)多年来已经发生了变化,并将继续发展。如果您想知道如何在 2024 年提高 SERP 排名,这里有一个简单的指南可以帮助您了解最...
    程式設計 發佈於2024-11-05
  • 如何使用多處理在 Python 進程之間共享鎖
    如何使用多處理在 Python 進程之間共享鎖
    在Python 中的進程之間共享鎖定當嘗試使用pool.map() 來定位具有多個參數(包括Lock() 物件)的函數時,它是對於解決子進程之間共享鎖的問題至關重要。由於 pickling 限制,傳統的 multiprocessing.Lock() 無法直接傳遞給 Pool 方法。 選項 1:使用 ...
    程式設計 發佈於2024-11-05
  • Type Script 中 readonly 和 const 的區別
    Type Script 中 readonly 和 const 的區別
    這兩個功能的相似之處在於它們都是不可分配的。 能具體解釋一下嗎? 在這篇文章中,我將分享它們之間的差異。 const 防止重新分配給變數。 在這種情況下,hisName 是一個不能重新分配的變數。 const hisName = 'Michael Scofield' hisN...
    程式設計 發佈於2024-11-05
  • 如何使用 Range 函式在 Python 中複製 C/C++ 循環語法?
    如何使用 Range 函式在 Python 中複製 C/C++ 循環語法?
    Python 中的 for 迴圈:擴展 C/C 迴圈語法在程式設計中,for 迴圈是迭代序列的基本結構。雖然 C/C 採用特定的循環初始化語法,但 Python 提供了更簡潔的方法。不過,Python 中有一種模仿 C/C 循環風格的方法。 實作循環運算:for (int k = 1; k <...
    程式設計 發佈於2024-11-05
  • TechEazy Consulting 推出全面的 Java、Spring Boot 和 AWS 培訓計畫並提供免費實習機會
    TechEazy Consulting 推出全面的 Java、Spring Boot 和 AWS 培訓計畫並提供免費實習機會
    TechEazy Consulting 很高興地宣布推出我們的綜合培訓計劃,專為希望轉向後端開發使用Java、Spring Boot的初學者、新手和專業人士而設計,以及AWS。 此4個月的帶薪培訓計劃之後是2個月的無薪實習,您可以在實際專案中應用您的新技能—無需任何額外的培訓費用。對於那些希望填補...
    程式設計 發佈於2024-11-05
  • Polyfills-填充物還是縫隙? (第 1 部分)
    Polyfills-填充物還是縫隙? (第 1 部分)
    幾天前,我們在組織的 Teams 聊天中收到一條優先訊息,內容如下:發現安全漏洞 - 偵測到 Polyfill JavaScript - HIGH。 舉個例子,我在一家大型銀行公司工作,你必須知道,銀行和安全漏洞就像主要的敵人。因此,我們開始深入研究這個問題,並在幾個小時內解決了這個問題,我將在下...
    程式設計 發佈於2024-11-05
  • 移位運算子與位元簡寫賦值
    移位運算子與位元簡寫賦值
    1。移位運算子 :向右移動。 >>>:無符號右移(零填充)。 2.移位運算子的一般語法 value > num-bits:將值位向右移動,保留符號位。 value >>> num-bits:透過在左側插入零將值位向右移動。 3.左移 每次左移都會導致該值的所有位元向左移動一位。 右側插入0...
    程式設計 發佈於2024-11-05

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

Copyright© 2022 湘ICP备2022001581号-3