CSS面试20真题高频版-CSS选择器?优先级?哪些可继承

11 阅读6分钟

选择器

  • id选择器(写法:id="box"; 使用: #box:选择id为box的元素)
  • 类选择器(写法:className="father";使用: .father: 选择类名为 father的所有元素)
  • 标签选择器(div; 使用: div 选择标签为div的所有元素 )
  • 后代选择器(使用: 选择器1 选择器2 如:#box div 选择id为box元素内部的所有div)
  • 子选择器(使用: 选择器1>选择器2 父元素为选择器1的所有选择器2 )
  • 相邻同胞选择器(写法: 选择器1+选择器2 选择紧接着选择器1的所有选择器2)
  • 群组选择器(写法: 选择器1,选择器2 如: div,p 选择所有div,p)
  • 伪类选择器
  • 伪元素选择器
  • 属性选择器

伪类 选择器

选择DOM元素在特定状态下的样式。这些特定状态并不是由文档结构决定的,而是由用户行为(如点击悬停)或元素的状态(如被访问被禁用)来定义的。

写法

selector:pseudo-class {
  property: value;
}

例如

a:link {
  color: #FF0000;
}

input:focus {
  background-color: yellow;
}

常用的伪类选择器

常用的伪类选择器
:hover鼠标悬停在元素上面的样式
:active元素被激活时 (例:button:active)
:focus元素或者焦点时(例:input:focus)
:link元素未被访问(例:a:link)
:visited元素已被访问
注意 a 标签的 4 个伪类(4种状态)必须按照一定顺序书写,否则将会失效; 书写顺序为:a:link、a:visited、a:hover、a:active;记忆方法:love hate - “爱恨准则”;
:enabled和:disabled元素是否可用
:checked用于单选框或复选框,表示元素是否被选中
:empty指定空的元素
:root设置HTML文档
结构伪类选择器
:first-child选取父元素的第一个子元素
:last-child选取父元素的最后一个子元素
:nth-child(n)选取父元素中第n个子元素 li:nth-child(odd) 选择列表中的奇数位置
:first-of-type表示一组同级元素中其类型的第一个元素
:last-of-type表示一组同级元素中其类型的最后一个元素
:only-of-type表示没有同类型兄弟元素的元素
:only-child表示没有任何兄弟的元素
:nth-child(n)根据元素在一组同级中的位置匹配元素:nth-last-of-type(n)匹配给定类型的元素,基于它们在一组兄弟元素中的位置,从未尾开始计委
否定伪类选择器
:not(selector)选取不符合括号内选择器的所有元素

伪元素选择器

与伪类选择器不同,伪元素选择器是用来选择DOM元素的特定部分,而不是整个元素。它们通常用于处理那些不是由HTML标签直接表示的内容,比如首行文字、首字母或者生成的内容(如内容前面的编号)。

伪元素选择器允许我们对页面上的某些部分进行精确的样式控制,而这些部分在HTML结构中并不存在。

写法

selector::pseudo-element {
  property: value;
}

例如

p::first-line {
  color: #ff0000;
}

h1::before {
  content: '♥';
}

常用的伪元素选择器

常用的伪元素选择器
::first-line第一行
::first-letter表示第一个字母
::before表示元素的开始
::after表示元素的最后

注意:

  • before和after创建一个元素,但是属于行内元素。
  • 新创建的这个元素在文档中是找不到的,所以我们称为伪元素。
  • before在父元素内容的前面创建元素,after在父元素内容的后面插入元素。
  • 伪元素选择器和标签选择器一样,权重为1。

伪类与伪元素选择器的区别

CSS中的伪类选择器和伪元素选择器都是用来选取DOM中特定元素的选择器。具体区别如下:

  • 伪类的操作对象是文档树中已有的元素,而伪元素则创建了一个文档数外的元素。因此,伪类与伪元素的区别在于:有没有创建一个文档树之外的元素;
  • 伪类本质上是为了弥补常规CSS选择器的不足,以便获取到更多信息;
  • 伪元素本质上是创建了一个有内容的虚拟容器;
  • CSS3 中伪类和伪元素的语法不同;
  • 在 CSS3 中,已经明确规定了伪类用一个冒号来表示,而伪元素则用两个冒号来表示;
  • 可以同时使用多个伪类,而只能同时使用一个伪元素。

总的来说,伪类选择器关注的是元素在特定状态下的样式变化,而伪元素选择器则是通过创建新的元素来实现特定的样式效果。两者都是CSS中非常强大的工具,可以帮助开发者实现复杂的页面布局和动态效果。

属性选择器

允许开发者根据元素的属性和属性值来选择元素

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

优先级

!important>内联>ID选择器>类选择器>标签选择器>属性选择器>伪类>元素选择器>通配符>继承

继承

可继承属性
字体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:文本颜色
元素可见性visibility
表格布局属性caption-side:定位表格标题位置border-collapse:合并表格边框border-spacing:设置相邻单元格的边框间的距离empty-cells:单元格的边框的出现与消失table-layout:表格的宽度由什么决定
列表属性list-style-type:文字前面的小点点样式list-style-position:小点点位置list-style:以上的属性可通过这属性集合
引用quotes:设置嵌套引用的引号类型
光标属性cursor:箭头可以变成需要的形状

继承中比较特殊的几点:

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

无继承的属性

  • display
  • 文本属性:vertical-align、text-decoration
  • 盒子模型的属性:宽度、高度、内外边距、边框等
  • 背景属性:背景图片、颜色、位置等
  • 定位属性:浮动、清除浮动、定位position等
  • 生成内容属性:content、counter-reset、counter-increment
  • 轮廓样式属性:outline-style、outline-width、outline-color、outline
  • 页面样式属性:size、page-break-before、page-break-after