CSS样式-伪类 含:where(),:is(),:has())

:before

帮当前元素内部增加一个放置在最前面的子元素,一般用于在列表前面增加装饰条或圆点之类。


<ul>
    <li>内容1</li>
    <li>内容2</li>
</ul>
<style>
    li:before {
      
      
        content: "";
        display: inline-block;
        width: 8px;
        height: 8px;
        border-radius: 50%;
    }
</style>

:after

类似before,帮当前元素内部增加一个放置在最前面的子元素,一般用于清除浮动样式导致的错位。


<ul>
    <li>内容1</li>
    <li>内容2</li>
</ul>
<span>后续内容不会重叠</span>
<style>
    li {
      
      
        float: left;
        width: 50%;
    }

    ul:after {
      
      
        content: "";
        display: block;
        clear: both;
    }
</style>

:hover

若鼠标悬停在当前元素上则样式生效,一般用于按钮,链接,自动下拉菜单或者其他扩展显示内容的用途。
要注意该效果在手机上体现的效果变成了只要点击过就会保持生效,直到你点击其他元素。


<button>鼠标悬停在按钮上将改变样式</button>
<style>
    button {
      
      
        background: black;
    }

    button:hover {
      
      
        background: red;
    }
</style>

:focus

若当前元素被聚焦,则样式生效,例如点击了按钮或者输入框,则当前元素被视为聚焦状态,直到点击其他元素或者网页外的内容。

一般用于点击搜索栏后,将输入框扩大变显眼、显示历史热词等。

<input type="text"/>
<style>
    input[type=text]:focus {
      
      
        border: 2px solid black;
    }
</style>

:active

若当前元素被点击则样式在点击期间生效,用于例如按钮被点击后临时的变色或发光等,效果类似hover的点击版:


<button>点击按钮时将改变样式</button>
<style>
    button {
      
      
        background: black;
    }

    button:hover {
      
      
        background: yellow;
    }
</style>

:visited

只对a标签有作用,若a标签上的href属性定义的网址已经被客户端访问过、有历史记录或缓存时,样式生效。

现在用途一般是将效果设置为与通常样式一致即可,例如:

a, a:visited {
    
    
    color: red;
}

:not()

不存在括号里的条件时,样式生效,例如:


<div class="container">
    <p class="content"></p>
</div>
<style>
    .container :not(.title) {
      
      
        border-top: 1px solid #000
    }
</style>

:is()

与not相反,当前元素满足括号里的选择条件时,样式生效:

.container:is(.loading, .waiting, .error, .tip) {
    
    
    background: yellow;
}

要注意用逗号隔开是或的意思,只要满足一个选择器要求即可。
注意此伪类优先级比一般要高,例如

.container.loading,
.container.waiting,
.container.error,
.container.tip {
    
    
    background: red;
}

这种写法的样式即使放在:is()之后也无法覆盖掉原有的样式。

:where()

当前元素满足括号里的选择条件时,样式生效,一般用于作为父元素条件来定义子元素样式,例如判断当元素是否存在括号里任意一个父元素:


<div class="container">
    <h1 class="title">这是大标题</h1>
    <ul class="wrapper">
        <li class="title">这是小标题</li>
        <li class="item">这是内容</li>
    </ul>
</div>
<div class="contain">
    <h1 class="title">这是大标题</h1>
</div>
<style>
    :where(.container, .contain, .wrapper) .title {
      
      
        color: red;
    }
</style>

:has()

当前元素的子元素满足括号里的选择条件时,样式生效,一般用于子元素可能不存在的情况,例如判断元素是否存在标题子元素:


<div class="container">
    <h1 class="title">拥有此样式名将使样式生效</h1>
</div>
<style>
    .container:has(.title) {
      
      
        background: grey
    }
</style>

猜你喜欢

转载自blog.csdn.net/u013102711/article/details/128752161
今日推荐