進一步理解:inline-block,vertical-align,line-height

看似三個最常見的概念背后卻隱藏了很深的很深“水”
那有多深呢,先來看下面的代碼

引出問題

<style>.inline-block {display: inline-block;}.border {border: 1px solid #000000;}.span {width: 100px;height: 100px;}.bak {background: #33CCFF;} .o-hidden {overflow: hidden;}
</style>
<div class="border"><span class="inline-block border"></span>
</div>
<div class="border"><span class="inline-block border span"></span>
</div>
<div class="border"><span class="bak inline-block">x</span><span class="inline-block border span"></span>
</div> 
<div>x<span class="inline-block border span">x</span><span class="inline-block border span"></span><span class="inline-block border span o-hidden">xjq</span>
</div> 

好,同學們把這四段代碼放到編輯器里面然后打開瀏覽器,如果對于你眼前的畫面沒有感到疑惑,那么其實你就無需向下看了

On a block container element whose content is composed of inline-level elements, ‘line-height’ specifies the minimal height of line boxes within the element. The minimum height consists of a minimum height above the baseline and a minimum depth below it, exactly as if each line box starts with a zero-width inline box with the element’s font and line height properties. We call that imaginary box a “strut.” (The name is inspired by TeX.).

翻譯成國語:

在一個由行內元素組成的塊級元素中,line-height指定了這個元素中的所有line box的最小高度。這個最小高度包括在baseline上面的最小高度和baseline下面的最小深度,就好像每個line box是由一個0寬度的,有著元素的font和line-height屬性的行內框開始的,我們稱這個虛擬的盒子為strut

關于baseline和line box的概念請參考張鑫旭大大的文章:
http://www.zhangxinxu.com/wor...

看著很亂是吧,上圖來看:

分析原因

圖片描述

圖片描述

這是前兩段代碼的示意圖,對比兩張圖發現span沒有寬高的情況下,baseline上下分別有隱形高度;設置寬高之后,下面的strut仍然存在,再來看第三段代碼的示意圖

圖片描述

圖中藍色區域為行內框的高度,紅線即字母x的baseline,strut的高度正好是紅線到底邊框的高度,也就是說默認垂直對齊方式是baseline;掃了一眼MDN關于vertical-align的文檔,默認值果然是baseline,印證了這一說法。

看最后一段代碼示意圖:
圖片描述

wtf,這又是幾個意思??baseline怎么又和底邊框接上了??

The baseline of an ‘inline-block’ is the baseline of its last line box in the normal flow, unless it has either no in-flow line boxes or if its ‘overflow’ property has a computed value other than ‘visible’, in which case the baseline is the bottom margin edge.

再來翻譯成國語:

對于一個 inline-block 元素,如果它內部沒有內聯元素,或者它的overflow屬性不是visible,那么它的baseline就是元素margin的底端。否則,就是它內部最后一個元素的基線。

好了,圖中三個框可以很好地理解這段話:

最前面的x是用來確定這個代碼中最外層的div的基線。左起第一個矩形內部有文字,屬于內聯元素,那么第一個inline-block的基線為內部x的基線,第二個inline-block的內部無內聯元素,那么它的基線就是margin的底端,第三個inline-block內部有內聯元素,但是他的overflow屬性為hidden,不是visible,所以它的基線還是margin的底端。

解決方案

  1. font-size: 0 或者 line-height: 0

  2. vertical-align !== baseline

方法1和方法2是兩個不同的實現思路,方法1是讓strut那個東西消失;方法2說起來就有點多了,簡單理解就是inline-block垂直方向設置非baseline,從而讓strut沒有頂到底部,也就不會有空白出現了

感覺自己寫的很亂,有耐心看完的同學真是謝謝你們了~~

還是張鑫旭大大寫得好寫的全
http://www.zhangxinxu.com/wor...

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

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

相關文章

刷系統——黑屏問題

引用&#xff1a;http://www.miui.com/thread-344361-1-1.html 此貼大部分內容源自魔趣論壇V大的帖子&#xff0c;本人經過整理后發出&#xff0c;特此聲明原帖地址&#xff1a;http://bbs.mfunz.com/thread-172610-1-1.html——此貼獻給小白們&#xff0c;老鳥一笑而過吧近期有…

LeetCode OJ - Recover Binary Search Tree

題目&#xff1a; Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing its structure. Note:A solution using O(n) space is pretty straight forward. Could you devise a constant space solution? 解題思路&#xff…

mysql中間件是運維工作內容_linux運維工作的七項內容

一&#xff0c;【基礎運維檢查】或叫 例行檢查 或叫 例行巡檢mail cacti1.理解例行檢查列表的內容、檢查項的含義以及可能引發的問題。2.按照例行檢查表&#xff0c;定期檢查系統狀態&#xff0c;發現異常立即通報并推進解決。3.定期檢查線上服務模塊&#xff0c;排除可疑進程,…

java executor_Java并發編程(08):Executor線程池框架

一、Executor框架簡介1、基礎簡介Executor系統中&#xff0c;將線程任務提交和任務執行進行了解耦的設計&#xff0c;Executor有各種功能強大的實現類&#xff0c;提供便捷方式來提交任務并且獲取任務執行結果&#xff0c;封裝了任務執行的過程&#xff0c;不再需要Thread().st…

Exchange 2007遷移Exchange 2010應該注意的13件事

1. Exchange 2007可以支持升級到Exchange 2010&#xff0c;但需要提前將Exchange 2007所有服務器環境升級至 SP2或以上版本。2. Exchange 2007如果更新至SP2或以上版本&#xff0c;則建議按照以下順序進行各角色的更新&#xff1a; CAS、UM、HUB、Edge、Mailbox。3. …

dom4j操作XML

(一&#xff09;創建Document的基本操作 /** * XML基本操作 */ public void BaseOperation(){ //創建一個document Document documentDocumentHelper.createDocument(); //創建根結點 Element rootdocument.addElement("root"); //為根結點添加一個book節點 Element …

Oracle數據庫中閃回恢復的詳細分析

Oracle9i開始提供閃回查詢&#xff0c;以便能在需要的時候查到過去某個時刻的一致性數據&#xff0c;這是通過Undo實現的。這個功能有很大的限制&#xff0c;就是相關事務的undo不能被覆蓋&#xff0c;否則就無力回天了。oracle10g大大的增強了閃回查詢的功能&#xff0c;并且提…

python 查看當前目錄_「Python」打包分發工具setuptools學習

?setuptools是python標準的打包分發工具&#xff0c;它可以將我們編寫的python項目打包安裝&#xff0c;這樣其他同事就可以像調用標準庫或python第三方庫那樣直接使用&#xff1b;也可以將項目上傳到Pypi供更多人的下載安裝使用。?1. 項目結構項目結構?這是一個打包構建好的…

如何殺掉D狀態的進程?[zt]【轉】

轉自&#xff1a;http://blog.csdn.net/chinalinuxzend/article/details/4288791 [-] 如何殺掉D狀態的進程zt相關博文原貼:http://www.xclinux.cn/?p752 如何殺掉D狀態的進程&#xff1f;[zt] 狀態為 D (Uninterruptible sleep) &#xff0c;以及狀態為 Z (Zombie)這些垃圾進程…

九月十月百度人搜,阿里巴巴,騰訊華為筆試面試八十題(第331-410題)

九月十月百度人搜&#xff0c;阿里巴巴&#xff0c;騰訊華為小米搜狗筆試面試八十題 &#xff08;參與算法&面試題交流與討論&#xff0c;請加群&#xff1a;30382647&#xff09;引言 自發表上一篇文章至今&#xff08;事實上&#xff0c;上篇文章更新了近3個月之久&#…

mysql性能結構優化原理_MySQL性能管理及架構設計(二):數據庫結構優化、高可用架構設計、數據庫索引優化...

一、數據庫結構優化(非常重要)1.1 數據庫結構優化目的1、減少數據冗余&#xff1a;(數據冗余是指在數據庫中存在相同的數據&#xff0c;或者某些數據可以由其他數據計算得到)&#xff0c;注意&#xff0c;盡量減少不代表完全避免數據冗余&#xff1b;2、盡量避免數據維護中出現…

python git是什么_python爬蟲之git的使用

一、簡單認識&#xff1a; 1、初始化文件夾為版本控制文件夾&#xff0c;首先建立一個文件夾&#xff0c;進入這個文件夾以后輸入git init初始化這個文件夾。2、Git幾種位置概念 1、本地代碼&#xff1a;本地更改完代碼以后&#xff0c;雖然是存放在git的文件夾里面&#xff0c…

產品經理網站數據分析之測量問題現狀(二)

本章續接上文&#xff0c;主要講解流程圖的繪制要領&#xff0c;以及示例。 1、基礎流程圖 基礎流程圖應該簡明扼要地描述出流程的主要結構&#xff0c;在弄清楚流程的起點、終點&#xff0c;以及主要步驟后&#xff0c;按照流程的先后順序&#xff0c;按照要展示的流程長短比例…

鍵盤流的逆襲- Idea 中使用 VIM mode 提高生成效率

Idea 中使用 VIM mode 提高生成效率 安裝配置 Idea 的 vim 插件 先挖坑&#xff0c;后續再填。這個毫無技術含量&#xff0c;不寫了&#xff0c;自己去搜吧。 快捷鍵代替鼠標 打開文件 按兩下 shift 鍵 > 輸入類目文件名按 command e &#xff0c;打開最近編輯的文件列表&a…

git 撤銷掛起的更改_Timer計時任務因系統時間的修改導致掛起解決方案

之前開發的一款運行在定制Android設備上的一個實時監控程序發生了一個很奇怪的問題&#xff1a;關機狀態下放置了半個月左右的時間之后&#xff0c;再次開機使用&#xff0c;使用到一半的時候&#xff0c;顯示界面就卡死在某一個狀態下了(顯示界面只顯示一行文字&#xff0c;代…

yii urlmanager配置post不生效_一文帶你徹底學會 Git Hooks 配置

你好&#xff0c;我是小桔&#xff0c;是一個沒有感情的代碼崽。今天給大家介紹一下 Git Hooks&#xff0c;相信 Git 大家都在用吧&#xff0c;Git 除了用作版本控制&#xff0c;還有許多高級功能&#xff0c;Git Hooks 就是其中之一。本文環境&#xff1a;Git 版本&#xff1a…

Tiff – 值得你體驗一下的可視化的字體對比工具

Tiff 是一款字體對比工具&#xff0c;可視化對比兩種字體之間的差異。這是一個工具來幫助比較兩種字體&#xff0c;同時學習排版。在這一點上&#xff0c;谷歌 Web 字體作為 Tiff 外部字體文件的唯一來源。由于應用程序使用的一些功能需要 HTML5 和 CSS3 支持&#xff0c;因此請…

[.NET] 建構子中傳遞子對象的對象

在設計對象繼承的時候&#xff0c;父對象建構子會需要一些參數&#xff0c;這些參數可以由子對象建構子透過base關鍵詞來提供。 namespace Test001 {public class ParentClass{// Constructorspublic ParentClass(IEnumerable<string> dataCollection){this.DataCollecti…

php基礎教程(三):變量

1、php變量規則 變量以 $ 符號開頭&#xff0c;其后是變量的名稱變量名稱必須以字母或下劃線開頭變量名稱不能以數字開頭變量名稱只能包含字母數字字符和下劃線&#xff08;A-z、0-9 以及 _&#xff09;變量名稱對大小寫敏感&#xff08;$y 與 $Y 是兩個不同的變量&#xff09;…

操作系統實驗文件管理_系統設計硬核知識(5)——操作系統的文件管理

操作系統對計算機的管理包括兩個方面&#xff1a;硬件資源和軟件資源。硬件資源的管理包括CPU 的管理、存儲器的管理、設備管理等&#xff0c;主要解決硬件資源的有效和合理利用問題。軟件資源包括各種系統程序、各種應用程序、各種用戶程序&#xff0c;也包括大量的文檔材料、…