玩命加载中 . . .

CSS 选择器


css 选择器

  1. 关于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.one) -->选择类名为one的所有div元素
    并集选择器(div,p) -->选择所有div和p元素
  2. 还有一些使用频率相对没那么多的选择器:
  • 伪类选择器
    :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开头的元素
  1. 在CSS3中新增的选择器还有:
  • 通用兄弟选择器(p~ul),选择p元素下的所有ul元素
  • 结构化伪类选择器
    :last-child 同级别中的最后一个标签
    :nth-child(n) 同级别中的第n个元素
    :nth-child(odd) 同级别中的所有奇数
    :nth-child(even) 同级别中的所有偶数
    :only-child 父元素中唯一的标签
    
    :first-of-type 同级别中同类型的第一个元素
    :last-of-type 同级别中同类型的最后一个元素
    :nth-of-type(n) 同级别中同类型的第n个元素
    :nth-last-of-type(n) 同级别中同类型的倒数第n个元素
    :only-of-type  父元素中唯一的同类型的标签
    
    :root 设置HTML文档
    :empty 指定空的元素
    :enabled 选择被禁用元素
    :disabled 选择被禁用元素
    :checked 选择选中的元素
  • 属性选择器
    [attribute|=value]:选择attribute属性开头为value,且value是被-或其他内容隔开的所有元素
    [attribute^=value]:选择attribute属性开头为value的所有元素,无论value会不会被-隔开
    [attribute$=value]:选择attribute属性结尾为value的所有元素
    [attribute~=value]:选择attribute属性值包含value,且value被空格隔开的所有元素
    [attribute*=value]:选择attribute属性值包含value的所有元素

CSS 三大特性

继承性

给父元素设置一些属性,子元素也可以使用,这个我们就称之为继承性。在 CSS 的继承中,不仅仅是儿子可以继承,只要是后代都可以继承。

  1. 可继承的属性
  • 所有元素可以继承的属性:
    • 元素可见性:visibility
    • 光标属性:cursor:箭头可以变成需要的形状
  • 内联元素可以继承的属性:
    • 字体系列属性
      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:文本颜色
    • 表格布局属性
      caption-side:定位表格标题位置
      border-collapse:合并表格边框
      border-spacing:设置相邻单元格的边框间的距离
      empty-cells:单元格的边框的出现与消失
      table-layout:表格的宽度由什么决定
    • 列表属性
      list-style-type:文字前面的小点点样式
      list-style-position:小点点位置
      list-style:以上的属性可通过这属性集合
    • 引用:quotes:设置嵌套引用的引号类型
  1. 不可继承的属性
  • a 标签的字体颜色
  • h 标签字体的大小
  • display:规定元素应该生成的框的类型
  • 文本属性:
    • vertical-align:垂直文本对齐
    • text-decoration:规定添加到文本的装饰
    • text-shadow:文本阴影效果
    • white-space:空白符的处理
    • unicode-bidi:设置文本的方向
  • 盒子模型的属性:width、height、margin、border、padding
  • 背景属性:background、background-color、background-image、background-repeat、background-position、background-attachment
  • 定位属性:float、clear、position、top、right、bottom、left、min-width、min-height、max-width、max-height、overflow、clip、z-index
  • 生成内容属性:content、counter-reset、counter-increment
  • 轮廓样式属性:outline-style、outline-width、outline-color、outline
  • 页面样式属性:size、page-break-before、page-break-after
  • 声音样式属性:pause-before、pause-after、pause、cue-before、cue-after、cue、play-during

层叠性

层叠性就是 CSS 处理冲突的一种能力。

优先级

什么是优先级:当多个选择器选中同一个标签,并且给同一个标签设置相同的属性时,如何层叠就由优先级来确定。

优先级判断的3种方式:

  1. 是否是直接选中(间接选中就是值继承)
  • 如果是间接选中,那么就是谁离目标标签比较近就听谁的
  1. 相同选择器(直接选中)
  • 如果都是直接选中,并且都是同类型的选择器,那么就是谁写在后面就听谁的
  1. 不同选择器(直接选中)
  • 如果都是直接选中,并且不是相同类型的选择器,那么就会按照选择器的优先级来层叠:【!important >】内联 > id选择器 > 类选择器 > 标签选择器【> 通配符 > 继承 > 浏览器默认属性】

如果是多个选择器混合在一起使用,就需要计算权重。
权重的计算规则:

  1. 首先计算选择器中有多少个 id ,id 多的选择器优先级最高
  2. 如果 id 的个数一样,那么再看类名的个数,类名个数多的优先级最高
  3. 如果这两者的个数都一样,同时标签名称个数也一样,那么就不会继续往下计算了,此时谁写在后面就听谁的。也就是说优先级如果一样,那么谁写在后面就听谁的

    注意:只有选择器是直接选中标签的才需要计算权重,否则一定会听直接选中的选择器的

如果再到具体的计算层⾯,优先级是由 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
  • 上面算出的A 、 B、C、D 可以简记作:(0, 1, 1, 3)

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

  • 从左往右依次进行比较 ,较大者优先级更高
  • 如果相等,则继续往右移动一位进行比较
  • 如果4位全部相等,则后面的会覆盖前面的
  • 经过上面的优先级计算规则,我们知道内联样式的优先级最高,如果外部样式需要覆盖内联样式,就需要使用 !important

文章作者: hcyety
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hcyety !
评论
  目录