前端与CSS | 青训营笔记

69 阅读3分钟

这是我参与「第五届青训营」笔记创作活动的第1天

本堂课的重点内容:

  • CSS的基本定义以及CSS的工作原理。
  • CSS中伪类选择器,多个选择器作用在同一个HTML标签上渲染的优先级。
  • CSS中常用来优化文字段落显示美观的属性,如font-size,font-family,spacing。
  • CSS中常用来布局的属性,如display, grid,以及他们具体地布局使用方法,展现出来的效果。

具体案例

CSS定义

CSS是为HTML标记语言提供一种样式描述,定义了其中元素显示方式。

CSS工作原理

浏览器的渲染流程如下-CSS的工作原理包含在其中:

  • 用户输入URL后,浏览器就会向服务器发出请求,请求URL对应的资源
  • 接到服务器的响应内容后,浏览器的HTML解析器,会将HTML文件解析成一颗DOM树
  • 将CSS解析成CSSOM树
  • 从DOM树与CSSOM树上 ,构建出Render Tree(渲染树)
  • 浏览器从渲染树上知道页面中有哪些有节点,各个节点的样式,以及各个节点的从属关系,最后计算出每个节点在屏幕中的位置后,把内容显示到屏幕上

diary_1.png

CSS中选择器

  • 通配选择器*: 页面中所有的元素都被选中
  • 标签选择器:如div, h1~h6, p,
  • id选择器: 如id = "ify",选中时#ify,一个页面中通常只有一个,多个不符合规范
  • 类选择器: 如class= "ify", 选中时还.ify,一个页面中可以有多个class标签
  • 属性选择器: 如< input type="button"/>,[type="button"] { color: red }
  • 伪元素选择器: 如div::before, div::after
  • 伪类选择器: 如:last-child,first-child

CSS中组合选择器

  • 直接组合 AB AB同时满足 button:click
  • 后代组合 A B 选中A的子孙B div p
  • 亲子组合 A > B 选中A的子元素B div>p
  • 兄弟选择器 A ~ B 选中与A同级的元素B div~p
  • 相邻选择器 A + B 选中紧挨在A后面的元素B div+p

伪类选择器

多个选择器作用优先级

CSS优先级排序:!important > 行内样式> id选择器 > 类选择器 = 属性选择器 = 伪类选择器  > 标签选择器 = 伪元素选择器 > 通配符选择器 > 继承选择器 > 浏览器默认属性。

当有多个级别组合的选择器时,可以采用下优先级计算方式:

每个选择器对应一个初始“四位数”:0、0、0、0

  1. 若是 行内选择器,加1、0、0、0
  2. 若是 ID选择器,加0、1、0、0
  3. 若是 类选择器/属性选择器/伪类选择符,加0、0、1、0
  4. 若是 标签选择器/伪元素选择器,加0、0、0、1

取最终的四位数从左到右比较大小

注意:

  • !important优先级最高,但出现冲突时则需比较“四位数”
  • 通配符选择器、子选择器、相邻选择器、兄弟选择器权重值为0
  • 优先级相同时,采用就近原则,哪个样式在最后选择哪个

看看下面几道题目:

<style>
    .main{
        color:black
    }
    span{
        color:red
    }
</style>
<div style="color:red !important" class="main">
    <span>000</span>
</div>
问:“000是什么颜色”

!important权重最大,大于class="main",可它对于span是一个继承属性,标签属性大于继承属性,000为红色。

<style>
#content .text {text-color:red;}
#content>.title {color:green;}
#content div.title {font-color:blue;}
p {font-color:yellow;}
*{color:black;}
</style>
<div id="content">
<span class="text"><p class="title">1111</p></span>
</div>
问:1111最后的颜色是什么?
  • #content .text,没有text-color这个样式
  • #content>.title,没直接到p元素,p是继承span
  • #content div.title, .title不在div上面,没有这种写法,font-color写法错误
  • p{ font-color}写法错误
  • *{color:black},通配符选择器>继承选择器>浏览器默认属性,最后颜色为black