• 字节一面:css选择器有哪些?优先级?哪些属性可以继承?


    前言

    最近博主在字节面试中遇到这样一个面试题,这个问题也是前端面试的高频问题,作为一名前端开发工程师,css是我们的必备技能,熟悉css选择器以及继承是我们写好css的关键,博主在这给大家细细道来。


    🚀 作者简介:程序员小豪,全栈工程师,热爱编程,曾就职于蔚来、腾讯,现就职于某互联网大厂,技术栈:Vue、React、Python、Java
    🎈 本文收录于小豪的前端系列专栏,后续还会更新前端入门以及前端面试的一些相关文章,手把手带你从零学习前端到面试找工作,并如果有想进入前端领域工作的同学,这个前端专栏会对你有所帮助,欢迎关注起来呀
    🌼 本人也会持续的去关注AIGC以及人工智能领域的一些动向并总结到博客中,大家感兴趣的可以关注一下我的人工智能专栏
    🌊 云原生的入门学习系列,大家有兴趣的可以看一看

    # 一、选择器

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

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

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

    我们从一个Html结构开始

    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    关于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:父元素的首个子元素
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 伪元素选择器
    :first-letter :用于选取指定选择器的首字母
    :first-line :选取指定选择器的首行
    :before : 选择器在被选元素的内容前面插入内容
    :after : 选择器在被选元素的内容后面插入内容
    
    • 1
    • 2
    • 3
    • 4
    • 属性选择器
    [attribute] 选择带有attribute属性的元素
    [attribute=value] 选择所有使用attribute=value的元素
    [attribute~=value] 选择attribute属性包含value的元素
    [attribute|=value]:选择attribute属性以value开头的元素
    
    • 1
    • 2
    • 3
    • 4

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

    • 层次选择器(p~ul),选择前面有p元素的每个ul元素
    • 伪类选择器
    :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) 选择与  不匹配的所有元素
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 属性选择器
    [attribute*=value]:选择attribute属性值包含value的所有元素
    [attribute^=value]:选择attribute属性开头为value的所有元素
    [attribute$=value]:选择attribute属性结尾为value的所有元素
    
    • 1
    • 2
    • 3

    二、优先级

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

    内联 > ID选择器 > 类选择器 > 标签选择器

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

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

    这里举个例子:

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

    套用上面的算法,依次求出 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:偏大或偏小的字体
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 文本系列属性
    text-indent:文本缩进
    text-align:文本水平对刘
    line-height:行高
    word-spacing:增加或减少单词间的空白
    letter-spacing:增加或减少字符间的空白
    text-transform:控制文本大小写
    direction:规定文本的书写方向
    color:文本颜色
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 元素可见性
    visibility
    
    • 1
    • 表格布局属性
    caption-side:定位表格标题位置
    border-collapse:合并表格边框
    border-spacing:设置相邻单元格的边框间的距离
    empty-cells:单元格的边框的出现与消失
    table-layout:表格的宽度由什么决定
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 列表属性
    list-style-type:文字前面的小点点样式
    list-style-position:小点点位置
    list-style:以上的属性可通过这属性集合
    
    • 1
    • 2
    • 3
    • 引用
    quotes:设置嵌套引用的引号类型
    
    • 1
    • 光标属性
    cursor:箭头可以变成需要的形状
    
    • 1

    继承中比较特殊的几点:

    • 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

    总结

    各位看官老爷们好,小豪已经建立了技术交流群,如果你很感兴趣,可以私信我加入我的社群。

    📝社群中不定时会有很多活动,例如学习资料分享、大厂面经分享、技术讨论、行业大佬创业杂谈等等。

    📝本人目前是在互联网大厂正式工作,也有过多个大厂的工作经历,加入社群也会有简历修改辅导,模拟面试,手把手项目实战教学,大厂工作内推机会以及大厂面试题解析分享等福利。

    📝社群方向很多,相关领域有Web全栈(前后端)、人工智能、AIGC、自媒体变现、前沿科技文章分享、论文精读等等。

    📝不管你是多新手的小白,都欢迎你加入社群中讨论、聊天、分享,加速助力你成为下一个技术大佬!也随时欢迎您跟我沟通,一起交流,一起成长。变现、进步、技术、资料、项目、你想要的这里都会有

    📝网络的风口只会越来越大,风浪越大,鱼越贵!欢迎您加入社群~一个人可以或许可以走的很快,但一群人将走的更远!

    📝想都是问题,做都是答案!行动起来吧!欢迎评论区or后台与我沟通交流,也欢迎您扫描下方二维码直接加入到我的交流社群!(微信:adcoderhao)

  • 相关阅读:
    NPDP如何续证?操作指南来了!
    Sitecore XP 10.3(latest) Docker一键部署
    BeautifulSoup的使用
    xampp安装包含的组件有(php,perl,apche,mysql)
    【3D建模制作技巧分享】3dmax如何设置视图布局
    d域参数通过闭包逃逸
    Pytorch模型量化
    Blazor入门100天 : 自做一个支持长按事件的按钮组件
    Web开发:Web开发中的域概念整理与解读
    【牛客网刷题】VL2 异步复位的串联T触发器
  • 原文地址:https://blog.csdn.net/A_D_H_E_R_E/article/details/132749346