我腦中飄來飄去的css魔幻屬性

2021-09-24 06:51:58 字數 3042 閱讀 6573

最近看到一篇20 個css高階技巧彙總的彙總,感觸很深,不過我想,與技巧相比,有些常見css布局難題,有時候更加讓我們的日常開發變得躊躇沮喪吧。 在寫這一篇文章之前,自己還寫過一篇:我所不注意的那些css冷知識,但卻阻止了我做專案的速度,如果你看了,我相信你也會受益的。

這是我在segmentfault上看到的乙個問題,以前自己遇到過,所以就很熱情洋溢的去回答了一下,難道遇到個自己會的,示例**是這樣的:

css:

li

.left,.center,.right

.left

.center

.right

html:

複製**

大概就是這樣子,其實文和圖有點不對應,**中第乙個模組他只寫了乙個「1」,我為了現象更加明顯,且好說明為什麼,就打了一大段文字,現在我們來說說為什麼。先來一張圖,看懂vertical-align的幾個屬性,順便帶上

出處,文章講得還可以,理解這張,後面就好理解了。

inline-block的vertical-align 屬性預設是baseline對齊(深入理解的送福利),也就是英文文字小寫字母a,b,c這類字母底部的那條線,因為這些是外國人發明的,所以以英文本母才有針對性。inline-block擁有vertical-align屬性,其預設是基線對齊的,所以這三個inline-box需要基線對齊,而其基準線就是正常流中最後乙個line box的基線,如果這個元素是空的,沒有內容,那麼這個基線就是最後這個元素的margin-bottom線;如果這個元素不為空,那麼這個元素的基線就是元素裡面內容最後一行文字的基線;所以我們乙個乙個來套,發現這三個li元素在一行,第乙個有文字,其基線為文字底部;最後乙個沒有文字,其基線為margin-bottom線,考試要考,劃重點,可以自己為元素設定margin-bottom試試,這就會造成第乙個和二,三個錯行的感覺,其實他兩是為了基線對齊,所以多敲幾十個文字就能明顯看出其差別。所以最簡單的解決方案就是為li新增vertical-align: 屬性不為baseline,氣不氣,改變其縱向的對齊方式的預設屬性;為啥非弄個折騰人勒。關於vertical-align,如果還想做這方面的深入了解,可以看看張大俠的分析

直接上圖更直觀(箭頭所指):

相關css和html:

複製**

其實這個問題,如果你單單這樣看,和我一樣涉世未深的話,是一眼看不出答案的,但是如果你在後面多敲兩個文字,你就會發現,和上個問題,這又是乙個有關於vertical-align屬性相關的問題。
複製**

讓人恍然大悟的效果圖:

這下你應該就懂了,下面的空隙的距離實際上等與1個line-height的底邊與baseline之間的間距。仔細觀察,的底邊是和a的下邊緣是在一條水平線上的,而不是和『看』字下邊緣一條水平線上的。所以為什麼上面說這又是乙個和vertical-align屬性相關的問題。先說解決方案針對于父元素div:

像上圖那樣的形式,盒子由導航欄和右側乙個搜尋框或者登入名什麼的一起組成,這也是我們常用浮動的方式來解決這樣的布局。

說浮動前,先說三點概念:

1.浮動最初出現的意義是為了解決文字環繞這種在雜誌報紙中常會出現的布局樣式; (看下圖) 2.浮動與絕對定位能實現相同的效果,但的區別是,浮動未脫離正常文件流,但絕對定位脫離了正常文件流;

3.浮動能帶來靈活的布局,但同時也帶來了父元素高度塌陷的缺點(看下圖),所以清除浮動是使用浮動前的必修課,後面會說到;

2.浮動與絕對定位能實現相同的效果,但的區別是,浮動未脫離正常文件流,但絕對定位脫離了正常文件流;

3.浮動能帶來靈活的布局,但同時也帶來了父元素高度塌陷的缺點,所以清除浮動是使用浮動前的必修課,後面會說到;

我是下面乙個div的文字。

我是再下面乙個div的文字。。

.test

.test span

.blank

img

input

.box

.box .dot

複製**

一中,實現了文字環繞那種想要的效果,並且後面的元素沒有上移錯位,其原因是上面說過的,如果塊狀元素沒有顯示的設定高度,其高度由其元素內的最高的linebox決定,所以第一張div的高度是比img高度高的,因為我重要的事情說了三遍,文字夠多。而第二張,div高度只有144px,因為img是浮動的,他的linebox被浮動屬性破壞了,而文字又不夠多,所以就造成了所謂的高度塌陷,致使最後兩個div陷進了所在的div中,要知道,這種情況在正常塊狀元素布局中是根本不會出現的。至於解決浮動引起的高度塌陷,我總結了兩條,分別是:

使用clear:both,常見的什麼clearfix;

觸發浮動元素父元素的bfc(塊狀格式上下文,為解決盒子與盒子之間,內容不相符影響而生的概念); 清除浮動,相信大家都懂,而觸發bfc。

我說說我常用的幾條,網上講bfc的很多:

上面這種沒按想要的方式浮,是因為塊狀元素會不敢其內容長度有沒有一行的長度,其都會佔據一行的長度,後面的元素會自動換行。解決這個其最簡單的方式就是將fr元素放在gr元素前,為什麼這樣就可以,因為float破壞了div元素的塊狀屬性,但其未撐開父元素的高度,其浮動屬性為right,預設從右側開始布局,所以後面的div仍按正常的文件流從最左端開始布局。

如果你看上面一題**的時足夠細心,你會發現我給img設定了width和height兩個屬性值為130,但由於又在css屬性裡定義了寬高260,但最終表現出的寬高為260。如果css不定義寬高呢?答案是多少,要不你試試,你慢慢試,我還是先公布答案:130.這裡我們將會說乙個css中的乙個鮮為人知的術語:置換元素,那什麼又是置換元素呢?

置換元素是指:瀏覽器根據元素的標籤和屬性,來決定元素的具體顯示內容。

置換元素有如下共同點:

置換元素一般內建寬高屬性,因此可以設定其寬高;

置換元素與一般的行內元素相比,其可以設定margin,padding,height,width等css屬性;

感覺要寫的還有很多,事件根本不夠用,先睡了,未完待續

如果文中有任何不足和錯誤之處,還請及時指正。

w10隱藏我的電腦中子資料夾

在執行對話方塊中輸入regedit開啟登錄檔編輯器 開啟登錄檔編輯器後定位到hkey local machine software microsoft windows currentversion explorer folderdescriptions 下面是具體定位 propertybag thi...

我的電腦中不顯示行動硬碟或U盤

解決方辦法法如下 1.在桌面上對著計算機圖示點選擊右鍵,在i彈出的選單中點選選擇 管理 選項,開啟計算機管理頁面。2.在計算機管理頁面中,點選頁面左側中的 裝置管理器 選項,然後找到頁面右側的 通用序列匯流排控制器 選項。3.開啟通用序列匯流排控制器設定選項之後,我們右鍵點選其中的 usb3.0可擴...

隱藏Windows10我的電腦中的6個資料夾

win r,輸入regedit,然後一次點選hkey local machine software microsoft windows currentversion explorer folderdescriptions 找到相對應得登錄檔項,點選propertybag,把thispcpolicy的...