Now, preprocessors (such as sass) seem to have become the standard for developing CSS, just as jQuery was the standard for developing JS a few years ago. JS's querySelector draws on jQuery's selector ideas, and CSS selectors also draw on common functions such as preprocessor variable definition, selector nesting, and code block reuse. This article will introduce in detail the new usage of CSS selectors.
Variables
Generally, when we develop web, we will have a set of variable definition specifications, taking Sass as an example, as shown below
// 颜色定义规范 $color-background : #222 $color-background-d : rgba(0, 0, 0, 0.3) $color-highlight-background : #333 //字体定义规范 $font-size-small : 12px $font-size-medium : 14px $font-size-large : 18px
The syntax of CSS variables is as follows
【Declaration of variables】
Variables must start with --. For example, --example-variable: 20px means assigning 20px to the --example-varibale variable
. You can place the statement declaring the variable within any element. If you want to set a global variable, you can set it to: root, body or html
:root{--bgColor:#000;}
Variable declarations are just like ordinary style declaration statements, and inline styles can also be used
<body style="--bgColor:#000">
【Use variables】
Use the var() function to use variables, and can be used anywhere. For example: var(--example-variable) will return the value corresponding to --example-variable
<body style="--bgColor:#000;"> <p style="width: 100px;height: 100px;background-color: var(--bgColor)"></p> </body>
The var() function also has an optional parameter for Set the default value. When the variable cannot obtain the value, the default value is used
<p style="width: 100px;height: 100px;background-color: var(--bgColor,pink)"></p>
[Note] The detailed usage of CSS variables moves here
@apply
Before introducing @apply, let’s first introduce the mixing macro @mixin in sass, which refers to a code block that can be reused
For example, common The text overflow hides reuse
@mixin overflow-ellipsis{ overflow:hidden; text-overflow: ellipsis; white-space: nowrap; }; p { @include overflow-ellipsis; }
The application rule set @apply also implements a similar function. Compared with var(), @apply refers to a collection of styles, while var() refers to a single style value
:root{ --overflow-ellipsis:{ overflow:hidden; text-overflow: ellipsis; white-space: nowrap; }; } .title{ width:200px; @apply --overflow-ellipsis; }
Custom selector
Custom selectors are defined through @custom-selector, followed by:-- followed by the name of the custom selector, followed by the selectors that need to be defined, multiple ones separated by commas
@custom-selector :--heading h1, h2, h3, h4, h5, h6;
In this way, :--heading becomes a selector that can be used
##
:--heading{ margin: 0; } h1, h2, h3, h4, h5, h6{ margin: 0; }
Selector nesting
CSS rules contain a lot of repeated content##
table.colortable td { text-align:center; } table.colortable td.c { text-transform:uppercase; } table.colortable td:first-child, table.colortable td:first-child+td { border:1px solid black; } table.colortable th { text-align:center; background:black; color:white; }
table.colortable { & td { text-align:center; &.c { text-transform:uppercase } &:first-child, &:first-child + td { border:1px solid black } } & th { text-align:center; background:black; color:white; } }
When used in a selector of a nested style rule, the nested selector is represented by The element matched by the parent rule. When used in any other context, it means nothing. (That is, it is valid, but does not match any elements)
[Note]&The two incorrect ways of writing nested selectors are as follows
.foo { color: red; .bar & { color:blue; } } .foo { color: red; &.bar, .baz { color: blue; } }
In order to solve the fragility of the above nested selector &, you can use the @nest selector. @nest can be applied to a wider range, as long as it works together with the nested selector & That’s it
.foo { color: red; @nest & > .bar { color: blue; } } //等价于 .foo { color: red; } .foo > .bar { color: blue; } .foo { color: red; @nest .parent & { color: blue; } } //等价于 .foo { color: red; } .parent .foo { color: blue; } .foo { color: red; @nest :not(&) { color: blue; } } //等价于 .foo { color: red; } :not(.foo) { color: blue; } [注意]@nest选择符的两种错误写法如下所示 .foo { color: red; @nest .bar { color: blue; } } .foo { color: red; @nest & .bar, .baz { color: blue; } }
Unfortunately, except for the CSS variable variable that can be used under the new version of chrome, other CSS None of the new uses of selectors are currently supported by browsers. However, the cssnext plug-in in the CSS post-processor postcss can solve all problems
Just like the cssnext official website says, start using tomorrow’s CSS syntax today
Related recommendations:
The above is the detailed content of Detailed explanation of new usage of CSS selectors. For more information, please follow other related articles on the PHP Chinese website!