我可能學(xué)了假的CSS

前段時間在知乎上看到一個問題:為什么CSS這么難學(xué)?其中@方應(yīng)杭的回答拿了最高贊,按照答主的話來說,CSS難學(xué)就是因為三個字:不正交。

接下來我們就來舉些例子來展示一下CSS的 “不正交” 。

1. border影響margin

先來給大家展示一個神奇的事情:

起始代碼

大家先看一波基本的代碼,這里有三個div,寬高都為100px,外邊距為20px,1px的邊框,我們都知道相鄰的兄弟姐妹元素外邊距會產(chǎn)生合并,所以三個div之間的距離是20px,沒毛病~
修改1

上圖是我們做了第一次修改之后的樣子,誒?加了一個只有邊框的<div class="child"></div>就把外邊距合并的問題解決了?我操作的是border為什么會影響到margin?
不著急,接下來還有更神奇的事情
修改2

image

0.1px的border不應(yīng)該四舍五入變?yōu)?了嗎,而且確實是這樣的啊,output中已經(jīng)看不到border了,但是為啥前兩個div之間的距離還是40px?。慷何覇??

2. display影響list的小圓點

同樣我們先看一下起始的代碼:

list

這里是一個只有默認(rèn)樣式的List,注意每個li之前的小圓點,大家都知道這是無序列表的默認(rèn)樣式,接下來我們要做一點微小的工作
display: block

image

What ?!說好的小圓點呢?設(shè)置了display: block小圓點就沒了?你以為這就結(jié)束了?naive!
display: inline

display: inline-block

display: flex

看到了嗎?我們對 li 設(shè)置的所有 display 全都會導(dǎo)致小圓點消失,除了上圖展示出來的 display: block 、display: inline 、 display: inline-block 、 display: flex ,display: table一樣會出現(xiàn)這種情況。

3. position: absolute影響display: inline

老規(guī)矩,我們先上初始代碼

起始代碼

這里是一個塊級父元素,其內(nèi)是一個設(shè)置了display: inline的子元素,此時子元素的display是inline這一點不用懷疑,但是我們對子元素做一點小小的改動,對它設(shè)置一個position: absolute,事情就不是這么簡單了

position: absolute

此時我們看到子元素的樣式就是我們所想要的,但是我們打開控制臺,找到Computed


Console

在Computed中查找display屬性


Computed

image

說好的 inline 呢?為什么子元素變成 block 了?

4. transform影響position: fixed

此時的我已經(jīng)不想再嗶嗶了......我們直接看

position: fixed

emmmmmm......看起來是沒錯,position: fixed相對于視窗定位,此時的子元素處在iframe的左下角完全沒問題,然而......
transform: scale(1)

(╯°Д°)╯︵┻━┻ 說好的 fixed 相對于視窗定位呢?我一定是學(xué)了假的CSS
image

總結(jié)

本文中所舉出的例子在CSS規(guī)范中都能找到解釋,但是,那么長的規(guī)范讓我全都看完,說實話我做不到,本人在這里只是將這些能體現(xiàn)CSS “不正交”的例子講出來,提醒各位看客在操作中要注意這些地方,也給自己留個筆記。另外也要感謝@方應(yīng)杭的文章,各位如果覺得本文還不錯,記得點個贊(`?ω?′)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容