.header { color: black; .navigation { font-size: 12px; &.class { text-decoration: none } } }
这导致了&与父选择器并且导致与父选择器的实际选择器的连接:.header .navigation.class而不是正常的附加,这将导致.class作为分支:.header .navigation .class.
现在还有可能的是(see also here):
.header { color: black; .navigation { font-size: 12px; #some-id & .foo { text-decoration: none } } }
这将导致以下内容:#some-id .header .navigation .foo try here.该变电站发生,我已经在我的父选择器上添加了一个选择器(#some-id).
除了我永远不会这样编码的事实,因为这可能会在任何时候弄乱你的样式表,我的问题是:
解决方法
然而,在逻辑论证之前,我确实发现了another short,simple quote(在“嵌套规则”部分),似乎表明它至少不是无意的:“&表示当前的选择器父”.而已.如BoltClock所说,无论是前置的还是附加的,似乎都是无关紧要的.所有这一切都是为了这个“选择者父母”的占位符.事实上,它总是与“嵌套”使用该语言一起提到意味着它被设计为将嵌套的完整选择符字符串指定到其驻留的嵌套点.该字符串如何使用(预先或附加)似乎是编码器.
现在,你提到(和之前提到的)你“永远不会这样编码”,但我发现自己看起来是一个很有价值的用途.考虑以下参数.
插图的HTML设置
假设为了说明起见,身体元素上有三个可能的类(“轻”,“中”,“黑”主题)的动态设置,改变了网站的“外观”.我们有
两列,以及我们要为每个主题的每个列中不同类型的链接(textLink,picLink,textWithIconLink).
<body class="light"> <div class="leftCol"> <a class="textLink"></a> <a class="picLink"></a> <a class="textWithIconLink"></a> </div> <div class="rightCol"> <a class="textLink"></a> <a class="picLink"></a> <a class="textWithIconLink"></a> </div> </body>
> LESS中的代码较少
>最好的组织在LESS的代码
>在CSS中输出较少的代码
最好组织输出的CSS
“最好”可能有点主观.我会让你从下面衡量自己的证据.
选项#1典型嵌套
LESS(约99行代码)
/*Light Color Theme */ .light { .leftCol { .textLink { color: fooL1; &:hover { color: barL1;} } .picLink { background-image: url(/fooL1.jpg); &:hover { background-image: url(/barL1.jpg);} } .textWithIconLink { color: fooL2; background-image: url(/fooL2.jpg); &:hover { color: barL2; background-image: url(/barL2.jpg);} } } .rightCol { .textLink { color: fooL3; &:hover { color: barL3;} } .picLink { background-image: url(/fooL3.jpg); &:hover { background-image: url(/barL3.jpg);} } .textWithIconLink { color: fooL4; background-image: url(/fooL4.jpg); &:hover { color: barL4; background-image: url(/barL4.jpg);} } } } /*Medium Color Theme */ .medium { .leftCol { .textLink { color: fooM1; &:hover { color: barM1;} } .picLink { background-image: url(/fooM1.jpg); &:hover { background-image: url(/barM1.jpg);} } .textWithIconLink { color: fooM2; background-image: url(/fooM2.jpg); &:hover { color: barM2; background-image: url(/barM2.jpg);} } } .rightCol { .textLink { color: fooM3; &:hover { color: barM3;} } .picLink { background-image: url(/fooM3.jpg); &:hover { background-image: url(/barM3.jpg);} } .textWithIconLink { color: fooM4; background-image: url(/fooM4.jpg); &:hover { color: barM4; background-image: url(/barM4.jpg);} } } } /*Dark Color Theme */ .dark { .leftCol { .textLink { color: fooD1; &:hover { color: barD1;} } .picLink { background-image: url(/fooD1.jpg); &:hover { background-image: url(/barD1.jpg);} } .textWithIconLink { color: fooD2; background-image: url(/fooD2.jpg); &:hover { color: barD2; background-image: url(/barD2.jpg);} } } .rightCol { .textLink { color: fooD3; &:hover { color: barD3;} } .picLink { background-image: url(/fooD3.jpg); &:hover { background-image: url(/barD3.jpg);} } .textWithIconLink { color: fooD4; background-image: url(/fooD4.jpg); &:hover { color: barD4; background-image: url(/barD4.jpg);} } } }
/*Light Color Theme */ .light .leftCol .textLink { color:fooL1; } .light .leftCol .textLink:hover { color:barL1; } .light .leftCol .picLink { background-image:url(/fooL1.jpg); } .light .leftCol .picLink:hover { background-image:url(/barL1.jpg); } .light .leftCol .textWithIconLink { color:fooL2; background-image:url(/fooL2.jpg); } .light .leftCol .textWithIconLink:hover { color:barL2; background-image:url(/barL2.jpg); } .light .rightCol .textLink { color:fooL3; } .light .rightCol .textLink:hover { color:barL3; } .light .rightCol .picLink { background-image:url(/fooL3.jpg); } .light .rightCol .picLink:hover { background-image:url(/barL3.jpg); } .light .rightCol .textWithIconLink { color:fooL4; background-image:url(/fooL4.jpg); } .light .rightCol .textWithIconLink:hover { color:barL4; background-image:url(/barL4.jpg); } /*Medium Color Theme */ .medium .leftCol .textLink { color:fooM1; } .medium .leftCol .textLink:hover { color:barM1; } .medium .leftCol .picLink { background-image:url(/fooM1.jpg); } .medium .leftCol .picLink:hover { background-image:url(/barM1.jpg); } .medium .leftCol .textWithIconLink { color:fooM2; background-image:url(/fooM2.jpg); } .medium .leftCol .textWithIconLink:hover { color:barM2; background-image:url(/barM2.jpg); } .medium .rightCol .textLink { color:fooM3; } .medium .rightCol .textLink:hover { color:barM3; } .medium .rightCol .picLink { background-image:url(/fooM3.jpg); } .medium .rightCol .picLink:hover { background-image:url(/barM3.jpg); } .medium .rightCol .textWithIconLink { color:fooM4; background-image:url(/fooM4.jpg); } .medium .rightCol .textWithIconLink:hover { color:barM4; background-image:url(/barM4.jpg); } /*Dark Color Theme */ .dark .leftCol .textLink { color:fooD1; } .dark .leftCol .textLink:hover { color:barD1; } .dark .leftCol .picLink { background-image:url(/fooD1.jpg); } .dark .leftCol .picLink:hover { background-image:url(/barD1.jpg); } .dark .leftCol .textWithIconLink { color:fooD2; background-image:url(/fooD2.jpg); } .dark .leftCol .textWithIconLink:hover { color:barD2; background-image:url(/barD2.jpg); } .dark .rightCol .textLink { color:fooD3; } .dark .rightCol .textLink:hover { color:barD3; } .dark .rightCol .picLink { background-image:url(/fooD3.jpg); } .dark .rightCol .picLink:hover { background-image:url(/barD3.jpg); } .dark .rightCol .textWithIconLink { color:fooD4; background-image:url(/fooD4.jpg); } .dark .rightCol .textWithIconLink:hover { color:barD4; background-image:url(/barD4.jpg); }
选项#2结束目标分组
我已经命名为“终点目标分组”,因为这真的是我看到使用&以其他方式添加父选择器.一个现在是基于实际被定型的最终目标元素的编码.
LESS(约88行代码)
/*Links */ /*Text Links*/ .textLink { .light .leftCol & { color: fooL1; &:hover { color: barL1;} } .light .rightCol & { color: fooL3; &:hover { color: barL3;} } .medium .leftCol & { color: fooM1; &:hover { color: barM1;} } .medium .rightCol & { color: fooM3; &:hover { color: barM3;} } .dark .leftCol & { color: fooD1; &:hover { color: barD1;} } .dark .rightCol & { color: fooD3; &:hover { color: barD3;} } } /*Picture Links */ .picLink { .light .leftCol & { background-image: url(/fooL1.jpg); &:hover { background-image: url(/barL1.jpg);} } .light .rightCol & { background-image: url(/fooL3.jpg); &:hover { background-image: url(/barL3.jpg);} } .medium .leftCol & { background-image: url(/fooM1.jpg); &:hover { background-image: url(/barM1.jpg);} } .medium .rightCol & { background-image: url(/fooM3.jpg); &:hover { background-image: url(/barM3.jpg);} } .dark .leftCol & { background-image: url(/fooD1.jpg); &:hover { background-image: url(/barD1.jpg);} } .dark .rightCol & { background-image: url(/fooD3.jpg); &:hover { background-image: url(/barD3.jpg);} } } /*Text with Icon Links */ .textWithIconLink { .light .leftCol & { color: fooL2; background-image: url(/fooL1.jpg); &:hover { color: barL2; background-image: url(/barL1.jpg);} } .light .rightCol & { color: fooL4; background-image: url(/fooL3.jpg); &:hover { color: barL4; background-image: url(/barL3.jpg);} } .medium .leftCol & { color: fooM2; background-image: url(/fooM1.jpg); &:hover { color: barM2; background-image: url(/barM1.jpg);} } .medium .rightCol & { color: fooM4; background-image: url(/fooM3.jpg); &:hover { color: barM4; background-image: url(/barM3.jpg);} } .dark .leftCol & { color: fooD2; background-image: url(/fooD1.jpg); &:hover { color: barD2; background-image: url(/barD1.jpg);} } .dark .rightCol & { color: fooD4; background-image: url(/fooD3.jpg); &:hover { color: barD4; background-image: url(/barD3.jpg);} } }
CSS(约88行的输出[由于一个额外的注释],由结束目标元素组织;但注意,由于类结构,仍然有一个主题的子组织)
/*Links*/ /*Text Links*/ .light .leftCol .textLink { color:fooL1; } .light .leftCol .textLink:hover { color:barL1; } .light .rightCol .textLink { color:fooL3; } .light .rightCol .textLink:hover { color:barL3; } .medium .leftCol .textLink { color:fooM1; } .medium .leftCol .textLink:hover { color:barM1; } .medium .rightCol .textLink { color:fooM3; } .medium .rightCol .textLink:hover { color:barM3; } .dark .leftCol .textLink { color:fooD1; } .dark .leftCol .textLink:hover { color:barD1; } .dark .rightCol .textLink { color:fooD3; } .dark .rightCol .textLink:hover { color:barD3; } /*Picture Links */ .light .leftCol .picLink { background-image:url(/fooL1.jpg); } .light .leftCol .picLink:hover { background-image:url(/barL1.jpg); } .light .rightCol .picLink { background-image:url(/fooL3.jpg); } .light .rightCol .picLink:hover { background-image:url(/barL3.jpg); } .medium .leftCol .picLink { background-image:url(/fooM1.jpg); } .medium .leftCol .picLink:hover { background-image:url(/barM1.jpg); } .medium .rightCol .picLink { background-image:url(/fooM3.jpg); } .medium .rightCol .picLink:hover { background-image:url(/barM3.jpg); } .dark .leftCol .picLink { background-image:url(/fooD1.jpg); } .dark .leftCol .picLink:hover { background-image:url(/barD1.jpg); } .dark .rightCol .picLink { background-image:url(/fooD3.jpg); } .dark .rightCol .picLink:hover { background-image:url(/barD3.jpg); } /*Text with Icon Links */ .light .leftCol .textWithIconLink { color:fooL2; background-image:url(/fooL1.jpg); } .light .leftCol .textWithIconLink:hover { color:barL2; background-image:url(/barL1.jpg); } .light .rightCol .textWithIconLink { color:fooL4; background-image:url(/fooL3.jpg); } .light .rightCol .textWithIconLink:hover { color:barL4; background-image:url(/barL3.jpg); } .medium .leftCol .textWithIconLink { color:fooM2; background-image:url(/fooM1.jpg); } .medium .leftCol .textWithIconLink:hover { color:barM2; background-image:url(/barM1.jpg); } .medium .rightCol .textWithIconLink { color:fooM4; background-image:url(/fooM3.jpg); } .medium .rightCol .textWithIconLink:hover { color:barM4; background-image:url(/barM3.jpg); } .dark .leftCol .textWithIconLink { color:fooD2; background-image:url(/fooD1.jpg); } .dark .leftCol .textWithIconLink:hover { color:barD2; background-image:url(/barD1.jpg); } .dark .rightCol .textWithIconLink { color:fooD4; background-image:url(/fooD3.jpg); } .dark .rightCol .textWithIconLink:hover { color:barD4; background-image:url(/barD3.jpg); }
结论思想
另外一些考虑:
首先,您的主题颜色(以及可能的其他主题方面)的大部分将使用变量进行设置,即使使用上面的选项#2,也可以通过主题将其分组到LESS代码的顶部,因此具有输出的主题结构CSS本身分散在代码中并不一定坏.
第二,任何一种元素的“标准”代码都定义在任何主题代码之上.我的例子没有显示,但是所有的.textLink元素都有text-decoration:none;组.这将在选项#2下发生一次,而没有任何进一步的选择器代码,并且将出现在以下所有主题变化之上.对于选项#1,我需要设置一个新的,不需要的.textLink选择器(至少另外一行代码)将其应用到所有主题链接,而该类的“基本”代码将再次与某个无关的到主题链接信息的其余代码的位置.
第三,作为开发人员,如果我的picLinks(我的页面上的一个特定类型的元素)有问题,则选项#2可以更容易地检查我遇到问题的元素的代码,因为我的所有代码所有的主题都在一个地方.
显然,想要最终的LESS和CSS的组织方式将是如何看待这个价值的主要因素.我的观点是仅仅表明,使用&以这种方式将父级选择器添加到&参考.