所在的位置: js >> js优势 >> 快来使用CSS的is减少你的

快来使用CSS的is减少你的

设计求职招聘QQ群 http://www.suqitech.com/news/show-209062.html
deis()么?

is()是一个CSS伪类函数,该函数将选择器列表作为参数,并选择该列表中任意一个选择器可以选择的元素。举个例子就比较清晰的理解:

使用前:

ulli,olli{}

使用后:

:is(ul,ol)li{}优化我们的代码

假如我们系统比较复杂,is()可以帮助我们简化代码,比如如下代码:

/*3-deep(ormore)unorderedlistsuseasquare*/ololul,olulul,olmenuul,oldirul,ololmenu,olulmenu,olmenumenu,oldirmenu,ololdir,oluldir,olmenudir,oldirdir,ulolul,ululul,ulmenuul,uldirul,ulolmenu,ululmenu,ulmenumenu,uldirmenu,uloldir,ululdir,ulmenudir,uldirdir,menuolul,menuulul,menumenuul,menudirul,menuolmenu,menuulmenu,menumenumenu,menudirmenu,menuoldir,menuuldir,menumenudir,menudirdir,dirolul,dirulul,dirmenuul,dirdirul,dirolmenu,dirulmenu,dirmenumenu,dirdirmenu,diroldir,diruldir,dirmenudir,dirdirdir{list-style-type:square;}

简化成:

/*3-deep(ormore)unorderedlistsuseasquare*/:is(ol,ul,menu,dir):is(ol,ul,menu,dir)ul,:is(ol,ul,menu,dir):is(ol,ul,menu,dir)menu,:is(ol,ul,menu,dir):is(ol,ul,menu,dir)dir{list-style-type:square;}避免CSS错误

假如我们的CSS中有错误,将导致整个选择器不生效。比如下面的.content写成:content。demo地址[1]

divclass="container-1"pclass="title"IamGopal/pdivclass="content"我是锅巴/div/divdivclass="container-2"pclass="title"IamGopal/pdivclass="content"我是锅巴/div/div

/*写错,将导致都不生效*/.container-1.title,.container-1:content{color:#c5c;}

但假如使用:is(),.title选择器依然可以生效,如下:

/*content写错,title还可以生效*/.container-2:is(.title,:content){color:#c5c;}is()VSCSS预处理器

is()和CSS预处理器中的嵌套规则很相像,如下所示:

div,p,ul,ol{span{/*...*/}}/*最终解析成*/divspan,pspan,ulspan,olspan{/*...*/}

以下是:is()的实现

:is(div,p,ul,ol)span{}

但需要注意的是它们的优先级是不一样的。

优先级

通过:is()匹配到元素的优先级,会采用:is()选择器列表参数中优先级最高的计算(即使它不存在)。

理解起来有点拗口,直接看一个demo地址[2]

ulclass="container-3"liclass="title"IamGopal/liliclass="content"我是锅巴/li/ul

/*计算的时候,取.list,而不是ul。其优先级为*/:is(ol,.list,ul)li{color:#c5c;}/*优先级为*/ulli{color:#;}

在使用:is()的时候,它的参数为ol,.list,ul,取最高的.list计算,其优先级为。而ulli的优先级是。所以会是:is()选择器生效,即使后者写在后面,这个跟预选择器是有区别的,使用预选择器会被后面的覆盖。

兼容性

:is()兼容性,IE还是全军覆没,但很多场景可以用起来了。详情[3]

参考:is[4]MDN[5]参考资料[1]

demo


转载请注明:http://www.aierlanlan.com/grrz/573.html