selector

面试官:css选择器有哪些?优先级?哪些属性可以继承?

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

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

选择器所选择的元素,叫做“选择器的对象�?
我们从一个Html结构开�?

1
2
3
4
5
6
7
8
9
10
11
<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的所有元�?

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

  • 伪类选择�?

    1
    2
    :link :选择未被访问的链�?:visited:选取已被访问的链�?:active:选择活动链接
    :hover :鼠标指针浮动在上面的元�?:focus :选择具有焦点�?:first-child:父元素的首个子元素
  • 伪元素选择�?

    1
    2
    3
    :first-letter :用于选取指定选择器的首字�?:first-line :选取指定选择器的首行
    :before : 选择器在被选元素的内容前面插入内容
    :after : 选择器在被选元素的内容后面插入内容
  • 属性选择�?

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

CSS3中新增的选择器有如下�?

  • 层次选择器(p~ul),选择前面有p元素的每个ul元素
  • 伪类选择�?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    :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> 不匹配的所有元�?```

    - 属性选择�?
    ```css
    [attribute*=value]:选择attribute属性值包含value的所有元�?[attribute^=value]:选择attribute属性开头为value的所有元�?[attribute$=value]:选择attribute属性结尾为value的所有元�?```



    ## 二、优先级

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

    > 内联 > ID选择�?> 类选择�?> 标签选择�?
    到具体的计算层⾯,优先级是由 AB、C、D 的值来决定的,其中它们的值计算规则如下:

    - 如果存在内联样式,那�?A = 1, 否则 A = 0

    - B的值等�?ID选择器出现的次数

    - C的值等�?类选择�?�?属性选择�?�?伪类 出现的总次�?
    - D 的值等�?标签选择�?�?伪元�?出现的总次�?
    这里举个例子�?
    ```css
    #nav-global > ul > li > a.nav-link

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

  • 因为没有内联样式 ,所�?A = 0

  • ID选择器总共出现�?次, B = 1

  • 类选择器出现了1次, 属性选择器出现了0次,伪类选择器出�?次,所�?C = (1 + 0 + 0) = 1

  • 标签选择器出现了3次, 伪元素出现了0次,所�?D = (3 + 0) = 3

上面算出的A �?BCD 可以简记作:(0, 1, 1, 3)

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

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

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

三、继承属�?

css中,继承是指的是给父元素设置一些属性,后代元素会自动拥有这些属�?
关于继承属性,可以分成�?

  • 字体系列属�?

    1
    2
    font:组合字体
    font-family:规定元素的字体系�?font-weight:设置字体的粗�?font-size:设置字体的尺�?font-style:定义字体的风�?font-variant:偏大或偏小的字体
  • 文本系列属�?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    text-indent:文本缩�?text-align:文本水平对�?line-height:行�?word-spacing:增加或减少单词间的空白
    letter-spacing:增加或减少字符间的空白
    text-transform:控制文本大小写
    direction:规定文本的书写方向
    color:文本颜�?```

    - 元素可见�?
    ```css
    visibility
  • 表格布局属�?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    caption-side:定位表格标题位�?border-collapse:合并表格边�?border-spacing:设置相邻单元格的边框间的距�?empty-cells:单元格的边框的出现与消�?table-layout:表格的宽度由什么决�?```

    - 列表属�?
    ```css
    list-style-type:文字前面的小点点样�?list-style-position:小点点位置
    list-style:以上的属性可通过这属性集�?```

    - 引用

    ```css
    quotes:设置嵌套引用的引号类型
  • 光标属�?

    1
    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

参考文�?