CSS| 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
一、本堂课重点内容:
- CSS的概念,在页面中的使用,工作原理。
- CSS选择器,颜色、字体等基础语法,CSS的调试。
- css选择器的特异度,属性的继承,CSS求值过程。
- CSS的布局。
二、详细知识点介绍:
1.CSS的概念
- Cascading Style Sheets
- 用来定义页面元素的样式
- 设置字体和颜色
- 设置位置和大小
- 添加动画效果
h1(选择器selector){
color(选择器property):white(属性值value);
font-size:14px;(生命declaration)
- 在页面中使用CSS:
<!--外链-->
<link rel = "stylesheet" href = "/assets/style.css">
<!--嵌入-->
<style>
li {margin: 0; list-style: none;}
p {margin: 1em 0;}
</style>
<!--内联-->
<p style = "margin:1em 0" > Example Content </p>
不推荐使用内联。
2.CSS是如何工作的
加载HTML->解析HTML->(加载CSS->解析CSS--添加样式到DOM节点-->)创建DOM树->展示页面
3.选择器
找出页面中多个元素,以便给他们设置样式
- 通配选择器:选择页面上所有的HTML元素
* {
color: blue;
}
- 标签选择器
- id选择器:使用 HTML 元素的 id 属性来选择特定元素。元素的 id 在页面中是唯一。
#id{
color: red;
}
- 类选择器:选择有特定 class 属性的 HTML 元素。
.class {
color: red;
}
- 属性选择器:根据元素的属性及属性值来选择元素
input[type="password"]{
color:red;
}
也可以匹配
a[href$=".jpg"]{
color:blue;
}
- 伪类(pseudo-classes):状态性,结构性
状态性:
a:link{
color:black;
}
a:visited{
color:gray;
}
结构性:
li:first-child{
color:red;
}
- 组合(combinators):直接组合AB、后代组合A B、亲子组合A>B、兄弟选择器A~B、相邻选择器A+B。
- 选择器组
格式化文本:颜色-RGB/HSL、alpha透明度、字体font-family、font-size、line-height、white-space
调试CSS:右键点击页面,选择【检查】。或使用快捷键Ctrl+shift+I。
选择器的特异度(Specificity) id>(伪)类>标签
4.继承
某些属性会自动继承其父元素的计算值,除非显式指定一个值。
- 显式继承:如果一个属性不可继承,可以用inherit关键词显式继承。
* {
box-sizing:inherit;
}
初始值:CSS中每个属性都有一个初始值。可以用initial关键字显式重置为初始值。
5.求值过程
6.布局
- 确定内容的大小和位置的算法
- 依据元素、容器、兄弟节点和内容等信息来计算。
- 布局相关技术:常规流、浮动、绝对定位。
盒模型
-
height
- 指定content box高度
- 取值为长度、百分数、auto
- auto取值由内容计算得来
- 百分数相对于容器的content box高度
- 容器有指定的高度时,百分数才生效
-
padding
- 指定元素四个方向的内边距
- 百分数相对于容器宽度
-
border
- 指定容器边框样式、粗细和颜色
- 三种属性(width/style/color)、四个方向。
-
margin
- 指定元素四个方向的外边距
- 取值可以是长度、百分数、auto
- 百分数相对于容器宽度
- margin:auto可以用来水平居中
- margin collapse
overflow可以设置溢出的部分是什么状态。
(1)常规流
- 行级vs块级
| 块级 | 行级 |
|---|---|
| 不和其他盒子并列排放 | 和其他行级盒子一起放在一行或拆成多行 |
| 适用所有的盒模型属性 | 盒模型中的width、height不适用 |
| 块级元素 | 行级元素 |
|---|---|
| 生成块级盒子 | - 生成行级盒子 - 内容分散在多个行盒(line box)中 |
| body\artivle\div\main\section \h1~6\p\ul\li… | span\em\strong\cite\code |
| display:block | display:inline |
display:inline-block 本身是行级,可以放在行盒中;可以设置宽高;作为一个整体不会被拆成多行。
display:none排版时完全忽略
- 根元素、浮动和绝对定位的元素会脱离常规流
- 其他元素都在常规流之内(in-flow)
- 常规流中的盒子,在某种排版上下文中参与布局。
行级排版上下文
- inline formatting context(IFC)
- 只包含行级盒子的容器会创建一个IFC
- IFC内的排版规则
- 盒子在一行内水平摆放
- 一行放不下时,换行显示
- text-align决定一行内盒子的水平对齐
- vertical-align决定一个盒子在行内的垂直对齐
- 避开浮动(float)元素
块级排版上下文
- Block Formatiing Context(BFC)
- 某些容器会创建一个BFC
- 根元素
- 浮动、绝对定位、inline-block
- Flex子项和Grid子项
- overflow值不是visible的块盒
- diaplay:flow-root;
- BFC内的排版规则
- 盒子从上到下摆放
- 垂直margin合并
- BFC内盒子的matgin不会与外面的合并
- BFC不会和浮动元素重叠
Flex Box
- 一种新的排版上下文
- 它可以控制盒子的
- 摆放的流向、顺序
- 盒子宽度和高度
- 水平和垂直方向的对齐
- 是否允许折行
主轴:可以使用justify-content对齐
侧轴:可以使用align-items对齐
Flexibility
可以设置子项的弹性:当容器有剩余空间时,会伸展;容器空间不够时,会收缩。
- flex-grow 有剩余空间时的伸展能力
- flex-shrink 容器空间不足时收缩的能力
- flex-basis 没有伸展或收缩时的基础长度
Grid布局
- display:grid使元素生成一个块级的Grid容器
- 使用grid-template相关属性将容器划分为网格
- grid-template-columns
- grid-template-rows
- 设置每一个子项占哪些行/列
- grid area网格区域
(2)float浮动
position属性
-
static
-
relative
- 在常规流里面布局
- 相对于自己本应该在的位置进行便宜
- 使用top、left、bottom、right设置偏移长度
- 流内其他元素当他没有偏移一样布局(不影响其他元素)
-
absolute
- 脱离常规流
- 相对于最近的非static祖先定位
- 不会对流内元素布局造成影响
-
fixed
- 脱离常规流
- 相对于视口定位
三、实践练习例子:
通过设置border粗细、颜色不同,可以画出三角形。
css:
* {
margin: 0;
padding: 0;
}
.content {
width:0;
height:0;
margin:0 auto;
border:50px solid transparent;
border-top: 50px solid pink;
}
html:
<div class="content"></div>
四、课后个人总结:
- 可以充分利用MDN和W3C CSS规范学习CSS。在浏览器的开发者工具里可以学习页面的布局。
- 常规流和浮动是不同的布局技术,flex和grid都属于常规流。
五、引用参考:
- 笔记内容来自课程视频,无参考其他文档。