结构伪类选择器是针对 HTML 层级结构的伪类选择器。
常用的结构化伪类选择器有:
:root选择器、:not选择器、:only-child选择器、:first-child选择器、:last-child选择器、
:nth-child选择器、:nth-child(n)选择器、:nth-last-child(n)选择器、:nth-of-type(n)选择器、
:empty选择器、:target选择器。
这些基本上都很常用,今天着重说下:否定伪类:not()
否定伪类特别有用,在css中, :not选择器 用于匹配非指定元素/选择器的每个元素,语法格式:
:not(selector)
比如:假设我想选择所有 div,除了 id 为 的那个 container。下面代码:
div:not(#container) { color: blue; }
否定伪类:not()的几个特点:
- :not()的优先级是 0,因为它的优先级是由括号里面的参数来定的;
- :not()伪类可以同时判断多个选择器,比如
input:not(:disabled):not(:read-only) {}
,表示匹配不属于禁用状态同时也不处于只读状态的 input 元素; - not()支持多个表达式,比如:
.cs-li:not(li, dd) {}
,还有另外一种写法:.cs-li:not(li):not(dd) {}
。但是这两种写法,要考虑兼容性问题; - :not()也支持选择符,比如:
input:not(.a > .b) { border: red solid; }
;
今天遇到一个问题,想把首页除了logo之外的其他元素变黑白,但是用否定伪类却出现很奇怪的问题,其他有部分元素还是彩色的,代码如下:
.hywzhome div:not(.logo) { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); filter: grayscale(100%); filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); _filter:none; filter: gray; }
然后改为:效果一样
.hywzhome div:not(.header > .logo) { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); filter: grayscale(100%); filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); _filter:none; filter: gray; }
后来换成另一种写法却可以,代码如下:
.hywzhome div:not(.header):not(.logo) { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); filter: grayscale(100%); filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); _filter:none; filter: gray; }
后来试验了一下,多少层级关系就要写多少个:not(),例如:
<div class="header"> <div class="box"> <div class="logo"></div> </div> </div>
就要写为:
.hywzhome div:not(.header):not(.box):not(.logo)
标签:伪类,100%,grayscale,filter,child,选择器,CSS From: https://www.cnblogs.com/joe235/p/17877192.html