行內元素視覺格式化

来源:http://www.cnblogs.com/xiaohuochai/archive/2016/02/19/5201214.html
-Advertisement-
Play Games

[1]基本術語 [2]構造行框 [3]行內非替換元素 [4]行內替換元素


目錄
[1]基本術語 [2]構造行框 [3]非替換元素 [4]替換元素

前面的話

  行內元素沒有塊級元素那麼簡單和直接,塊級元素只是生成框,通常不允許其他內容與這些框並存。而控制行內元素視覺格式化的主要是font-size、line-height、vertical-align

 

基本術語

  在瞭解行內元素視覺格式化之前要先瞭解一些涉及到的基本術語

匿名文本

  匿名文本(anonymous text)是指所有未包含在行內元素中的字元串

em框

  em框在字體中定義,也稱為字元框(character box)。實際的字形可能比其em框更高或更矮。在CSS中,font-size的值確定了各個em框的高度

內容區

  在非替換元素中,內容區可能在兩種。內容區可以是元素中各字元的em框串在一起構成的框,也可以是由元素中字元字形描述的框;而在替換元素中,內容區就是元素的固有高度再加上可能有的外邊距、邊框或內邊距。內容區類似於一個塊級元素的內容框

行間距

  行間距(leading)是font-size和line-height之差。這個差實際上要分為兩半,分別應用到內容區的頂部和底部

  [註意]行間距只應用於非替換元素

行內框

  行內框通過向內容區增加行間距來描述。對於非替換元素,元素行內框的高度等於line-height的高度;對於替換元素,元素行內框的高度則恰好等於內容區的高度

行框

  這是包含該行中出現的行內框的最高點和最低點的最小框。換句話說,行框的上邊界要位於最高行內框的上邊界;而行框的底邊要放在最低行內框的下邊界

 

構造行框

  1、替換元素:得到各元素的height、margin-top、margin-bottom、padding-top、padding-bottom、border-top-width、border-bottom-width值,把它們加在一起;非替換元素:得到各行內非替換元素及不屬於後代行內元素的所有文本的font-size值和line-height值,再將line-height減去font-size,得到行的行間距,這個行間距除以2,將其一半分別應用到em框的頂部和底部

  2、對於各內容區,確定它在整行基線的上方和下方分別超出多少。替換元素:將其底邊放在整行的基線上;非替換元素:確定各元素及匿名文本各部分的基線的位置,並知道該行本身基線的位置,然後將其對齊

  3、對於指定了vertical-align值的元素,確定其垂直偏移量。由此可知,該元素的行內框要向上或向下移動多遠,並改變元素在基線上方或下方超出的距離

  4、既然已經知道了所有行內框會放在哪裡,再來計算最後的行框高度。為此,只需將基線與最高行內頂端之間的距離加上基線與最低行內框底端之間的距離

 

行內非替換元素

內容區

  對於行內非替換元素或匿名文本某一部分,font-size值確定了內容區的高度。如果一個行內元素的font-size為15px,則內容區的高度為15px

行內框

  內容區加上行間距等於行內框。如果一個行內非替換元素的font-size為15px,line-height為21px,則相差6px。用戶代理將這6像素一分為二,將其一半分別應用到內容區的頂部和底部,這就得到了行內框

 

  當line-height小於font-size時,行內框實際上小於內容區

 

行框

  行框定義為行中最高行內框的頂端到最低行內框底端之間的距離,而且各行框的頂端挨著上一行行框的底端

框屬性

  內邊距、外邊距和邊框不影響行框的高度,即不影響行高

  行內元素的邊框邊界由font-size而不是line-height控制

  外邊距不會應用到行內非替換元素的頂端和底端

  margin-left、padding-left、border-left應用到元素的開始處;而margin-right、padding-right、border-right應用到元素的結尾處

div{
    width: 200px;
    border: 1px solid red;
}    
span{
    border: 1px solid black;
    background-color: yellow;
    padding: 6px;    
    margin: 6px;
    font-size: 30px;
    line-height: 50px;
}
<div><span>測試文字測試文字測試文字</span></div>

行內替換元素

框屬性

  行內替換元素有固有的高度和寬度,替換元素的整體包括內容、外邊距、內邊距和邊框來定義元素的行內框

  替換元素可以增加行框的高度,但不影響line-height值

div{
    width: 300px;
    border: 1px solid red;
}    
span{
    border: 1px solid black;
    background-color: yellow;
    font-size: 30px;
    line-height: 50px;
}
img{
    height: 26px;
    padding: 2px;
    margin: 2px;
}
<div><span>測試文字測試<img src="backup/lamp.gif" alt="測試圖片">文字測試文字</span></div>

行高

  行內替換元素需要使用line-height值,從而在垂直對齊時能正確地定位元素。因為vertical-align的百分數值是相對於元素的line-height來計算的。對於垂直對齊來說,圖像本身的高度無關緊要,關鍵是line-height的值

基線

  預設地,行內替換元素位於基線上。如果向替換元素增加下內邊距、外邊距或邊框,內容區會上移。替換元素並沒有自己的基線,所以相對來說最好的辦法是將其行內框的底端與基線對齊。因此,實際上是下外邊距邊界與基線對齊

  對於這種情況最常見的解決辦法是使圖像成為塊級元素,這樣它們就不會產生行框。另一種可取的辦法是將圖像的父級的line-height設置為0

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [1]line-height [2]font-size [3]vertical-align
  • Web 項目或多或少都會有涉及到什麼人員職稱樹,菜單樹,組織機構樹...... 歷手三四個項目有大有小,採用的樹前端都是 Ztree。 有些優秀的J2EE 框架將這些常用的組件都封裝起來,作為模塊化的組件提供給前端,這樣固然是好,開發效率會提升幾倍。 客戶需求是什麼,組件化往上一套,幾分鐘就能搭建起
  • 比較深入全面地介紹了什麼是同源策略,同源策略的影響以及如何繞過同源策略進行CSRF攻擊。同時跨域請求的實際應用,通過案例分析跨域請求的幾種辦法:cors、jsonp、子域域父域、iframe跨父域、postMessage實現frame和父視窗的通信
  • Myeclipse 環境下Freemarker Editor
  • 在討論jquery對象和DOM對象的相互轉換之前,先約定好定義變數的風格如果獲取的是jquery對象,那麼在變數前面加上$,例如 var $varible = jquery對象; 如果獲取的是DOM對象,則定義如下: var varible = DOM對象; 1.jquery對象轉成DOM對象: j
  • 1.動態載入腳本 <script type="text/javascript"> function loadScript(url){ var script=document.createElement("script"); script.type="text/javascript"; script.
  • 代碼: 輸出結果 補充: reg.lastIndex:下一次正則捕獲的開始查找的索引位置 ->正則的懶惰性就是因為預設情況下lastIndex值都是0,我們不管執行幾次exec,都是從字元串的開始位置查找,那麼每一次捕獲到的都是第一個符合的內容
  • 今天看了關於js閉包方面的文章,還是有些雲里霧裡,對於一個菜鳥來說,學習閉包確實有一定的難度,不說別的,能夠在網上找到一篇優秀的是那樣的不易。 當然之所以閉包難理解,個人覺得是基礎知識掌握的不牢,因為閉包牽扯到一些前面的東西,比如作用域\等等,如果連基本的作用域都沒有弄清楚,自然不可能搞懂閉包,還有
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...