Home  >  Article  >  Web Front-end  >  Detailed explanation of new usage of CSS selectors

Detailed explanation of new usage of CSS selectors

小云云
小云云Original
2018-02-05 10:18:421842browse

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; 
}

The above two pieces of code The effect is the same

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;
}

Use nesting After the syntax, the code is as follows

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 using nested style rules, you must be able to reference the element matched by the parent rule; it is the entire nesting point after all. To achieve this purpose, this specification defines a new selector, the nested selector, written as the ASCII symbol &

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; }
}

【@nest】

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;
  }
}

Finally

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:


Implementation method of CSS selector field parsing

Detailed explanation of CSS selector Selector

CSS selector with Solution to dot (.)

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn