CSS查缺补漏之《选择器的复杂用法》

news2024/11/28 17:46:31

最近在复盘CSS基础知识,发现很多CSS选择器里面还是大有学问,需要详细总结一番,以备差缺补漏~

作为CSS基础的一大类别,选择器又分为多种类别,本篇内容默认读者已了解并掌握基础选择器【通配符选择器】、【元素选择器】、【类选择器】、【ID选择器】知识,若还未涉及此类知识点,请先移步以往文章查看哟(๑•̀ㅂ•́)و✧CSS知识点总结_迷糊的小小淘的博客-CSDN博客目录一 引入CSS样式表方式复合(组合)选择器复合选择器总结标签显示模式(display)补充:sublime快捷操作emmet语法补充: 有时候设置了文本居中后,界面效果依然没有显示居中,是什么原因呢?CSS背景CSS三大特性盒子模型(Box Model)一 引入CSS样式表方式行内式(内联样式)是指在标签中,通过style属性来设置元素的样式,使用方法如下所示:<标签名 style="属性1:属性值1;属性2:属性值2;属性3:属性值3;".https://blog.csdn.net/ks795820/article/details/120676993

交集选择器

在开发中如果想实现同时满足选择器1与选择器2或更多条件的元素才具有某种css属性,则交集选择器此时就会派上用场~

交集选择器使用.将不同选择器组合起来,语法如下:

选择器1.选择器2.选择器3.选择器4......选择器n  { }

如下列代码:

div.fri {
  color: yellow
}
<div class="fri">今天是星期五</div>
<div class="sat">明天是星期六</div>
<div class="sun">后天是星期日</div>

用的最多的交集选择器是:元素选择器配合类名选择器,如上所示

并集选择器

多个选择器同时具有相同的css属性,则并集选择器可派上用场~

并集选择器使用,组合起来,语法如下:

选择器1,

选择器2,

选择器3,

.....,

选择器n { }

.fri, 
.sat, 
.sun {
  font-size: 24px;
  color: skyblue;
}
div.fri {
  color: yellow;
}

 使用并集选择器可以集体声明,减少代码冗余;

后代选择器

若需准确选中指定元素中符合要求的后代元素,则可以使用后代选择器;

后代选择器使用空格连接起来,语法如下:

选择器1 选择器2 选择器3 .... 选择器n { }

.fri, .sat, .sun {
  font-size: 24px;
  color: skyblue;
}
div.fri {
  color: yellow;
}
div.sun span {
  background-color: darkblue;
}
<div class="fri">今天是星期五</div>
<div class="sat">明天是星期六</div>
<div class="sun">
  后天是星期日
  <span class="sad">又要去上班了</span>
  <div>
    <span>那又怎么样?</span>
      <span>继续狂欢</span>
    </div>
</div>

子代选择器

若要选择某元素下符合要求的子元素(亲儿子元素,可以有好多,不限于亲大儿子),则可以使用子代选择器;

子代选择器使用>连接,语法如下:

选择器1>选择器2>选择器3>.....>选择器n { }

.fri, .sat, .sun {
  font-size: 24px;
  color: skyblue;
}
div.fri {
  color: yellow;
}
div.sun>span {
  background-color: darkblue;
}

兄弟选择器

(1) 若要设置指定元素的相邻兄弟元素的css样式,则可使用相邻兄弟选择器(紧挨着指定元素的元素),

相邻兄弟选择器使用+组合,语法如下:

选择器1+选择器2 { }

<body>
    <div class="fri">今天是星期五</div>
    <div class="sat">明天是星期六</div>
    <div class="sun">
        后天是星期日
        <span class="sad">又要去上班了</span>
        <div>抓紧时间</div>
        <div>嗨起来~</div>
    </div>
</body>
.fri,
.sat,
.sun {
   font-size: 24px;
   color: skyblue;
}
span.sad+div {
   color: yellow;
}

(2) 若需要选中某元素的所有兄弟元素,则需要使用通用兄弟选择器,

通用兄弟选择器使用连接,语法如下:

选择器1~选择器2 { }

.fri,
.sat,
.sun {
  font-size: 24px;
  color: skyblue;
}
span.sad~div {
  color: yellow;
}

属性选择器

若需要选中属性值具备一定要求的某元素中,则需要使用属性选择器,

属性选择器有多种写法,通过[ ]标识;

[属性名] 选中具有某个属性名的元素;

[属性名 = ‘值’] 选中具有某个属性名,且属性值为指定值的元素;

[属性名^='值'] 选中具有某个属性名,且属性值以指定值开头的元素;

[属性名$='值'] 选中具有某个属性名,且属性值以指定值结尾的元素;

[属性名*=‘值’] 选中具有某个属性名,且属性值包含指定值的元素;

<div title="one">十年生死两茫茫,不思量注自难忘。</div>
<div title="two">千里孤坟注无处话凄凉。</div>
<div title="three">纵使相逢应不识,尘满面,鬓如霜。</div>
<div title="four">夜来幽梦忽还乡,小轩窗,正梳妆。</div>
<div title="five">相顾无言,惟有泪千行。</div>
<div title="six">料得年年肠断处,明月夜,短松冈。</div>
        [title] {
            /* 选中所有带title属性的元素----所有行 */
            color: #e96421ee;
            font-size: 24px;
            padding: 12px 0px;
            text-align: center;
            width: 40%;
        }
        [title='one'] {
            /* 选中具备title属性且title属性为one的元素----第一行 */
            font-weight: bold;
        }
        [title^='t'] {
            /* 选中具备title属性且title属性以t开头的元素----第二行与第三行 */
            text-decoration: wavy underline rgba(70, 39, 39, 0.688);
        }
        [title$='e'] {
            /* 选中具备title属性且title属性以e结尾的元素----第一行与第三行/第五行 */
            text-shadow: 1px 5px 20px rgba(255, 174, 0, 0.818);
        }
        [title*='i'] {
            /* 选中具备title属性且title属性以e结尾的元素----第五行与第六行 */
            background-color: rgba(195, 245, 179, 0.507);
        }

伪类选择器 

若需要选中某些特殊状态的元素,则会用到伪类选择器,

伪类选择器像类选择器,优先级与类相同,是元素的一种特殊状态,使用:连接

伪类选择器又分为很多种,常用的有动态伪类选择器/结构伪类选择器/UI伪类选择器等

动态伪类选择器

有link/visited/hover/active以及focus;

link: 表示元素(一般是a)未被访问时的状态;

visited: 表示元素(一般是a)访问过的状态;

hover: 表示鼠标悬停在元素上的状态;

active: 表示元素激活时的状态(即按下鼠标不松开); 

focus: 获得鼠标焦点(对于表单类元素来说)

对于a标签来说,要注意该四个伪类选择器的书写顺序,一般记为lvha

<a href="#">点这里</a>
<input type="text" autofocus>
        a {
            text-decoration: none;
            font-size: 24px;
        }
        a:link {
            color: deepskyblue;
        }
        a:visited {
            color: red;
        }
        a:hover {
            color: yellow;
        }
        a:active {
            color: pink;
        }
        input:focus {
            background-color: yellow;
        }

结构伪类选择器

结构伪类选择器主要包含以下:

:first-child  选择所有兄弟元素中的第一个;

:last-child  选择所有兄弟元素中的最后一个;

:nth-child(n)  选择所有兄弟元素中的第n个;

:nth-last-child(n)  选择所有兄弟元素中的倒数第n个;

:nth-last-of-type(n)  选择所有同类型兄弟元素中的倒数第n个;

关于n的值:

0或不写:什么都没有选中;

n: 选中所有子元素;

1-正无穷的整数: 选中对应序号的子元素;

2n或even:选中序号为偶数的子元素;

2n+1或odd:选中序号为奇数的子元素;

括号中的格式需满足an+b格式,如-n+3,不能写成3-n(不生效)

     <div class="content">
        <h1>江城子</h1>
        <h2>苏轼</h2>
        <p>十年生死两茫茫,不思量,自难忘。</p>
        <p>千里孤坟,无处话凄凉。</p>
        <p>纵使相逢应不识,尘满面,鬓如霜。</p>
        <p>夜来幽梦忽还乡,小轩窗,正梳妆。</p>
        <p>相顾无言,惟有泪千行。</p>
        <p>料得年年肠断处,明月夜,短松冈。</p>
        <div class="trans">
            <h2>译文</h2>
            <p>你我夫妻诀别已经整整十年,强忍不去思念。可终究难以忘怀。</p>
            <p>千里之外那座遥远的孤坟啊,没有地方跟她诉说心中的凄凉悲伤。</p>
            <p>纵然夫妻相逢你也认不出我,我已经是灰尘满面,两鬓如霜。</p>
            <p>昨夜我在梦中又回到了家乡,在小屋窗口。正在打扮梳妆。</p>
            <p>你我二人默默相对惨然不语,只有相对无言泪落千行。</p>
            <p>料想那明月照耀着、长着小松树的坟山,就是与妻子思念年年痛欲断肠的地方。</p>
        </div>
    </div>
        p {
            font-size: 24px;
        }
        .content>p:first-child{
            /* 选中content类的儿子元素中为p元素,且p元素是第一个儿子 */
            /* 文中没有符合的 */
            color: rgb(90, 150, 41);
        }
        .content>p:nth-child(n) {
            /* 选中content类儿子元素且为p元素 */
            background-color: rgba(153, 205, 50, 0.237);
        }
        .content>p:nth-child(2n) {
            /* 选中content类中儿子元素为p元素,且p元素是偶数儿子 */
            text-decoration:  wavy underline rgba(0, 0, 255, 0.404);
        }
        .content p:nth-child(2n) {
            /* 选中content类中后代元素为p元素,且p元素是偶数后代元素,此时trans类中的也会被选中(因为都是content类的后代) */
            color: rgba(255, 166, 0, 0.755)
        }
        .trans>p:nth-child(2n+1) {
            /* 选中trans类中儿子元素p,且p元素是奇数儿子 */
            color: rgba(28, 177, 236, 0.714);
        }
        .trans>p:last-child{
            /* 选中trans类中的儿子元素p,且p元素是最后一个儿子元素 */
            text-decoration: underline yellowgreen;
        }

 

:first-of-type  选择所有同类型兄弟元素中的第一个;

:last-of-type  选择所有同类型兄弟元素中的最后一个;

:nth-of-type(n)  选择所有同类型兄弟元素中的第n个;

        p {
            font-size: 24px;
        }
       .content>p:first-of-type {
        /* 选择content类中的p元素的第一个(按照同类型计算) */
        color: rgb(90, 150, 41);
       }
       .content>p:nth-of-type(2n) {
        /* 选择content类中子代元素中的p的偶数元素 (按照同类型计算)*/
        background-color: rgba(153, 205, 50, 0.237);
       }
       .content p:nth-of-type(odd) {
        /* 选择content类中子代元素中的p的奇数元素 (按照同类型计算)*/
        text-decoration:  wavy underline rgba(0, 0, 255, 0.404);
       }
       .trans>p:last-of-type {
        /* 选择content类中子代元素中的p的最后一个元素 (按照同类型计算)*/
        text-shadow: 10px 5px 10px rgba(246, 11, 11, 0.963);
       }

:only-child  选择没有兄弟元素的元素;

.content:only-child {
   /* 选择content类,且content类无兄弟元素 */
   background-color: antiquewhite;
}

 

:only-of-type  选择无同类型兄弟元素的元素; 

.content>h1:only-of-type {
   /* 选择content类的儿子h1,且h1无同类型兄弟元素*/
   background-color: antiquewhite;
}

 

:root 选择根元素,即html元素

:root {
  background-color: rgba(56, 251, 251, 0.237);
}

 :empty 内容为空的元素(空格也算内容)

<div></div>
div.empty {
  background-color: yellow;
}

 因为内容为空,所以设置了样式也看不出来~

否定伪类

当需要排除满足指定条件的元素时,可采用否定伪类选择器:

否定伪类选择器采用:not表示,语法如下:

:not(选择器)

  <div>
    <h2 class="title">题都城南庄</h2>
    <h2 class="author">崔户</h2>
    <p>人面不知何处去</p>
    <p>桃花依旧笑春风</p>
  </div>
  div>p:not(:nth-child(3)) {
    /* 选择div的儿子p元素 排除第三个儿子 */
    color: blueviolet;
  }
  div h2:not(.author) {
    /* 选择div的后代h2元素 排除类为author的h2元素 */
    font-size: 24px;
    color: aqua;
  }

 UI伪类选择器

:checked  表示被选中的复选框或单选按钮

:enable 表示可用的表单元素(没有disabled属性)

:disabled 表示不可用的表单元素(没有disabled属性) 

  性别:
  <input type="radio" name="gender" value="female" checked>男
  <input type="radio" name="gender" value="male">女
  <br />
  爱好:
  <input type="checkbox" name="hobby" value="learning">学习
  <input type="checkbox" name="hobby" value="playing" checked>玩
  <input type="checkbox" name="hobby" value="eating" disabled>吃饭
  <br />
  其它:
  <input type="text" name="other" disabled>
  <input type="text" name="other1" enabled>
    input:checked {
      width: 120px;
      height: 120px;
    }
    input:disabled {
      background-color: yellow;
    }
    input:enabled {
      border: 2px solid red;
    }

 

目标伪类选择器

:target 表示选中锚点指向的元素

  <a href="#one">第一章</a>
  <a href="#two">第二章</a>
  <p id="one">这是第一章的内容</p>
  <p id="two">这是第二章的内容</p>
    p {
      background-color: gray;
      margin-top: 22px;
    }
    :target {
      /* 当鼠标点击锚点#one的a元素时,被链接到的p元素(即id='one')被选中  */
      background-color: yellow;
      font-size: 24px;
    }

  

语言伪类选择器

:lang() 根据指定的语言选择元素(本质是看lang属性的值)

对元素设置了lang属性,若设置非‘zh-CN’值,则在谷歌浏览器中就会自动弹出来翻译选项

<div lang="en">Lorem, ipsum dolor.</div>
div:lang(en) {
  color: yellow;
}

伪元素选择器

当需要选择元素中的一些特殊位置时,会用到伪元素选择器;

伪元素选择器使用::符号,主要有下面几种

::first-letter 选中元素中的第一个文字/字母

::first-line 选中元素中的第一行文字

::selection 选中被鼠标选中的文字

::placeholder 选中输入框的提示文字

::before 在元素最开始的位置,创建一个子元素(需配合content属性指定元素内容)

::after 在元素最后的位置,创建一个子元素(需配合content属性指定元素内容)

<div class="label">Lorem, ipsum dolor sit amet consectetur adipisicing elit. Beatae, eligendi?</div>
<input type="text" placeholder="请输入文字">
<div class="title">here</div>
    .label {
      width: 200px;
      background-color: bisque;
    }
    .label::first-letter {
      /* 选中label类的第一个字母 */
      font-size: 24px;
      color: red
    }
    .label::first-line {
      /* 选中label类的第一行 */
      font-weight: bold;
    }
    .label::selection {
      /* 鼠标选中文字 */
      background-color: deepskyblue;
    }
    input::placeholder {
      /* 选中文本框中的占位符 */
      background-color: rgba(189, 246, 227, 0.8);
    }
    .title::before {
      /* 在tilte类的最开始位置填充content */
      content: '1';
      background-color: blue;
    }
    .title::after {
      /* 在tilte类的结束位置填充content */
      content: '2';
      background-color: rgb(248, 248, 82);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/664404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业采用融合CDN战略之前的相关注意事项

很多企业可能都会犹豫是否要从单CDN模式到转向为多CDN模式&#xff0c;一方面因为这可能看起来很复杂&#xff0c;这不仅涉及到需要建立更多的CDN提供商&#xff0c;而且还有其他较多的操作和配置要做&#xff0c;尤其是在当前单CDN供应商似乎一切正常的情况下。但从另一方面来…

【每日算法】【203. 移除链表元素】

☀️博客主页&#xff1a;CSDN博客主页 &#x1f4a8;本文由 我是小狼君 原创&#xff0c;首发于 CSDN&#x1f4a2; &#x1f525;学习专栏推荐&#xff1a;面试汇总 ❗️游戏框架专栏推荐&#xff1a;游戏实用框架专栏 ⛅️点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;&…

《C++高级编程》读书笔记(八、九:类和对象)

1、参考引用 C高级编程&#xff08;第4版&#xff0c;C17标准&#xff09;马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门&#xff0c;笔记链接如下 21天学通C读书笔记&#xff08;文章链接汇总&#xff09; 1. 编写类 编写类时&#xff0c;需要指定行为或方法 (应用于类的…

8.3 TCP/IP协议与五层体系结构

目录 TCP/IP及五层体系结构 OSI与TCP/IP TCP/IP 的体系结构 沙漏计时器形状的 TCP/IP 协议族 具有五层协议的体系结构 五层协议的体系结构 各层的主要功能 互联网中客户-服务器工作方式 同时为多个客户进程提供服务 TCP/IP及五层体系结构 OSI与TCP/IP TCP/IP 的体系结构 现…

Atcoder Beginner Contest 306

A - Echo AC代码&#xff1a; #include<iostream> #include<algorithm> #include<cstring> using namespace std; int main() {int n;cin>>n;string s;cin>>s;for(int i0;i<n;i){cout<<s[i]<<s[i];}return 0; } B - Base 2 lo…

服务调用OpenFeign

OpenFeign OpenFeign 介绍OpenFeign 的使用OpenFeign 参数传递OpenFeign 超时控制OpenFeign 日志设置OpenFeign 的工作流程 OpenFeign 介绍 Feign 是 SpringCloud组件中一个轻量级RESTful的HTTP服务客户端&#xff0c;Feign集成了Ribbon、RestTemplate 实现了负载均衡的执行Ht…

拉普拉斯方程解决有介质导体球壳问题

一个内径和外径分别为和的导体球壳&#xff0c;带电荷&#xff0c;同心地包围着一个的导体球&#xff0c;使这个导体球接地&#xff0c;求空间各点的电势和这个导体球的感应电荷 我们不难发现&#xff0c;球对称性非常强&#xff0c;电势只和半径有关系 所以我们可以假设电势为…

Python面向对象编程1-面向过程的简单纸牌游戏程序 项目1.6 完整的猜大小纸牌游戏

总项目目标&#xff1a;用面向过程思想设计一个简单的纸牌游戏程序&#xff0c;称为"Higher or Lower"&#xff08;高还是低&#xff09;。游戏中&#xff0c;玩家需要猜测接下来的一张牌是比当前牌高还是低。根据猜测的准确性&#xff0c;玩家可以得到或失去相应的积…

学了些性能知识,实际工作如何开展性能测试?

目录 前言&#xff1a; 确定需求 了解业务 搭建测试环境 脚本执行及监控 收集测试结果 持续学习 前言&#xff1a; 学到了性能测试的知识&#xff0c;接下来如何在实际工作中开展性能测试呢&#xff1f; 确定需求 刚接触性能测试的同学往往不知道性能测试是有需求的。…

C++右值引用问题

1、右值引用与函数重载 class Int {int value; public:Int(int x 0) :value(x) { cout << "create " << this << endl; }~Int() { cout << "destroy " << this << endl; }Int(const Int& it) :value(it.value){…

系统原型设计,轻松搞定后台管理系统

伴随互联网的发展&#xff0c;越来越多的团队和企业开始使用自动化管理系统。近年来&#xff0c;各行各业的B端后台管理系统更是应运而生&#xff0c;并且快速发展迭代更新&#xff0c;直接推动了CMS、OA、 CRM、ERP、POS等系统原型的开发。 相比一般的web页面以及其他的互联网…

真实案例之视频下载性能测试分析报告

一、背景介绍 XXXX是一个以视频教学为主的教学平台&#xff0c;因此对服务器所支持的视频下载量、下载速度等都有相应的要求。其中视频采用HTTP协议&#xff0c;为下载后对视频进行一个播放和学习。为了得出测试服务器网络是否满足XXXX的要求&#xff0c;从而对该服务器做相应…

基于工业智能网关的电力能耗监测管理系统

据国家能源局最新数据显示&#xff0c;1至5月&#xff0c;全国全社会用电量35325亿千瓦时&#xff0c;同比增长5.2%&#xff0c;其中&#xff0c;5月份全国全社会用电量7222亿千瓦时&#xff0c;同比增长7.4%。 6月以来&#xff0c;随着我国经济形势的整体向好和气温的逐步升高…

流场粒子追踪精度数值实验

在计算流线&#xff0c;拉格朗日拟序结构等流场后处理时&#xff0c;我们常常需要计算无质量的粒子在流场中迁移时的轨迹&#xff0c;无质量意味着粒子的速度为流场当地的速度。此时&#xff0c;求解粒子的位移这个问题是一个非常简单的常微分方程问题。 假设流场中存在 i 个粒…

020:vue刷新跳转当前页面

第020个 查看专栏目录: VUE — element UI VUE刷新当前页面在很多场合都会使用到&#xff0c;比如在搜索页搜索内容并展示在搜索页&#xff1f;在当前页删除&#xff0c;添加内容的等&#xff0c;查看更新后的结果等。 方法一 用vue-router 重新路由的时候到当前页面的时候是…

vue移动端瀑布流布局

需求: 瀑布流, 图片大小统一不变, 描述长度根据内容确定, 不超过三行. 分两列,那边矮,下个元素就放那边 如图所示: 1. 给item设置top,和left 由于我的项目做了 amfe-flexible适配所以使用rem 完整 template <template><div class"HomePage"><van-l…

【好书精读】网络是怎样连接的 之 全世界 DNS 服务器的大接力

&#xff08;该图由AI制作 学习AI绘图 联系我&#xff09; 目录 域名的层次结构 寻找相应的 DNS 服务器并获取 IP 地址 通过缓存加快 DNS 服务器的响应 DNS 服务器的基本工作就是接收来自客户端的查询消息&#xff0c;然后根据消息的内容返回响应 客户端的查询消息&#xf…

信息量、熵、联合熵、条件熵、相对熵、交叉熵、JS散度、Wasserstein距离

信息量 I ( x i ) l o g 1 P ( x i ) − l o g P ( x i ) I(x_i)log \frac {1}{P(x_i)}-logP(x_i) I(xi​)logP(xi​)1​−logP(xi​) 信息量&#xff08;self-information&#xff09;&#xff0c;又译为信息本体&#xff0c;由克劳德 香农&#xff08;Claude Shannon&…

使用投票回归器VotingRegressor对糖尿病数据集进行回归预测

目录 1. 作者介绍2. 投票回归器VotingRegressor简介2.1 VotingRegressor介绍2.2 VotingRegressor算法遵循以下关键原则&#xff1a; 3. 使用投票回归器VotingRegressor对糖尿病数据集进行回归预测实验过程3.1 代码流程介绍3.2 完整代码3.3 实验结果 1. 作者介绍 余成伟&#x…

【深度学习】YOLOv8训练过程,YOLOv8实战教程,目标检测任务SOTA,关键点回归

文章目录 可用资源资源安装模型训练&#xff08;检测&#xff09;模型pridict模型导出 可用资源 https://github.com/ultralytics/ultralytics 官方教程&#xff1a;https://docs.ultralytics.com/modes/train/ 资源安装 更建议下载代码后使用 下面指令安装&#xff0c;这样…