前言
通常情况下,要使元素排列在一行内,通常做法就是使用float,然后再清浮动。
如下:
但是如果要使其垂直居中,则必须手动调整,蓝色或者绿色块的位置,比较繁琐。
或者另外一种方法,使用inline-block或inline(即IFC),刚好在这里碰到了点坑。
相关css
IFC(Inline formatting contexts)内联格式上下文,完全不知道什么鬼。
主要影响IFC内布局的css
- font-size
- line-height
- height
- vertical-aligin
line-box
行盒模型,这是一个显示区域,根据块状容器内,每一行的多个内联元素(inline-level element)都会共同生成一个行盒模型。
font-size
常见的属性,用来指定文本类型节点的大小。IFC内的很多属性的值是基于这个的。
line-height & height
行高在w3c中更明确的定义:
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。
在一个由多个内联元素组成的块状容器内,'line-height'为内联元素的行盒模型指定了一个最低高度。
这个最低高度是分别由基线上的最小高度和基线下的最小深度组成。
盗张图的来示意下,从上到下四条线分别是顶线、中线、基线、底线。
那么行高是指上下文本行的基线间的垂直距离,即图中两条红线间垂直距离(实际在数值上,行高也等于其它相同颜色间的距离)。
换种思路来理解下行高。
实际上很多情况下,一个容器中是只有一行的即只有一条基线,行高是如何计算,以确保这个间距呢?
如下:
蓝色是容器的范围,边界线之间是一个line box。文字其中的内联元素。
所以,
当line-height > font-size时
一个为被设定高度的容器被设定一个行高时,内联元内容的上下会增加2个空白内容的高度。而容器的高度也会撑开,使容器的高度与line-height相等。
a1 + b1 +c1 == line-height & a1 == c1
如果容器的高度已经被设定,那么超出容器下边界线的部分则不影响布局。
当line-height
容器未被指定高度时,容器的上下两侧塌陷(类似于margin为负值的情况),但上述公式仍成立。
a1(负值) + b1 + c1(负值) == line-height & a1 == c1
如下所示:
白色是塌陷的部分(即 a1 和 c1),红色是line-height,如果把容器设置为 overflow:hidden,
那么就只能看见红色的部分。
如果容器被指定height高度时,
height > line-height,那么黄线会下移,红色部分会展示更多,
height
所以在这里的情况是,
决定容器高度的优先级 height > line-height > font-size
vertical-align
垂直对齐线,默认为baselien,来自W3C的定义:
This property affects the vertical positioning inside a line box of the boxes generated by an inline-level element.
该属性影响由多个内联元素生成的盒模型组成的行内盒模型的垂直定位
vertical有几个特定的值,或者指定一个值。
<br /><br /><p class="a1"> <span style="vertical-align:60px;">English中文 </span> <span>中文English </span></p>
给第一个span,设置60px的垂直偏移量,显示如下:
其中,黄色线就是基线(baseline),绿线和黄线的间隔即为60px。
这里会发现,容器(蓝色)的高度被撑高了。
容器的高度 height = line-height + vertical-align
当然同理,如果容器的高度被指定了,那么高度则不变,而超出的部分则不影响布局。如果设置overflow:hidden,超过的部分则不可见。
而vertical-align的其它特殊值,均可以看做一个根据容器高度而变化的相对值。
结论
熟练使用inline-level element和行内布局的属性,以非常快速完成垂直居中和水平居中的效果,并且有良好的可维护性和拓展性。
参考
W3C IFC
W3C line-height和vertical-aligin
line-height详解

布爾屬性是HTML中的特殊屬性,不需要值即可激活。 1.布爾屬性通過存在與否控制元素行為,如disabled禁用輸入框。 2.它們的工作原理是瀏覽器解析時根據屬性的存在改變元素行為。 3.基本用法是直接添加屬性,高級用法可通過JavaScript動態控制。 4.常見錯誤是誤以為需要設置值,正確寫法應簡潔。 5.最佳實踐是保持代碼簡潔,合理使用布爾屬性以優化網頁性能和用戶體驗。

HTML代碼可以通過在線驗證器、集成工具和自動化流程來確保其清潔度。 1)使用W3CMarkupValidationService在線驗證HTML代碼。 2)在VisualStudioCode中安裝並配置HTMLHint擴展進行實時驗證。 3)利用HTMLTidy在構建流程中自動驗證和清理HTML文件。

HTML、CSS和JavaScript是構建現代網頁的核心技術:1.HTML定義網頁結構,2.CSS負責網頁外觀,3.JavaScript提供網頁動態和交互性,它們共同作用,打造出用戶體驗良好的網站。

HTML的功能是定義網頁的結構和內容,其目的在於提供一種標準化的方式來展示信息。 1)HTML通過標籤和屬性組織網頁的各個部分,如標題和段落。 2)它支持內容與表現分離,提升維護效率。 3)HTML具有可擴展性,允許自定義標籤增強SEO。

HTML的未來趨勢是語義化和Web組件,CSS的未來趨勢是CSS-in-JS和CSSHoudini,JavaScript的未來趨勢是WebAssembly和Serverless。 1.HTML的語義化提高可訪問性和SEO效果,Web組件提升開發效率但需注意瀏覽器兼容性。 2.CSS-in-JS增強樣式管理靈活性但可能增大文件體積,CSSHoudini允許直接操作CSS渲染。 3.WebAssembly優化瀏覽器應用性能但學習曲線陡,Serverless簡化開發但需優化冷啟動問題。

HTML、CSS和JavaScript在Web開發中的作用分別是:1.HTML定義網頁結構,2.CSS控製網頁樣式,3.JavaScript添加動態行為。它們共同構建了現代網站的框架、美觀和交互性。

HTML的未來充滿了無限可能。 1)新功能和標準將包括更多的語義化標籤和WebComponents的普及。 2)網頁設計趨勢將繼續向響應式和無障礙設計發展。 3)性能優化將通過響應式圖片加載和延遲加載技術提升用戶體驗。

HTML、CSS和JavaScript在網頁開發中的角色分別是:HTML負責內容結構,CSS負責樣式,JavaScript負責動態行為。 1.HTML通過標籤定義網頁結構和內容,確保語義化。 2.CSS通過選擇器和屬性控製網頁樣式,使其美觀易讀。 3.JavaScript通過腳本控製網頁行為,實現動態和交互功能。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver CS6
視覺化網頁開發工具