CSS塊元素、行內元素、行內塊元素詳解

一、塊元素(Block Elements)

1.定義與特點

  1. 獨占一行:默認情況下,塊元素會從新的一行開始,并且其后的元素也會被推到下一行。
  2. 可設置寬高:可以自由設置寬度(width)和高度(height),并控制內外邊距(marginpadding)。
  3. 默認寬度:寬度默認為父容器的100%(即占滿父容器的寬度)。
  4. 內容包容性:可以包含其他塊元素或行內元素。
  5. 常見塊元素

<div>, <p>, <h1>~<h6>, <ul>, <ol>, <li>, <table>, <form>, <header>, <footer>, <nav>, <article>, <section>等。

2.示例代碼

<div style="width: 200px; background: lightblue;">這是一個塊元素(div)</div>
<p style="background: lightgreen;">段落(p)也是塊元素</p>

效果:兩個元素分別獨占一行,且div的寬度為200px,p默認寬度為父容器100%。

3.塊元素的默認行為

寬度:默認占父容器的 100%(即父容器的寬度)。

高度:默認由內容撐開(即內容的高度決定,不會自動占滿父容器的高度)。

4.. 示例 1:有父容器的情況

HTML 結構

<div class="parent"><div class="child">這是一個塊元素(div)</div>
</div>

CSS 樣式

    .parent {width: 50%;/* 父容器寬度為父級的50%(假設父級是body) */background: lightblue;height: 200px;/* 父容器高度固定為200px */border: 3px solid black;}.child {/* 默認寬度:父容器的100%(即50%的body寬度) *//* 默認高度:由內容決定(文字高度) */background: lightgreen;border: 3px dashed red;}

運行結果:

效果說明

  • 寬度.child?的寬度占父容器?.parent?的 100%(即 50% 的?body?寬度)。
  • 高度.child?的高度僅由內容(文字)決定,不會自動占滿父容器的 200px 高度。
  • 父容器高度:父容器?.parent?的高度是固定的 200px,子元素不會撐開它。

5. 示例 2:無父容器的情況

HTML 結構

<div class="child-no-parent">這是一個塊元素(div)</div>

CSS 樣式

.child-no-parent {/* 默認寬度:占瀏覽器視口的100%(因為父容器是body/html) *//* 默認高度:由內容決定(文字高度) */background: lightgreen;border: 1px dashed red;margin: 0 auto; /* 居中演示 */
}

效果說明

  • 寬度.child-no-parent?的寬度占瀏覽器視口的 100%(因為父容器是?<body>?或?<html>)。
  • 高度:高度僅由內容(文字)決定,不會自動撐滿整個瀏覽器高度。
  • 父容器影響:此時父容器是?<body>,如果?<body>?的高度未設置,子元素的高度也不會撐開整個頁面的高度。

6. 關鍵點總結

場景寬度高度
有父容器父容器的 100%由內容決定,不自動撐滿父容器高度
無父容器(直接 body)瀏覽器視口的 100%由內容決定,不自動撐滿頁面高度

7.示例代碼2

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><style>/* 設置 html 和 body 的高度為 100% */html,body {height: 100%;margin: 0;background-color: rgb(30, 210, 135);}/* 父容器設置高度為 100px */.parent {height: 100px;background-color: lightblue;}/* 子塊元素高度占滿父容器 */.child {height: 50%;background-color: lightcoral;}</style>
</head><body><div class="parent"><div class="child">這個子元素的高度占滿了父容器。</div></div>
</body></html>

二、行內元素(Inline Elements)

1.定義與特點

  1. 水平排列:多個行內元素會水平排列在同一行,直到行內空間用完才會換行。
  2. 無法設置寬高:直接設置widthheight無效,元素寬度由內容決定。
  3. 垂直對齊問題:行內元素默認以基線(baseline)對齊,可能導致布局不整齊。
  4. 只能容納文本或行內元素:不能包含塊元素。
  5. 常見行內元素

<span>, <a>, <strong>, <em>, <i>, <b>, <img>(特殊,實為行內塊),<input>(特殊,實為行內塊)等。

2.示例代碼

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><style></style>
</head><body><p>這是一個段落,里面包含行內元素:<span style="color: red;">紅色文本(span)</span><a href="#" style="color: blue;">藍色鏈接(a)</a></p>
</body></html>

效果:span和a在同一行顯示,且無法設置寬高。

三、行內塊元素(Inline-Block Elements)

1.定義與特點

行內塊元素兼具塊元素和行內元素的特點:

  1. 水平排列:與行內元素或行內塊元素在同一行顯示。
  2. 可設置寬高:可以自由設置widthheightmarginpadding
  3. 默認寬度由內容決定:寬度和高度默認由內容撐開,但可以手動調整。
  4. 常見行內塊元素

<img>, <input>, <button>, <textarea>, <select>等。

2.示例代碼

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><style></style>
</head><body><img src="image.jpg" style="width: 100px; height: 100px; display: inline-block;"><button style="width: 120px; height: 40px; display: inline-block;">按鈕</button>
</body></html>

效果:圖片和按鈕水平排列,且可以設置寬高。

四、三者的核心區別對比

特性塊元素(Block)行內元素(Inline)行內塊元素(Inline-Block)
是否獨占一行
能否設置寬高否(無效)
默認寬度父容器100%內容寬度內容寬度
內容包容性可包含塊元素和行內元素僅能包含文本或行內元素可包含其他元素(取決于具體標簽)
常見標簽<div>,?<p>,?<h1><span>,?<a>,?<em><img>,?<input>,?<button>

五、關鍵注意事項

  1. 元素嵌套規則

    • 塊元素可以包含塊元素或行內元素。
    • 行內元素只能包含文本或行內元素(如<p>中不能直接放<div>)。
    • 特殊情況:<a>標簽在HTML5中允許包含塊元素,但需謹慎使用。
  2. 行內元素的空白間隙

    • 行內元素或行內塊元素(如<img>)之間默認會因HTML中的換行或空格產生微小間隙,可通過以下方式解決:
      • 使用font-size: 0在父元素上消除空白。
      • 將HTML標簽寫在一行上,避免換行。
      • 使用vertical-align: top調整對齊方式。
  3. display屬性轉換

    • display: block:將元素轉為塊元素。
    • display: inline:將元素轉為行內元素。
    • display: inline-block:將元素轉為行內塊元素(常用技巧)。
    • display: none:隱藏元素(不占用空間)。

六、應用場景

  1. 塊元素:用于布局容器(如導航欄、側邊欄、文章區塊)。
  2. 行內元素:用于文本樣式控制(如高亮、鏈接、強調)。
  3. 行內塊元素:用于需要同時水平排列和設置寬高的場景(如按鈕組、圖片網格)。

七、常見問題解答

  1. 為什么行內元素的margin-topmargin-bottom無效?

    • 行內元素的高度由內容決定,垂直方向的外邊距會被忽略,但水平方向的margin-leftmargin-right有效。
  2. 如何讓行內元素垂直居中?

    • 使用vertical-align: middle(需與其他行內元素配合)或轉換為塊元素后用margin: auto
  3. 如何讓塊元素水平居中?

    • 設置margin: 0 auto(需指定寬度)。

總結

  • 塊元素:獨占一行,適合布局容器。
  • 行內元素:水平排列,適合文本和鏈接。
  • 行內塊元素:結合兩者優勢,適合需要靈活布局的場景(如按鈕、圖片排列)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72607.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72607.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72607.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue3項目中可以嘗試封裝那些組件

在 Vue 3 項目中&#xff0c;組件的封裝可以根據功能、復用性和業務需求進行劃分。以下是一些常見的組件類型&#xff0c;適合封裝為獨立組件&#xff1a; 1. 基礎 UI 組件 按鈕 (Button) 封裝不同樣式、大小、狀態的按鈕。支持 disabled、loading 等狀態。 輸入框 (Input) 封…

2025年AI搜索引擎開源項目全景指南:從核心框架到生態工具

2025年AI搜索引擎開源項目全景指南&#xff1a;從核心框架到生態工具 在人工智能技術迅猛發展的當下&#xff0c;開源項目已成為構建AI搜索引擎的核心驅動力。本文整理9個具有代表性的開源項目&#xff0c;涵蓋搜索框架、擴展生態及底層支持技術&#xff0c;助你快速搭建或優化…

Word 小黑第22套

對應大貓23 續編號&#xff08;編號斷了&#xff0c;從一開始&#xff09;&#xff1a;點編號&#xff0c;再設置編號值 插入以圖標方式顯示的文檔&#xff1a;插入 -對象 -由文件創建 &#xff08;這里要鏈接到文件也要勾選 不然扣一分&#xff09; 一個頁面設為橫向不影響上…

平面波揚聲器 VS球面波揚聲器的原理與優缺點對比

一、核心定義與原理 1、平面波揚聲器 1.1、平面波揚聲器的定義?&#xff1a;通過“相控陣”技術控制聲波相位&#xff0c;使聲波以平行線&#xff08;面&#xff09;定向傳播的揚聲器&#xff0c;聲波近似平面振動&#xff0c;能量集中且衰減緩慢?。 1.2、平面波揚聲器的原…

設計模式之命令設計模式

命令設計模式&#xff08;Command Pattern&#xff09; 請求以命令的形式包裹在對象中&#xff0c;并傳給調用對象。調用對象尋找可以處理該命令的對象&#xff0c;并把該命令傳給相應的對象執行命令&#xff0c;屬于行為型模式命令模式是一種特殊的策略模式&#xff0c;體現的…

EcoVadis新增可持續發展徽章

EcoVadis新增的兩項新徽章旨在進一步激勵和表彰企業在可持續發展方面的努力和成就。以下是這兩項新徽章的概述&#xff1a; 可持續發展之旅徽章&#xff08;Sustainability Journey Badge&#xff09;&#xff1a; 目的&#xff1a;表彰那些在可持續發展方面展現出持續進步和承…

力扣hot100二刷——二叉樹

第二次刷題不在idea寫代碼&#xff0c;而是直接在leetcode網站上寫&#xff0c;“逼”自己掌握常用的函數。 標志掌握程度解釋辦法?Fully 完全掌握看到題目就有思路&#xff0c;編程也很流利??Basically 基本掌握需要稍作思考&#xff0c;或者看到提示方法后能解答???Sl…

從“自習室令牌”到線程同步:探秘鎖與條件變量

目錄 互斥 為什么需要鎖 鎖的原理--互斥 鎖的使用 同步 鎖的問題 條件變量 互斥 為什么需要鎖 先看結果&#xff1a; 以下代碼是我模擬創建線程搶票&#xff0c;由于不加鎖導致票搶到了負數 main.cc: #include<vector> #include<iostream> #include"…

字符串哈希從入門到精通

一、基本概念 字符串哈希是將任意長度的字符串映射為固定長度的哈希值&#xff08;通常為整數&#xff09;的技術&#xff0c;核心目標是實現O(1)時間的子串快速比較和高效查詢。其本質是通過數學運算將字符串轉換為唯一性較高的數值&#xff0c;例如&#xff1a; ??????…

什么是數學建模?數學建模是將實際問題轉化為數學問題

數學建模是將實際問題轉化為數學問題&#xff0c;并通過數學工具進行分析、求解和驗證的過程。 一、數學建模的基本流程 問題分析 ? 明確目標&#xff1a;確定需要解決的核心問題。 ? 簡化現實&#xff1a;識別關鍵變量、忽略次要因素。 ? 定義輸入和輸出&#xff1a;明確模…

搭建主從服務器

任務需求 客戶端通過訪問 www.nihao.com 后&#xff0c;能夠通過 dns 域名解析&#xff0c;訪問到 nginx 服務中由 nfs 共享的首頁文件&#xff0c;內容為&#xff1a;Very good, you have successfully set up the system. 各個主機能夠實現時間同步&#xff0c;并且都開啟防…

【python web】一文掌握 Flask 的基礎用法

文章目錄 一、 Flask 介紹1.1 安裝 Flask二、Flask的基本使用2.1 創建第一個 Flask 應用2.2 路由與視圖函數2.3 請求與響應2.4 響應對象2.5 模板渲染2.6 模板繼承2.7 靜態文件管理2.8 Blueprint 藍圖2.9 錯誤處理三、Flask擴展與插件四、部署 Flask 應用五、總結Flask 是一個輕…

最長最短單詞(信息學奧賽一本通-1143)

【題目描述】 輸入1行句子(不多于200個單詞&#xff0c;每個單詞長度不超過100)&#xff0c;只包含字母、空格和逗號。單詞由至少一個連續的字母構成&#xff0c;空格和逗號都是單詞間的間隔。 試輸出第1個最長的單詞和第1個最短單詞。 【輸入】 一行句子。 【輸出】 第1行&…

AlexNet 有哪些首創?

現在大家每逢討論人工智能&#xff0c;都離不開深度學習&#xff0c;這輪深度學習的熱潮&#xff0c;追根溯源可以到2012年 AlexNet 的橫空出世。后來&#xff0c;大家開始發現深度學習越來越強的能力。 AlexNet 的首創貢獻 AlexNet&#xff08;2012年&#xff09;作為現代深…

【Linux我做主】基礎命令完全指南上篇

Linux基礎命令完全指南【上篇】 Linux基礎命令完全指南github地址前言命令行操作的引入Linux文件系統樹形結構的根文件系統絕對路徑和相對路徑適用場景Linux目錄下的隱藏文件 基本指令目錄和文件相關1. ls2. cd和pwdcdpwd 3. touch4. mkdir5. cp6. mv移動目錄時覆蓋寫入的兩種特…

OceanBase 用戶問題精選答疑:OceanBase 版本升級解析

背景 此篇博客的源自于OceanBase社區論壇內一位名為皇甫侯的熱心用戶所提的建議&#xff0c;希望向OceanBase的用戶介紹OceanBase的版本升級路徑。本文以一個版本升級為示例&#xff0c;匯總了對用戶而言比較重要的版本升級要點&#xff0c;期望通過這份分享&#xff0c;能讓讀…

Docker Desktop 安裝與使用詳解

目錄 1. 前言2. Docker Desktop 安裝2.1 下載及安裝2.2 登錄 Docker 賬號2.3 進入 Docker Desktop 主界面 3. Docker 版本查看與環境檢查3.1 查看 Docker Desktop 支持的 Docker 和 Kubernetes 版本3.2 檢查 Docker 版本 4. Docker Hub 和常用鏡像管理方式4.1 使用 Docker Hub4…

英文LaTeX中左右引號怎么打

在英文 LaTeX 中&#xff0c;要輸入左右引號&#xff0c;可以使用以下命令&#xff1a; 左雙引號&#xff1a;&#xff08;兩個反引號&#xff09;右雙引號&#xff1a;&#xff08;兩個單引號&#xff09; 例如&#xff1a; This is a quoted text.這將顯示為&#xff1a; …

推理大模型的后訓練增強技術-Reasoning模型也進化到2.0了,這次居然學會用工具了

論文題目&#xff1a;START: Self-taught Reasoner with Tools 論文鏈接&#xff1a;https://arxiv.org/pdf/2503.04625 論文簡介 Reasoning模型也進化到2.0了&#xff0c;這次居然學會用工具了&#xff01;? 最近有個叫START的方法&#xff0c;讓大模型也能學著用工具&#…

LeetCode[24]兩兩交換鏈表中的節點

思路&#xff1a; 就對于這種頭節點發生變化的&#xff0c; 我覺得一般都需要一個虛擬頭節點&#xff0c;然后無非就是讓虛擬頭節點的后兩個節點進行交換&#xff0c;即找到要交換的兩個節點的前一個節點&#xff0c;然后每次循環的時候都要記住這點&#xff0c;這道題就很簡單…