面试官:问个基础的吧,能说说你对css选择器的理解吗?

一、选择器

CSS选择器是CSS规则的第一部分

它是元素和其他部分组合起来告诉浏览器哪个HTML元素应当是被选为应用规则中的CSS属性值的方式

选择器所选择的元素,叫做"选择器的对象"

我们从一个Html结构开始

ini 复制代码
<div id="box">
    <div class="one">
        <p class="one_1">
        </p >
        <p class="one_1">
        </p >
    </div>
    <div class="two"></div>
    <div class="two"></div>
    <div class="two"></div>
</div>

关于css属性选择器常用的有:

  • id选择器(#box),选择id为box的元素
  • 类选择器(.one),选择类名为one的所有元素
  • 标签选择器(div),选择标签为div的所有元素
  • 后代选择器(#box div),选择id为box元素内部所有的div元素
  • 子选择器(.one>one_1),选择父元素为.one的所有.one_1的元素
  • 相邻同胞选择器(.one+.two),选择紧接在.one之后的所有.two元素
  • 群组选择器(div,p),选择div、p的所有元素

还有一些使用频率相对没那么多的选择器:

  • 伪类选择器

:link :选择未被访问的链接

:visited:选取已被访问的链接

:active:选择活动链接

:hover :鼠标指针浮动在上面的元素

:focus :选择具有焦点的

:first-child:父元素的首个子元素

  • 伪元素选择器

:first-letter :用于选取指定选择器的首字母

:first-line :选取指定选择器的首行

:before : 选择器在被选元素的内容前面插入内容

:after : 选择器在被选元素的内容后面插入内容

  • 属性选择器

attribute\] 选择带有attribute属性的元素 \[attribute=value\] 选择所有使用attribute=value的元素 \[attribute\~=value\] 选择attribute属性包含value的元素 \[attribute\|=value\]:选择attribute属性以value开头的元素

CSS3中新增的选择器有如下:

  • 层次选择器(p~ul),选择前面有p元素的每个ul元素
  • 伪类选择器
ruby 复制代码
:first-of-type 表示一组同级元素中其类型的第一个元素
:last-of-type 表示一组同级元素中其类型的最后一个元素
:only-of-type 表示没有同类型兄弟元素的元素
:only-child 表示没有任何兄弟的元素
:nth-child(n) 根据元素在一组同级中的位置匹配元素
:nth-last-of-type(n) 匹配给定类型的元素,基于它们在一组兄弟元素中的位置,从末尾开始计数
:last-child 表示一组兄弟元素中的最后一个元素
:root 设置HTML文档
:empty 指定空的元素
:enabled 选择可用元素
:disabled 选择被禁用元素
:checked 选择选中的元素
:not(selector) 选择与 <selector> 不匹配的所有元素
  • 属性选择器

attribute\*=value\]:选择attribute属性值包含value的所有元素 \[attribute\^=value\]:选择attribute属性开头为value的所有元素 \[attribute$=value\]:选择attribute属性结尾为value的所有元素

二、优先级

相信大家对CSS选择器的优先级都不陌生:

!important > 行内样式 > ID选择器 > 类选择器 > 元素选择器 > 通配符选择器 > 继承 > 浏览器默认属性

到具体的计算层⾯,优先级是由 A 、B、C、D 的值来决定的,其中它们的值计算规则如下:

  • 如果存在内联样式,那么 A = 1, 否则 A = 0
  • B的值等于 ID选择器出现的次数
  • C的值等于 类选择器 和 属性选择器 和 伪类 出现的总次数
  • D 的值等于 标签选择器 和 伪元素 出现的总次数

这里举个例子:

#nav-global > ul > li > a.nav-link

套用上面的算法,依次求出 A B C D 的值:

  • 因为没有内联样式 ,所以 A = 0
  • ID选择器总共出现了1次, B = 1
  • 类选择器出现了1次, 属性选择器出现了0次,伪类选择器出现0次,所以 C = (1 + 0 + 0) = 1
  • 标签选择器出现了3次, 伪元素出现了0次,所以 D = (3 + 0) = 3

上面算出的ABCD 可以简记作:(0, 1, 1, 3)

知道了优先级是如何计算之后,就来看看比较规则:

  • 从左往右依次进行比较 ,较大者优先级更高
  • 如果相等,则继续往右移动一位进行比较
  • 如果4位全部相等,则后面的会覆盖前面的

经过上面的优先级计算规则,我们知道内联样式的优先级最高,如果外部样式需要覆盖内联样式,就需要使用!important

三、继承属性

css中,继承是指的是给父元素设置一些属性,后代元素会自动拥有这些属性

关于继承属性,可以分成:

  • 字体系列属性

font:组合字体

font-family:规定元素的字体系列

font-weight:设置字体的粗细

font-size:设置字体的尺寸

font-style:定义字体的风格

font-variant:偏大或偏小的字体

  • 文本系列属性

text-indent:文本缩进

text-align:文本水平对刘

line-height:行高

word-spacing:增加或减少单词间的空白

letter-spacing:增加或减少字符间的空白

text-transform:控制文本大小写

direction:规定文本的书写方向

color:文本颜色

  • 元素可见性

svisibility

  • 表格布局属性

aption-side:定位表格标题位置

order-collapse:合并表格边框

order-spacing:设置相邻单元格的边框间的距离

mpty-cells:单元格的边框的出现与消失

able-layout:表格的宽度由什么决定

  • 列表属性

ist-style-type:文字前面的小点点样式

ist-style-position:小点点位置

ist-style:以上的属性可通过这属性集合

  • 引用

quotes:设置嵌套引用的引号类型

  • 光标

ursor:箭头可以变成需要的形状

继承中比较特殊的几点:

  • a 标签的字体颜色不能被继承
  • h1-h6标签字体的大下也是不能被继承的

无继承的属性

  • splay
  • 文本属性:vertical-align、text-decoration
  • 盒子模型的属性:宽度、高度、内外边距、边框等
  • 背景属性:背景图片、颜色、位置等
  • 定位属性:浮动、清除浮动、定位position等
  • 生成内容属性:content、counter-reset、counter-increment
  • 轮廓样式属性:outline-style、outline-width、outline-color、outline
  • 页面样式属性:size、page-break-before、page-break-after
相关推荐
哟哟耶耶23 分钟前
React-01React创建第一个项目(npm install -g create-react-app)
前端·javascript·react.js
张拭心26 分钟前
工作九年程序员的三月小结
android·前端
try again!36 分钟前
HTML快速上手
前端·css·html
Dontla37 分钟前
前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标防抖处理、mousemove、debounce()、事件停止触发、超时触发
前端·计算机外设
uhakadotcom40 分钟前
使用 boto3 读取 AWS S3 文件的简单指南
后端·面试·github
喝拿铁写前端1 小时前
字段混乱如何影响系统治理?
前端
知远同学1 小时前
关闭Chrome提示更新失败的弹窗
前端·chrome
AntBlack1 小时前
都说 SpringBoot 启动慢 ,你知道慢在哪里吗?
java·spring boot·面试
i200212092 小时前
【Harmonyos】项目开发总结--摇杆拖动侧重实现(适用游戏摇杆)
游戏·华为·面试·harmonyos·鸿蒙·鸿蒙系统
Heidi__2 小时前
Vue 3 的响应式原理
前端·javascript·vue.js