整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

云米泉先小白龙净水600G:在家喝上纯净好水

云米泉先小白龙净水600G:在家喝上纯净好水

话说水是生命的源泉,喝水是生活中再平常不过的事情了,不过近几年因为水质问题患上各类疾病的新闻频频爆出,也让人们逐渐意识到喝水也要留个心眼。尤其是在一些新建的小区净水系统还不太完善,或者是像我们这里的小区根本没有净水一说,最直接的解决办法就是在自己家里安装净水装置。

最近几年关注智能家居比较多,也让我了解到云米这个品牌,云米的产品在传统家电的功能之上加入了智能化的玩法,之前体验的云米冰箱就是一个典型的例子。最近再次有幸通过金测评拿到一款云米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差别不大,这里就不多赘述了。


丨耗材更换

与空气净化器的滤芯一样,净水器的滤芯同样也是耗材,在寿命耗尽时需要购买更换新的滤芯以保证设备正常工作。云米小白龙净水器安装有两个滤芯,其中五合一滤芯大约1年1换,RO滤芯大约3年1换,具体的损耗还是根据实际的使用情况而定的。

在前面的外观环节也有提到过,云米小白龙净水器的滤芯是横向安装到机身内的,这也为后续更换滤芯提供了很大的便利。更换的时候需要关闭三通阀并断电,向左旋转将原有滤芯取下,安装好新的滤芯后向右旋转锁定。通电开机后选中新滤芯指示灯,长按复位键3秒,听到提示音后指示灯熄灭即可。

安装新滤芯以后要和首次使用一样,对滤芯进行冲洗,五合一滤芯冲洗15分钟即可,RO反渗透滤芯需要多次使用机器排水,或每隔两个小时打开龙头出水20分钟,循环12次以上。


丨体验总结


净水器之所以被称作“新家电”,也正是因为现代人们逐渐意识到健康问题之后才逐渐衍生出来的产物,越是新建的小区水质越差劲,越是发达的城市水质越差劲,这背后反映出来的已经不仅仅是健康问题,而是一种社会现象,是人们在追求经济的同时忽略了对于自然生态的保护。

作为普通居民,我们除了响应号召保护水源之外,在家里安装净水器成了最佳的解决办法,因此云米的这台净水器可以称得上是符合时代需求的产物。

纯白色简约时尚的外观造型设计精致大方,小巧的体积也为小橱柜用户提供了极佳的安装条件;横置滤芯的设计方式拆卸更换方便,避免机身后方的线材和软管松动;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 匹配到的元素示例如下:

  • 1n+0,或 n,匹配每一个子元素。
  • 2n+0,或 2n,匹配位置为 2、4、6、8… 的子元素,该表达式与关键字 even 等价。
  • 2n+1 匹配位置为 1、3、5、7… 的子元素、该表达式与关键字 odd 等价。
  • 3n+4 匹配位置为 4、7、10、13… 的子元素。

如下例,有以下 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?

HSL 代表色相、饱和度和亮度。这类似于 RGB 如何通过将其红色、绿色和蓝色值组合在一起来表示颜色,但使用 HSL,这些值更直观。

色调

颜色的色调由围绕一个圆圈的度数表示。试想一个色轮,0 度代表红色,180 度代表青色,360 度代表同样的红色。

饱和

饱和度由 0 到 100 之间的百分比表示,并确定颜色的灰色程度。如果颜色是 100% 饱和度,则根本没有灰色,而饱和度为 0% 的颜色将是没有颜色的灰色阴影。


亮度

亮度也用百分比表示,并确定颜色的白色或黑色。如果颜色是 50% 的亮度,那么这意味着没有额外的白色或黑色添加到颜色中。随着百分比增加到 50% 以上,它会在颜色中添加更多的白色,直到在 100% 亮度下达到完全白色。随着百分比降低到 50% 以下,它会为颜色添加更多黑色,直到在 0% 亮度下达到完全黑色


如何使用 HSL?

现在我们了解了 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 中最好的颜色格式。