CSS 技巧測試:你真的了解 CSS 嗎?
要點回顧
- 設置雙倍行高的最佳方法是使用無單位數字(例如 2),這樣具有不同字體大小的子元素可以繼承正確的行高比率。
- 儘管普遍誤解認為
z-index
本身會導致重疊,但實際上可以通過margin
屬性(特別是設置負邊距)使 HTML 元素重疊。 - 偽元素和偽類是 CSS 中截然不同的特性:偽類在特定條件下應用於實際的 HTML 元素,而偽元素允許對文檔中並非實際 HTML 元素的部分進行樣式設置。
- W3C 試圖在CSS3 選擇器規範中區分偽元素和偽類,方法是為偽元素選擇器使用兩個冒號(
::first-line
),為偽類使用一個冒號(:hover
),但為了向後兼容性,瀏覽器必須同時支持這兩種版本。
你認為自己精通 CSS 嗎?如果過去六個月我在網上提供的免費 CSS 測試結果有任何參考意義的話,許多經驗豐富的開發者對 CSS 的了解程度並沒有他們想像的那麼好。在迄今為止參加測試的 3000 多人中,平均得分僅為 55%。
但是,平均值本身並沒有那麼有趣。我更想知道人們錯在哪裡。為了撰寫這篇文章,我分析了數據,並重點關注了人們得分特別低的三個問題。我將逐一講解每個問題,向您展示大多數人選擇的答案,並解釋正確的答案。
可以肯定地說,如果你在閱讀完這篇文章後自己參加測試,你將擁有不公平的優勢!
問題 1:設置 line-height 的最佳方法
第一個問題對於定期處理文本樣式的人來說應該很容易:
你希望網站上的文本默認情況下為雙倍行高。以下哪個
line-height
值是實現此目的的最佳方法?
200%
2em
2
double
有四個答案可供選擇,你預計有 25% 的人會靠運氣答對,但只有 31% 的人答對了這個問題!花點時間自己選擇一個答案,然後繼續閱讀。
首先,double
是個乾擾項。 line-height
唯一接受的關鍵字值是 normal
。我很高興地說,只有 9% 的人選擇了這個選項。其餘三個答案都很受歡迎。
大多數人選擇的答案是 2em
(39% 的人選擇了這個答案)。事實上,2em
當然會為應用它的元素提供雙倍行高;但 200%
也會,而只有 21% 的人喜歡這個答案!要么 em 比百分比更流行,要么人們並不真正理解它們。
然而,正確的答案是 2
。
很久以前,當我第一次學習 CSS 時,我就被灌輸了這個教訓。始終將 line-height
指定為無單位數字;這樣,指定不同字體大小的子元素將繼承該數字,而不是固定的行高。
假設頁面具有 12pt 的默認字體大小,但它還包含一個字體大小為 24pt 的標題。如果你將正文的line-height
設置為2em
(或200%
),那麼你將在整個文檔中獲得恰好24pt(正文字體大小的兩倍)的行高——即使在該標題中也是如此。因此,標題將是單倍行高,而不是雙倍行高!
相反,將 line-height
設置為 2
會告訴瀏覽器即使字體大小發生變化也要保持字體大小/行高比率。正文的行高將為 24pt,但對於標題的 24pt 字體,行高將自動增加到 48pt。
問題 2:如何使元素重疊
這個問題有點棘手。它需要一些 CSS 佈局經常需要的“技巧”經驗:
以下哪個 CSS 屬性本身就可以導致 HTML 元素重疊?
z-index
margin
overflow
background
選好答案了嗎?好的,讓我們深入探討。
再一次,有一個很容易排除的選項:background
。除了 2% 的測試者之外,所有人都避開了它,因為他們知道它控制背景顏色和圖像。
不幸的是,大多數人直接選擇了 z-index
。高達 46% 的人選擇了這個答案。我猜這是因為沒有人真正理解 z-index
的工作原理。事實上,單獨設置 z-index
屬性沒有任何效果;你還需要設置元素的 position
屬性才能使 z-index
發揮作用。簡而言之,z-index
允許你控制確實重疊的元素的堆疊順序,但它們首先需要重疊。 MDN 有一篇非常好的文章,名為“理解 CSS z-index”,值得一讀,了解更多詳情。
如果你曾經使用過 overflow
,那麼它也應該很容易排除。它控制不適合大小框的內容的行為:是否被截斷,是否流出框的邊緣等。同樣,這取決於框的大小是否通過其他屬性來約束;它本身不會導致重疊。儘管如此,仍有 22% 的人認為它可能會。
這讓我們只剩下 margin
,這是正確的答案。只有 30% 的人答對了。你可能會好奇,一個在元素之間創建距離的屬性怎麼可能導致它們重疊。如果你做過任何實際的 CSS 佈局,答案應該很明顯:負邊距會使元素重疊。
為了演示這一點,創建一個包含兩個 div 元素的頁面。將第二個 div 的 margin-top
設置為負值,例如 -100px
。砰!第二個 div 現在覆蓋了第一個 div 的底部一百像素。
在實踐中,你幾乎不會故意像這樣重疊塊,但負邊距對於將 HTML 元素擠壓到它們通常不會去的地方非常有用。我經常使用它們將左浮動或右浮動的元素推入其父框的填充區域。
對於網頁設計史愛好者來說,2005 年使用負邊距重疊元素使得所謂的 One True Layout(以及後來的 Holy Grail 佈局)等三列頁面佈局成為可能。
問題 3:偽元素與偽類
我承認,最後一個問題有點卑鄙。但只有 23% 的測試者能夠正確回答這個問題(這比運氣還差!),它顯然觸及了一個令人困惑的點:
以下哪個效果最適合使用偽元素來實現?
- 當用戶將鼠標懸停在超鏈接上時,為其添加陰影。
- 當選中復選框時,以不同的顏色顯示複選框的標籤。
- 為表格的奇數行和偶數行賦予不同的背景顏色。
- 在靈活的頁面佈局中,將段落的首行顯示為粗體文本。
這三個選擇都是使用偽類實現的效果;只有一個涉及偽元素。你能區分它們嗎?
偽類是實際 HTML 元素可能處於的特定狀態。可以把它想像成一個虛擬類,瀏覽器在特定條件下會自動將其應用於元素。
偽元素是文檔的一部分,即使它不是實際的 HTML 元素,CSS 也允許你對其進行樣式設置。它就像一個虛擬 HTML 元素——即使它周圍沒有實際的 HTML 標籤,你也可以對其進行樣式設置。
考慮到這種區別,讓我們來看一下這些選項:
當用戶將鼠標懸停在超鏈接上時,為其添加陰影。
超鏈接是一個實際的 HTML 元素。僅在特定情況下(當鼠標懸停在其上時)對其應用樣式意味著我們正在使用偽類。在這種情況下,你將使用的偽類是 :hover
。
22% 的測試者認為這是一個偽元素。
當選中復選框時,以不同的顏色顯示複選框的標籤。
同樣,標籤是一個實際的 HTML 元素,而不是虛擬元素。當選中復選框時,瀏覽器會將 :checked
偽類應用於它。然後,你可以在你的選擇器中使用它來設置複選框的樣式,甚至可以設置它旁邊的標籤的樣式(例如,使用相鄰同胞選擇器
)。
20% 的測試者認為這是一個偽元素。
為表格的奇數行和偶數行賦予不同的背景顏色。
這是真正愚弄人們的一個問題,但再一次,我們談論的是對實際 HTML 元素(在本例中為 tr
元素)應用樣式。 tr
在其父元素的子元素集合中是奇數還是偶數,這只是你可以用偽類匹配的另一種情況。
在這種情況下,偽類是 :nth-child(even)
(或 :nth-child(2n)
)用於偶數元素,:nth-child(odd)
(或 :nth-child(2n 1)
)用於奇數元素。
我猜這僅僅是因為 :nth-child
和偽元素通常聽起來都像是非常晦澀的 CSS 特性,但有 36% 的測試者選擇了這個作為偽元素。
在靈活的頁面佈局中,將段落的首行顯示為粗體文本。
當然,這是正確的答案。到目前為止,希望區別已經很清楚了。在靈活的頁面佈局中,你無法查看頁面的 HTML 代碼並說“那裡的元素只包含段落文本的第一行”。瀏覽器根據段落的寬度進行換行,這是你在靈活的頁面佈局中無法控制的。
:first-line
是允許你對塊中的第一行文本應用樣式的偽元素,無論該第一行換行到第二行的位置在哪裡。
如果你在想“好吧,這聽起來很有道理,但是,沒有人知道偽元素和偽類的區別”,那麼 W3C 同意你的看法。在 CSS3 選擇器規範中,為了區分兩者,它更改了語法,以便偽元素選擇器使用兩個冒號(::first-line
),而偽類仍然使用一個冒號(:hover
)。當然,為了向後兼容性,瀏覽器必須同時支持這兩種版本。
所以是的,就像我說的那樣:卑鄙的問題。但是,嘿,如果你像我一樣是 CSS 極客,我想你會知道你的偽元素和偽類的區別。
你的得分如何?
就是這樣:測試中的三個難題。如果你自信地回答了其中一個問題,那麼你做得不錯。答對了兩個?還不錯。如果你答對了所有三個,我很想听聽你的想法!尤其是在我已經給出這些答案之後,我真的很需要一些更棘手的 CSS 問題的想法。請在評論中發布它們!
如果你喜歡這些問題,也許你願意嘗試一下其餘的測試。請放心,其他問題比這些問題容易得多……大部分!
以上是3件事(幾乎)沒人知道CSS的詳細內容。更多資訊請關注PHP中文網其他相關文章!

與這些頂級開發人員新聞通訊有關最新技術趨勢的了解! 這個精選的清單為每個人提供了一些東西,從AI愛好者到經驗豐富的後端和前端開發人員。 選擇您的收藏夾並節省時間搜索REL

該教程通過使用AWS服務來指導您通過構建無服務器圖像處理管道。 我們將創建一個部署在ECS Fargate群集上的next.js前端,與API網關,Lambda函數,S3桶和DynamoDB進行交互。 Th

該試點程序是CNCF(雲本機計算基礎),安培計算,Equinix金屬和驅動的合作,簡化了CNCF GitHub項目的ARM64 CI/CD。 該計劃解決了安全問題和績效


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

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

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

WebStorm Mac版
好用的JavaScript開發工具