話說水是生命的源泉,喝水是生活中再平常不過的事情了,不過近幾年因為水質問題患上各類疾病的新聞頻頻爆出,也讓人們逐漸意識到喝水也要留個心眼。尤其是在一些新建的小區凈水系統還不太完善,或者是像我們這里的小區根本沒有凈水一說,最直接的解決辦法就是在自己家里安裝凈水裝置。
最近幾年關注智能家居比較多,也讓我了解到云米這個品牌,云米的產品在傳統家電的功能之上加入了智能化的玩法,之前體驗的云米冰箱就是一個典型的例子。最近再次有幸通過金測評拿到一款云米MR662小白龍凈水器,借著這臺產品不僅解決了新房子水質凈化的問題,也朝著我理想中的全屋智能邁進一步。
視頻優酷鏈接:https://v.youku.com/v_show/id_XNTA5OTcyNDQ1Ng==.html
在文章開頭先附上一個完整的視頻體驗報告,與圖文內容互補、相輔相成。
在某種意義上凈水器也算作是大件家電產品了,也可以稱之為新家電。云米小白龍凈水器采用的是傳統的瓦楞紙包裝箱,箱子正反兩側印有產品名稱型號以及線條輪廓圖,右側縱向羅列有五項功能特性。
較窄的兩個側邊一側印有云米企業相關的信息以及云米互聯網家電的圖示,另一側標記有預約安裝入口、產品序列號等內容,靠下方貼有一張不干膠銘牌,詳細地記錄有這臺凈水器的技術參數和制造商信息。
包裝箱隨產品采用立式的設計,從頂部劃開膠帶打開箱子,內有厚實的塑料泡沫填充。最上方是一個附件盒,主機放在下方,機身外側有透明塑料袋包裹。
包裝內容還是非常豐富的,包含云米小白龍凈水器主機、純水龍頭、三條PE管、三通閥、四個卡銷以及使用指南,兩支濾芯在出廠的時候已經安裝到機身上了。
互聯網品牌的產品在顏值方面通常都不輸傳統品牌,在云米小白龍凈水器上也再次印證了我的看法。機身整體是一個規整的長方體,立式的造型有些類似于ITX體積的電腦機箱,邊角處加入了圓弧形線條過度,削弱了傳統家電產品給人留下的“笨重”印象。
外殼通體以ABS材質為主,采用純白色的配色,并輔以細微的磨砂質感,也更進一步拔高了它的顏值,前面板和側邊的印刷的文字為金色,多少顯出一些貴族氣息。與現代家居廚房風格契合自然,即便是明裝也沒有太大的違和感。
根據官方提供的參數,云米小白龍凈水器的三圍尺寸是416*128*324mm,在同類產品中算是中等體積。對于像我這樣戶型比較小、櫥柜也比較局促的條件來說,將其放在櫥柜里也不會占用太多的空間,為櫥柜留出更多的儲物空間。
機身前面是一塊可拆卸的蓋板,蓋板上標標記有云米、泉先以及小白龍系列的相關字樣,靠近底部的位置打著兩個品牌的Logo。不過這塊蓋板與機身的固定并不太牢固,建議將機身穩定安裝好以后再蓋上。
拆掉蓋板就可以看到機身上的兩個濾芯槽,上下兩個濾芯是橫著放到機身中的,安裝好以后也比較便于更換。上面的是5合1濾芯,下面的是RO濾芯。為了便于濾芯更換,出廠的時候就設計了把手,拆裝旋轉的時候有受力點,這一點還是非常人性化的。
在濾芯槽的左側和上方標記有解鎖和鎖定標識,向左旋轉到解鎖標識處就可以取下濾芯,更換好新的濾芯之后需要向右旋轉將其鎖定。
兩個濾芯槽下方是操作面板,上方的三枚指示燈分別是5合1濾芯指示燈、WiFi狀態指示燈和RO濾芯指示燈,下方有“選擇”和“復位”兩個觸摸按鍵。
蓋板內側的不干膠標簽上印有注意事項以及產品配網等相關說明,初次接觸的同學可以細細研究一番,老司機基本上就可以直接略過了。
機身左右兩側比較簡潔,基本上沒有多余的裝飾,右側面板右下角的位置標記有600G字樣,表示這臺凈水器的出水量是600加侖,這部分內容在后面的體驗環節還會詳細講到。
機身頂部靠后方的位置有三個連接的接口,分別是濃縮水、純凈水和自來水,其中自來水的接口要比其他兩個接口粗一些,出廠的時候塞著三個皮塞堵住接口,細節之處十分用心。在三個接口前方還貼有中國質檢協會的合格標簽以及凈水器的序列號編碼。
從機身背部下方的位置延伸出來兩條線材,一條是電源線,采用國標兩腳插頭;另一條是龍頭引線,為專用的接口,用來與龍頭供電和傳輸信號,安裝的時候與龍頭上的接口固定。
機身底部有四個橡膠腳墊作為支撐,避免機身與櫥柜摩擦,同時設備工作時也能起到一定的減震作用。靠后方的位置貼有不干膠銘牌,標記有這臺凈水器詳細的技術參數和制造商信息等。
附贈的龍頭采用的是304不銹鋼材質,雖然銀色與我這個黑色的洗菜盆有些沖突,但整體的工藝細節并不差,精致程度要比洗菜盆原裝的龍頭好很多。大彎頭的結構也空出了很大的空間,即便是用鍋或是熱水壺接水的話位置也足夠。開關部分采用旋轉式的結構,并搭配有延長的把手,操作起來也比較方便。
另外在龍頭與洗菜盆接觸固定的位置還設計了環形指示燈,不僅在出水的時候亮起作為裝飾作用,同時指示燈還能以不同的顏色和閃爍狀態來表示工作狀態。比如藍色常亮表示純水正常使用,橙色常亮表示濾芯壽命到期。
單就外觀和結構設計方面來說,云米小白龍凈水器還是比較扎實的,無論是材料選用還是顏值方面都不遜色于傳統品牌的產品。這一點對于家電產品來說還是至關重要的,畢竟家用電器不像手機一樣頻繁的更新換代,多數家庭都是一次購買,什么時候用壞了才會考慮換,這種品質感很容易給人留下不錯的第一印象。
收到產品時候,第一步應該檢查包裝內容是否齊全,接著就可以掃描說明書上的二維碼預約師傅上門安裝了。
師傅上門前先與我確認了地址和安裝時間,按照約定時間前來,考慮到疫情防控期間小區的出入問題,我也特意到小區門口迎接了師傅。由于北方的冬天非常寒冷,師傅沒有穿工裝也情有可原,到家以后和師傅簡單交涉了安裝的位置就火速開工了。
安裝過程與想象中一樣比較順利,首先將附贈的三通安裝到室內的上水管上,我這里原來的洗菜盆還沒有安裝,也就省下了拆卸的步驟。通過三通將上水管分為兩端,比較粗的一端與洗菜盆的龍頭連接,較細的一端連接附件中的進水管,另一端與凈水機對應的接口連接起來。考慮到水壓的問題,一定要將螺帽擰緊。
接著將純水管與附贈的龍頭連接起來,并將龍頭上的線材端子與機身后方的線材端子連接,然后將龍頭安裝到洗菜盆上。純水管的另一端與機身上的純水接口連接,這個管子主要負責凈化后的水進行輸送。
最后將濃縮水管與機身對應的接口連接,另一端則直接通道廚房預留的排水管道中,我這里直接和洗菜池的排水管道固定并用黑色膠帶纏好。濃縮水管排出的水是廢水,不可再次利用。
安裝完成以后就可以通電開機了,首次使用需要打開三通閥和純水開關對濾芯和管路進行沖洗,龍頭指示燈為藍色閃爍狀態。剛開始出水會有灰黑色或氣泡狀,稍微流一會兒就變清澈了,此時指示燈會停止閃爍。另外RO反滲透濾芯中的反滲透膜含有保濕成分,安裝上以后建議在前期多使用機器,出水不建議立即飲用。
云米小白龍凈水器采用的是無罐的結構,自來水經過濾芯過濾后直接由純水管排出,不經過機身的存儲也避免了二次污染的可能。600加侖的出水量每分鐘大約可以出水1.5L,換算下來如果裝滿一個400ml的水杯,大約需要17秒左右。
實際的測試結果也基本印證了上面的推測,實際出水的速度還是比較可觀的,日常生活中接水燒開了喝或者是做飯都不需要過多的等待。
在凈化能力方面,云米小白龍也有自己的三板斧。經過五合一濾芯以及RO濾芯,自來水通過凈水器會經過六道凈化工序,一級過濾用于濾除泥沙、鐵銹等雜質;二級過濾吸附余氯,去除異味和雜色;三級過濾減少水垢,延長RO濾芯使用壽命;四級過濾去除重金屬、微生物和細菌;五級過濾改善口感;六級過濾進一步改善水質,保證出水更純凈。
單靠講述原理或許并不能說明其凈化能力,行業中一直都用TDS值來表示水質的純凈程度,TDS值的含義是水中的可溶解固體總量,是指水中的鈣鎂離子、懸浮顆粒物、蛋白質、微生物、膠體、細菌和病毒等水中溶解物質的總含量。
使用量杯分別接一杯凈化前的自來水和凈化后的純凈水,用TDS水質檢測筆測試兩杯水的TDS值,實測結果顯示凈化前的自來水TDS值為232ppm,凈化后的純凈水TDS值為24ppm,對比數據再結合TDS值參考圖不難發現,凈化后的水質已經處于水質高的范疇,側邊印證了云米小白龍的凈化能力。
當然僅憑TDS值來判斷水質好壞多少還是有些片面的,為此我也專門在網上購買了一套專業的水質檢測試劑,模擬實驗室測試的方法更直觀、準確的檢測水質。
眾所周知,水中含有大量的鈣鎂離子,也就是俗稱的水垢,這類物質進入胃中會與鹽酸反應,釋放出鈣鎂離子和二氧化碳,長期飲用可能會出現結石的現象。
使用量杯分別接一杯凈化前的自來水和凈化后的純凈水,向水中分別加入適量的鈣鎂測試劑,對照色別卡上的圖示可以觀察到,凈化前的水明顯偏紫色,說明鈣鎂離子含量高;而凈化后的水則為藍色,說明已經過濾掉了鈣鎂離子。
多數自來水都經過加氯消毒,但氯元素除了與水中部分雜質消耗掉一部分之外,還會存在一些殘留。余氯濃度過高會有很強的刺激性,對呼吸系統有傷害;另外也容易與水中的有機物反應,形成氯仿、三氯甲烷等致癌物質。
照上述步驟分別取兩杯水樣,分別加入余氯試劑并攪拌均勻,與色別卡對比不難發現,凈化前后的水都幾乎不含余氯,也說明了我們這里的水質還是可以的。
PH值用來表示水的酸堿程度,0~7為酸性,7~14為堿性,7為中性,根據醫學描述,人類比較適宜飲用中性和弱堿性水,不可飲用酸性水。照例取兩杯水樣,分別加入PH試劑并攪拌均勻,對照色別卡可以觀察到,凈化前的水偏弱堿性,而凈化后的水則為中性。
云米小白龍凈水器的廢水比是2:1,可以理解為自來水一分為三,純水占兩份,廢水占一份,相比之前很多廢水比是1:1的產品要更節約水,避免浪費的同時也減少了一小筆水費開支。
另外值得一提的是,在凈水器工作的時候機身會產生一定的噪音,為此我也做了測試。實測環境噪音為34db,在打開櫥柜門通過純水龍頭接水時的噪音為73.7db,關上櫥柜門接水時的噪音為50.3db。而日常更多的是在關上櫥柜門的情況下使用,并且人也不會刻意蹲在凈水器邊上,因此噪音也不會很大。
選擇云米的產品有很大一部分原因是希望體驗它的全屋智能互聯功能,而作為凈水器其實更多的也是通過手機App遠程控制與管理,與其他家電互聯互通的功能倒不多。云米是比較早一批擁抱米家生態系統的企業,經過幾年的發展,米家也逐漸成為國內一線的智能家居品牌,我的這間新房子也是以米家系統為基礎搭建的。
打開米家App選擇添加設備,在設備列表中瀏覽找到云米小白龍600G凈水器,根據App中的向導提示操作完成配對。整個過程并不復雜,傻瓜式的操作非常容易上手,這里就不多過贅述了。
其他的操作就不太多了,在設置中可以將設備分享到家人的米家賬號上,如此一來多個賬號都可以統一查看和管理凈水器的狀態。除了米家App之外,云米自家的云米商城App也可以添加和管理凈水器,具體的操作界面和功能與米家App差別不大,這里就不多贅述了。
凈水器之所以被稱作“新家電”,也正是因為現代人們逐漸意識到健康問題之后才逐漸衍生出來的產物,越是新建的小區水質越差勁,越是發達的城市水質越差勁,這背后反映出來的已經不僅僅是健康問題,而是一種社會現象,是人們在追求經濟的同時忽略了對于自然生態的保護。
作為普通居民,我們除了響應號召保護水源之外,在家里安裝凈水器成了最佳的解決辦法,因此云米的這臺凈水器可以稱得上是符合時代需求的產物。
純白色簡約時尚的外觀造型設計精致大方,小巧的體積也為小櫥柜用戶提供了極佳的安裝條件;橫置濾芯的設計方式拆卸更換方便,避免機身后方的線材和軟管松動;600加侖出水量出水速度快,1分鐘可以接滿1.5L純凈水;雙濾芯共六道凈化工序,有效去除自來水中的重金屬、顆粒物、雜質等,去除異味、殺滅大腸桿菌,改善口感;2:1廢水比更加節水,避免浪費的同時節約開支;支持米家App及云米商城App遠程管理等等。
作為一臺凈水器來說,云米小白龍MR662的表現顯然是合格的,不過作為全屋互聯網家電的一份子,我認為在物聯網和云服務方面還有值得升級的空間。比如兩款手機App都只能對凈水器設備進行簡單的信息查看,并不涉及到深度管理;另外智能家居之間的聯動似乎也沒有明確的體現,比如冰箱和凈水器之間,也希望云米在這方面繼續深度探索。
悉前端的人都會聽過 css 的偽類與偽元素,然而大多數的人都會將這兩者混淆。本文從解析偽類與偽元素的含義出發,區分這兩者的區別,并且列出大部分偽類與偽元素的具體用法,即使你有用過偽類與偽元素,但里面總有一兩個你沒見過的吧。
先說一說為什么 css 要引入偽元素和偽類,以下是 css2.1 Selectors 章節中對偽類與偽元素的描述:
CSS introduces the concepts of pseudo-elements and pseudo-classes to permit formatting based on information that lies outside the document tree.
直譯過來就是:css 引入偽類和偽元素概念是為了格式化文檔樹以外的信息。也就是說,偽類和偽元素是用來修飾不在文檔樹中的部分,比如,一句話中的第一個字母,或者是列表中的第一個元素。下面分別對偽類和偽元素進行解釋:
偽類用于當已有元素處于的某個狀態時,為其添加對應的樣式,這個狀態是根據用戶行為而動態變化的。比如說,當用戶懸停在指定的元素時,我們可以通過:hover 來描述這個元素的狀態。雖然它和普通的 css 類相似,可以為已有的元素添加樣式,但是它只有處于 dom 樹無法描述的狀態下才能為元素添加樣式,所以將其稱為偽類。
偽元素用于創建一些不在文檔樹中的元素,并為其添加樣式。比如說,我們可以通過:before 來在一個元素前增加一些文本,并為這些文本添加樣式。雖然用戶可以看到這些文本,但是這些文本實際上不在文檔樹中。
這里通過兩個例子來說明兩者的區別。
下面是一個簡單的 html 列表片段:
<ul> <li>我是第一個</li> <li>我是第二個</li> </ul>
如果想要給第一項添加樣式,可以在為第一個<li> 添加一個類,并在該類中定義對應樣式:
HTML:
<ul> <li class="first-item">我是第一個</li> <li>我是第二個</li> </ul>
CSS:
li.first-item { color: orange }
如果不用添加類的方法,我們可以通過給設置第一個<li> 的:first-child 偽類來為其添加樣式。這個時候,被修飾的<li> 元素依然處于文檔樹中。
CSS:
li:first-child { color: orange }
下面是另一個簡單的 html 段落片段:
<p>Hello World, and wish you have a good day!</p>
如果想要給該段落的第一個字母添加樣式,可以在第一個字母中包裹一個<span> 元素,并設置該 span 元素的樣式
HTML:
<p><span class="first">H</span>ello World, and wish you have a good day!</p>
CSS:
.first { font-size: 5em; }
如果不創建一個<span> 元素,我們可以通過設置<p> 的:first-letter 偽元素來為其添加樣式。這個時候,看起來好像是創建了一個虛擬的<span> 元素并添加了樣式,但實際上文檔樹中并不存在這個<span> 元素。
CSS:
p:first-letter { font-size: 5em; }
從上述例子中可以看出,偽類的操作對象是文檔樹中已有的元素,而偽元素則創建了一個文檔數外的元素。因此,偽類與偽元素的區別在于:有沒有創建一個文檔樹之外的元素。
CSS3 規范中的要求使用雙冒號 (::) 表示偽元素,以此來區分偽元素和偽類,比如::before 和::after 等偽元素使用雙冒號 (::),:hover 和:active 等偽類使用單冒號 (:)。除了一些低于 IE8 版本的瀏覽器外,大部分瀏覽器都支持偽元素的雙冒號 (::) 表示方法。
然而,除了少部分偽元素,如::backdrop 必須使用雙冒號,大部分偽元素都支持單冒號和雙冒號的寫法,比如::after,寫成:after 也可以正確運行。
對于偽元素是使用單冒號還是雙冒號的問題,w3c 標準中的描述如下:
Please note that the new CSS3 way of writing pseudo-elements is to use a double colon, eg a::after { ... }, to set them apart from pseudo-classes. You may see this sometimes in CSS. CSS3 however also still allows for single colon pseudo-elements, for the sake of backwards compatibility, and we would advise that you stick with this syntax for the time being.
大概的意思就是:雖然 CSS3 標準要求偽元素使用雙冒號的寫法,但也依然支持單冒號的寫法。為了向后兼容,我們建議你在目前還是使用單冒號的寫法。
實際上,偽元素使用單冒號還是雙冒號很難說得清誰對誰錯,你可以按照個人的喜好來選擇某一種寫法。
這一章以含義解析和例子的方式列出大部分的偽類和偽元素的具體用法。下面是根據用途分類的偽類總結圖和根據冒號分類的偽元素總結圖:
某些偽類或偽元素仍然處于試驗階段,在使用前建議先在 Can I Use 等網站查一查其瀏覽器兼容性。接下來,我們會一一列舉每種用法的具體運用,大家可以更直觀的理解和記憶,處于試驗階段的偽類或偽元素會在標題中標注。
狀態
由于狀態偽類的用法大家都十分熟悉,這里就不用例子說明了。
1 :link
選擇未訪問的鏈接
2 :visited
選擇已訪問的鏈接
3 :hover
選擇鼠標指針浮動在其上的元素
4 :active
選擇活動的鏈接
5 :focus
選擇獲取焦點的輸入字段
結構化
1 :not
一個否定偽類,用于匹配不符合參數選擇器的元素。
如下例,除了第一個<li> 元素外,其他<li> 元素的文本都會變為橙色。
HTML:
<ul> <li class="first-item">一些文本</li> <li>一些文本</li> <li>一些文本</li> <li>一些文本</li> </ul>
CSS:
li:not(.first-item) { color: orange; }
2 :first-child
匹配元素的第一個子元素。
如下例,第一個<li> 元素的文本會變為橙色。
HTML:
<ul> <li>這里的文本是橙色的</li> <li>一些文本</li> <li>一些文本</li> </ul>
CSS:
li:first-child { color: orange; }
3 : last-child
匹配元素的最后一個子元素。
如下例,最后一個<li> 元素的文本會變為橙色。
HTML:
<ul> <li>一些文本</li> <li>一些文本</li> <li>這里的文本是橙色的</li> </ul>
CSS:
li:last-child { color: orange; }
4 first-of-type
匹配屬于其父元素的首個特定類型的子元素的每個元素。
如下例,第一個<li> 元素和第一個<span> 元素的文本會變為橙色。
HTML:
<ul> <li>這里的文本是橙色的</li> <li>一些文本 <span>這里的文本是橙色的</span></li> <li>一些文本</li> </ul>
CSS:
ul :first-of-type { color: orange; }
5 :last-of-type
匹配元素的最后一個子元素。
如下例,最后一個<li> 元素的文本會變為橙色。
HTML:
<ul> <li>一些文本<span>一些文本</span> <span>這里的文本是橙色的</span></li> <li>一些文本</li> <li>這里的文本是橙色的</li> </ul>
CSS:
ul :last-of-type { color: orange; }
6 :nth-child
:nth-child 根據元素的位置匹配一個或者多個元素,它接受一個 an+b 形式的參數,an+b 匹配到的元素示例如下:
如下例,有以下 HTML 列表:
<ol> <li>Alpha</li> <li>Beta</li> <li>Gamma</li> <li>Delta</li> <li>Epsilon</li> <li>Zeta</li> <li>Eta</li> <li>Theta</li> <li>Iota</li> <li>Kappa</li> </ol>
CSS:
選擇第二個元素,”Beta” 會變成橙色:
ol :nth-child(2) { color: orange; }
選擇位置序號是 2 的倍數的元素,”Beta”, “Delta”, “Zeta”, “kappa” 會變成橙色:
ol :nth-child(2n) { color: orange; }
選擇位置序號為偶數的元素:
ol :nth-child(even) { color: orange; }
選擇從第 6 個開始,位置序號是 2 的倍數的元素,”Zeta”, “Theta”, “Kappa” 會變成橙色:
ol :nth-child(2n+6) { color: orange; }
7 :nth-last-child
:nth-last-child 與:nth-child 相似,不同之處在于它是從最后一個子元素開始計數的。
8 :nth-of-type
:nth-of-type 與 nth-child 相似,不同之處在于它是只匹配特定類型的元素。
如下例,第二個<p> 元素會變為橙色。
HTML:
<article> <h1>我是標題</h1> <p>一些文本</p> <a href=""><img src="images/rwd.png" alt="Mastering RWD"></a> <p>這里的文本是橙色的</p> </article>
CSS:
p:nth-of-type(2) { color: orange; }
9 :nth-last-type
:nth-last-of-type 與 nth-of-type 相似,不同之處在于它是從最后一個子元素開始計數的。
10 :only-child
當元素是其父元素中唯一一個子元素時,:only-child 匹配該元素。
HTML:
<ul> <li>這里的文本是橙色的</li> </ul> <ul> <li>一些文本</li> <li>一些文本</li> </ul>
CSS:
ul :only-child { color: orange; }
11 :only-of-type
當元素是其父元素中唯一一個特定類型的子元素時,:only-child 匹配該元素。
如下例,第一個 ul 元素只有一個 li 類型的元素,該 li 元素的文本會變為橙色。
HTML:
<ul> <li>這里的文本是橙色的</li> <p>這里不是橙色</p> </ul> <ul> <li>一些文本</li> <li>一些文本</li> </ul>
CSS:
li:only-of-type { color: orange; }
12 :target
當 URL 帶有錨名稱,指向文檔內某個具體的元素時,:target 匹配該元素。
如下例,url 中的 target 命中 id 值為 target 的 article 元素,article 元素的背景會變為黃色。
URL:
http://example.com/#target
HTML:
<article id="target"> <h1><code>:target</code> pseudo-class</h1> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit!</p> </article>
CSS:
:target { background: yellow; }
表單相關
1 :checked
:checked 匹配被選中的 input 元素,這個 input 元素包括 radio 和 checkbox。
如下例,當復選框被選中時,與其相鄰的<label> 元素的背景會變成黃色。
HTML:
<input type="checkbox"/> <label>我同意</label>
CSS:
input:checked + label { background: yellow; }
2 :default
:default 匹配默認選中的元素,例如:提交按鈕總是表單的默認按鈕。
如下例,只有提交按鈕的背景變成了黃色。
HTML:
<form action="#"> <button>重置</button> <button type="submit">提交</button> </form>
CSS:
:default { background: yellow; }
3 :disabled
:disabled 匹配禁用的表單元素。
如下例,被禁用 input 輸入框的透明度會變成 50%。
HTML:
<input type="text" disabled/>
CSS:
:disabled { opacity: .5; }
4 :empty
:empty 匹配沒有子元素的元素。如果元素中含有文本節點、HTML 元素或者一個空格,則:empty 不能匹配這個元素。
如下例,:empty 能匹配的元素會變為黃色。
第一個元素中有文本節點,所以其背景不會變成黃色;
第二個元素中有一個空格,有空格則該元素不為空,所以其背景不會變成黃色;
第三個元素中沒有任何內容,所以其背景會變成黃色;
第四個元素中只有一個注釋,此時該元素是空的,所以其背景會變成黃色;
HTML:
<div>這個容器里的背景是橙色的</div> <div> </div> <div></div> <div><!-- This comment is not considered content --></div>
CSS:
div { background: orange; height: 30px; width: 200px; } div:empty { background: yellow; }
5 :enabled
:enabled 匹配沒有設置 disabled 屬性的表單元素。
6 :in-range
:in-range 匹配在指定區域內元素。
如下例,當數字選擇器的數字在 5 到 10 是,數字選擇器的邊框會設為綠色。
HTML:
<input type="number" min="5" max="10">
CSS:
input[type=number] { border: 5px solid orange; } input[type=number]:in-range { border: 5px solid green; }
7 :out-of-range
:out-of-range 與:in-range 相反,它匹配不在指定區域內的元素。
8 :indeterminate
indeterminate 的英文意思是“ 不確定的”。當某組中的單選框或復選框還沒有選取狀態時,:indeterminate 匹配該組中所有的單選框或復選框。
如下例,當下面的一組單選框沒有一個處于被選中時,與 input 相鄰的 label 元素的背景會被設為橙色。
HTML:
<ul> <li> <input type="radio" name="list" id="option1"> <label for="option1">Option 1</label> </li> <li> <input type="radio" name="list" id="option2"> <label for="option2">Option 2</label> </li> <li> <input type="radio" name="list" id="option3"> <label for="option3">Option 3</label> </li> </ul>
CSS:
:indeterminate + label { background: orange; }
9 :valid
:valid 匹配條件驗證正確的表單元素。
如下例,當 email 輸入框內的值符合 email 格式時,輸入框的邊框會被設為綠色。
HTML:
<input type="email"/>
CSS:
input[type=email]:valid { border: 1px solid green; }
10 :invalid
:invalid 與:valid 相反,匹配條件驗證錯誤的表單元素。
11 :optional
:optional 匹配是具有 optional 屬性的表單元素。當表單元素沒有設置為 required 時,即為 optional 屬性。
如下例,第一個 input 的背景不會被設為黃色,第二個 input 的背景會被設為黃色。
HTML:
<input type="text" required /> <input type="text" />
CSS:
:optional { background: yellow; }
12 :required
:required 與:optional 相反匹配設置了 required 屬性的表單元素。
13 :read-only
:read-only 匹配設置了只讀屬性的元素,表單元素可以通過設置“readonly” 屬性來定義元素只讀。
如下例,input 元素的背景會被設為黃色。
HTML:
<input type="text" value="I am read only" readonly>
CSS:
input:read-only { background-color: yellow; }
14 :read-write
:read-write 匹配處于編輯狀態的元素。input,textarea 和設置了 contenteditable 的 HTML 元素獲取焦點時即處于編輯狀態。
如下例,input 輸入框和富文本框獲取焦點時,背景變成黃色。
HTML:
<input type="text" value="獲取焦點時背景變黃"/> <div class="editable" contenteditable> <h1>點擊這里可以編輯</h1> <p>獲取焦點時背景變黃</p> </div>
CSS:
:read-write:focus { background: yellow; }
15 :scope(處于試驗階段)
:scope 匹配處于 style 作用域下的元素。當 style 沒有設置 scope 屬性時,style 內的樣式會對整個 html 起作用。
如下例,第二個 section 中的元素的文本會變為斜體。
HTML:
<article> <section> <h1>很正常的一些文本</h1> <p>很正常的一些文本</p> </section> <section> <style scoped> :scope { font-style: italic; } </style> <h1>這里的文本是斜體的</h1> <p>這里的文本是斜體的</p> </section> </article>
注:目前支持這個偽類的瀏覽器只有火狐。
語言相關
1 :dir(處于實驗階段)
:dir 匹配指定閱讀方向的元素,當 HTML 元素中設置了 dir 屬性時該偽類才能生效。現時支持的閱讀方向有兩種:ltr(從左往右)和 rtl(從右往左)。目前,只有火狐瀏覽器支持:dir 偽類,并在火狐瀏覽器中使用時需要添加前綴 ( -moz-dir() )。
如下例,p 元素中的阿拉伯語(阿拉伯語是從右往左閱讀的)文本會變成橙色。
HTML:
<article dir="rtl"> <p>??????? ???? ?? ???? ?????? ?????? ???? ????? ??????? ????? ??? ???????? ?????? ?????? ??? ????? ?????.</p> </article>
CSS:
article :-moz-dir(rtl) { color: orange; } /* unprefixed */ article :dir(rtl) { color: orange; }
如下例,p 元素中的英語文本會變成藍色
HTML:
<article dir="ltr"> <p>?If you already know some HTML and CSS and understand the principles of responsive web design, then this book is for you.</p> </article>
CSS:
article :-moz-dir(ltr) { color: blue; } /* unprefixed */ article :dir(ltr) { color: blue; }
2 :lang
:lang 匹配設置了特定語言的元素,設置特定語言可以通過為了 HTML 元素設置 lang=”” 屬性,設置 meta 元素的 charset=”” 屬性,或者是在 http 頭部上設置語言屬性。
實際上,lang=”” 屬性不只可以在 html 標簽上設置,也可以在其他的元素上設置。
如下例,分別給不同的語言設置不同的引用樣式:
HTML:
<article lang="en"> <q>Lorem ipsum dolor sit amet.</q> </article> <article lang="fr"> <q>Lorem ipsum dolor sit amet.</q> </article> <article lang="de"> <q>Lorem ipsum dolor sit amet.</q> </article>
CSS:
:lang(en) q { quotes: '“' '”'; } :lang(fr) q { quotes: '?' '?'; } :lang(de) q { quotes: '?' '?'; }
其他
1 :root
:root 匹配文檔的根元素。一般的 html 文件的根元素是 html 元素,而 SVG 或 XML 文件的根元素則可能是其他元素。
如下例,將 html 元素的背景設置為橙色
:root { background: orange; }
2.:fullscreen
:fullscreen 匹配處于全屏模式下的元素。全屏模式不是通過按 F11 來打開的全屏模式,而是通過 Javascript 的 Fullscreen API 來打開的,不同的瀏覽器有不同的 Fullscreen API。目前,:fullscreen 需要添加前綴才能使用。
如下例,當處于全屏模式時,h1 元素的背景會變成橙色
HTML:
<h1 id="element">在全屏模式下,這里的文本的背景會變成橙色.</h1> <button>進入全屏模式!</button>
JAVASCRIPT:
var docelem=document.getElementById('element'); var button=document.querySelector('button'); button.onclick=function() { if (docelem.requestFullscreen) { docelem.requestFullscreen(); }else if (docelem.webkitRequestFullscreen) { docelem.webkitRequestFullscreen(); } else if(docelem.mozRequestFullScreen) { docelem.mozRequestFullScreen(); } else if(docelem.msRequestFullscreen) { docelem.msRequestFullscreen(); } }
CSS:
h1:fullscreen { background: orange; } h1:-webkit-full-screen { background: orange; } h1:-moz-full-screen { background: orange; } h1:-ms-fullscreen { background: orange; }
偽元素
1 ::before/:before
:before 在被選元素前插入內容。需要使用 content 屬性來指定要插入的內容。被插入的內容實際上不在文檔樹中。
HTML:
<h1>World</h1>
CSS:
h1:before { content: "Hello "; }
2 ::after/:after
:after 在被元素后插入內容,其用法和特性與:before 相似。
3 ::first-letter/:first-letter
:first-letter 匹配元素中文本的首字母。被修飾的首字母不在文檔樹中。
CSS:
h1:first-letter { font-size: 5em; }
4 ::first-line/:first-line
:first-line 匹配元素中第一行的文本。這個偽元素只能用在塊元素中,不能用在內聯元素中。
CSS:
p:first-line { background: orange; }
5 ::selection
::selection 匹配用戶被用戶選中或者處于高亮狀態的部分。在火狐瀏覽器使用時需要添加-moz 前綴。該偽元素只支持雙冒號的形式。
CSS:
::-moz-selection { color: orange; background: #333; } ::selection { color: orange; background: #333; }
6 ::placeholder
::placeholder 匹配占位符的文本,只有元素設置了 placeholder 屬性時,該偽元素才能生效。
該偽元素不是 CSS 的標準,它的實現可能在將來會有所改變,所以要決定使用時必須謹慎。
在一些瀏覽器中(IE10 和 Firefox18 及其以下版本)會使用單冒號的形式。
HTML:
<input type="email" placeholder="name@domain.com">
CSS:
input::-moz-placeholder { color:#666; } input::-webkit-input-placeholder { color:#666; } /* IE 10 only */ input:-ms-input-placeholder { color:#666; } /* Firefox 18 and below */ input:-moz-input-placeholder { color:#666; }
7 ::backdrop(處于試驗階段)
::backdrop 用于改變全屏模式下的背景顏色,全屏模式的默認顏色為黑色。該偽元素只支持雙冒號的形式
HTML:
<h1 id="element">This heading will have a solid background color in full-screen mode.</h1> <button onclick="var el=document.getElementById('element'); el.webkitRequestFullscreen();">Trigger full screen!</button>
CSS:
h1:fullscreen::backdrop { background: orange; }
轉載自:http://www.alloyteam.com/2016/05/summary-of-pseudo-classes-and-pseudo-elements/
相信您已經熟悉顏色的 RGB 和 HEX 表示,因為這是大多數文章/教程在編寫 CSS 顏色時使用的,但這些并不是在 CSS 中編寫顏色的最佳方法。HEX 和 RGB 很難理解,使顏色變淺/變深或將顏色從紅色轉換為橙色并不容易。這就是 HSL 的用武之地。HSL 是一種更容易閱讀的格式,它使更改顏色的亮度或色調等操作變得簡單。
HSL 代表色相、飽和度和亮度。這類似于 RGB 如何通過將其紅色、綠色和藍色值組合在一起來表示顏色,但使用 HSL,這些值更直觀。
顏色的色調由圍繞一個圓圈的度數表示。試想一個色輪,0 度代表紅色,180 度代表青色,360 度代表同樣的紅色。
飽和度由 0 到 100 之間的百分比表示,并確定顏色的灰色程度。如果顏色是 100% 飽和度,則根本沒有灰色,而飽和度為 0% 的顏色將是沒有顏色的灰色陰影。
亮度也用百分比表示,并確定顏色的白色或黑色。如果顏色是 50% 的亮度,那么這意味著沒有額外的白色或黑色添加到顏色中。隨著百分比增加到 50% 以上,它會在顏色中添加更多的白色,直到在 100% 亮度下達到完全白色。隨著百分比降低到 50% 以下,它會為顏色添加更多黑色,直到在 0% 亮度下達到完全黑色
現在我們了解了 HSL 是什么,我們可以談談如何使用它。它的工作原理與 RGB 一樣,您可以在 CSS 中調用該hsl函數來定義 HSL 顏色。
.class {
/* Pure red #FF0000 */
background-color: hsl(0, 100%, 50%);
}
傳遞給 hsl 的第一個值是色調,它是 0 到 360 之間的度數,第二個值是飽和度,它是 0% 到 100% 之間的百分比值,最后傳遞的最終值是亮度,它是一個百分比值在 0% 和 100% 之間。您還可以使用hsla來表示部分透明的顏色。這個函數接受第四個參數,它是一個介于 0 和 1 之間的值,其中 1 是完全不透明的,而 0 是完全透明的。
像這樣寫顏色可能看起來有點奇怪,因為你很可能習慣于 HEX 或 RGB,但是一旦你習慣了它,它會讓寫 CSS 變得更加愉快。以下是幾個原因:
正如我在本文開頭提到的,您經常需要在 CSS 中更改顏色的亮度或飽和度,以執行諸如為按鈕引入懸停狀態之類的操作。使用 HEX 可能會很痛苦,因為沒有人知道暗 10% 的版本#FA652F是什么,但是暗 10% 的版本hsl(16, 95%, 58%)很容易計算。您只需將亮度值降低 10% 即可hsl(16, 95%, 48%)。
您甚至可以更進一步,使用calcCSS 中的自定義屬性為您自動執行此操作。
.btn {
--background-hue: 200;
background-color: hsl(
var(--background-hue),
100%,
calc(50% + var(--lightness-offset))
);
}
.btn:hover {
--lightness-offset: -10%;
}
.btn:focus {
--lightness-offset: -20%;
}
.btn-danger {
--background-hue: 0;
}
使用這少量代碼,我們設置了一個基本的 btn 類,它總是使背景在懸停時變暗 10%,在焦點上變暗 20%。我們也這樣做了,以便我們可以更改其他類型按鈕的按鈕色調,我們甚至不需要修改這些新按鈕類型的懸停和焦點狀態,因為它們都是使用自定義屬性和calc.
如果您熟悉任何顏色理論,那么您就會知道理解互補色、原色/次色、相似色等很重要。使用 RGB 或 HEX 很難找出這些不同類型的顏色,但使用 HSL 很容易找到諸如互補色之類的東西。這是因為互補色只是色輪另一側的顏色,在 HSL 的情況下,這意味著它們的色調彼此相差 180 度。
這很重要,因為您可以使用這些知識在 CSS 中創建一個顏色主題,該主題使用數學來計算這些互補色,并允許您一次輕松地更改整個站點的顏色主題。下面是我建立的一個可以做到這一點的網站的例子。
最后,HSL 的最后一個重大勝利是它可以輕松更改顏色的色調。如果你想讓你的紅色更橙色一點,你可以通過讓你的色調更大一點來做到這一點,因為橙色在色輪上的紅色之后。這真的很有用,因為在設計和開發的早期階段,像這樣的小顏色變化非常普遍,并且能夠輕松地制作它們可以節省大量時間。
HSL 是一種在 CSS 中表示顏色的不同方式,它不僅更易于閱讀,而且更易于在 CSS 中修改和使用。在我看來,它是 CSS 中最好的顏色格式。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。