这是我参与第五届青训营伴学笔记创作活动的第二天!
详细知识点介绍
1、CSS是什么?
- Cascading Style Sheets
- 用来定义页面元素的样式
- 设置字体和颜色
- 设置位置和大小
- 添加动画效果
2、在页面中使用CSS
- 外链(推荐)
<link rel="stylesheet" href="style.css">
- 嵌入
<style>
li {margin: 0; list-style: none;}
p {margin: lem 0;}
</style>
- 内联
<p style="margin: lem 0">Example Content</p>
3、CSS是如何工作的?
- 浏览器载入 HTML 文件(比如从网络上获取)。
- 将 HTML 文件转化成一个 DOM(Document Object Model),DOM 是文件在计算机内存中的表现形式。
- 接下来,浏览器会拉取该 HTML 相关的大部分资源,比如嵌入到页面的图片、视频和 CSS 样式。JavaScript 则会稍后进行处理,简单起见,同时此节主讲 CSS,所以这里对如何加载 JavaScript 不会展开叙述。
- 浏览器拉取到 CSS 之后会进行解析,根据选择器的不同类型(比如 element、class、id 等等)把他们分到不同的“桶”中。浏览器基于它找到的不同的选择器,将不同的规则(基于选择器的规则,如元素选择器、类选择器、id 选择器等)应用在对应的 DOM 的节点中,并添加节点依赖的样式(这个中间步骤称为渲染树)。
- 上述的规则应用于渲染树之后,渲染树会依照应该出现的结构进行布局。
- 网页展示在屏幕上(这一步被称为着色)。
4、选择器
- 找出页面中的元素,以便给他们设置样式
- 使用多种方式选择元素
- 按照标签名,类名或id
- 按照属性
- 按照DOM树中的位置
通配选择器
<style>
* {
color: red;
font-size: 20px;
}
</style>
-
设置页面中所有标签为统一的样式
-
通配符选择器选中的是所有标签
标签选择器
h1 {
color: orange;
}
id选择器id的值在页面中要唯一
<h1 id="title">标题</h1>
<style>
#title {
color: blue;
}
</style>
类选择器可以出现多次
<ul>
<li class="done">橙子</li>
<li class="done">李子</li>
<li>苹果</li>
</ul>
<style>
.done {
color:gray;
text-decoration: line-through;
}
</style>
①在标签class 属性中写 多个类名
②多个类名中间必须用空格分开
③这个标签就可以分别具有这些类名的样式
属性选择器
<lable>用户名:</lable>
<input value="zhao" disabled />
<lable>密码:</lable>
<input value="123456" type="password" />
<style>
[disabled] {
background: #eee;
}
input[type="password"] {
color: red;
}
</style>
[disabled]表示具有disable属性的元素选中
[type="password"]表示具有type元素且属性值为password的选中
a[href^="#"]表示在a标签里以#开头的选中
a[href$=".jpg"]表示在a标签里以.jpg结尾的选中
- 伪类
- 不基于标签和属性定位元素
- 几种伪类
(1)状态伪类
<a herf="http://example.com">example.com</a>
<lable>
用户名:
<input type="text">
</lable>
<style>
a:link {
color: black;
}
a:visited {
color: gray;
}
a:hover {
color: orange;
}
a:active {
color: red;
}
:focus {
outline: 2px solid orange;
}
</style>
(2)结构性伪类
通过在父级节点的相对位置选中
<ol>
<li>阿凡达</li>
<li>泰坦尼克号</li>
<li>星球大战</li>
<li>复仇者联盟</li>
<li>侏罗纪世界</li>
</ol>
<style>
li {
border-bottom: 1px solid;
}
li:first-child {
color: orange;
}
li:last-child {
color: red;
border-bottom: none;
}
</style>
-
组合 | 名称 | 语法 | 说明 | 示例 | | --- | --- | --- | --- | | 直接组合 | AB | 满足A同时满足B | input:focus | | 后代组合 | A B | 选中B,如果他是A的子孙 | nav a | | 亲子组合 | A>B | 选中B,如果他是A的子元素 | section>p | |兄弟选择器 | A
B | 选中B,如果他在A后且和A同级 | h2p | |相邻选择器 | A+B | 选中B,如果他紧跟A后面 | h2+p | -
选择器组 ---用逗号隔开选择器即可
5、颜色
- RGB
用三个滑块分别表示 红绿蓝 三种颜色的数量
- HSL
例:hsl(211, 66%, 22%)
- 直接指定颜色
如white,blue...
- 透明度 alpha
新版中可以直接写 rgb( 0, 0, 0, 1)
6、字体 font-family
若中英文混排建议把英文写前面
- 使用Web Fonts
<h1>Web fonts</h1>
<style>
@font-face {
font-family: "Megrim";
src: url(...)
format('woff2');
}
h1 {
font-family: Megrim, Cursive;
}
</style>
- font-size
- 关键字:small,medium,large
- 长度:px,em
- 百分数:相对于父元素字体大小
- font-weight
字重(粗细)100~900,(400-normal,700-bold) - font-style
italic斜体,normal正常 - font
字体属性的顺序:字体风格→字体粗细→字体大小→字体类型 - line-height
行高 - white-space
定义元素内空白如何处理- normal---忽略多余空白,只保留一个(默认)
- nowrap---只保留一个空白,文本不会换行,会在同一行上继续,直到br
- pre---保留空白,输入几个空格就显示几个
- pre-wrap---保留空白符序列,正常进行换行
- pre-line---合并空白符序列,保留换行符
7、文本
- 文本装饰
text-decoration:none,underline,overline,line-through - 阴影: text-shadow:
8、设置鼠标形状
span{cursor:pointer;}
| 值 | 说明 |
|---|---|
| default | 默认光标 |
| pointer | 超链接的指针 |
| wait | 指示程序正在忙 |
| help | 指示可用的帮助 |
| text | 指示文本 |
| crosshair | 鼠标呈现十字状 |
9、背景属性
div{ background:#C00 url(../image/pic.gif) 205px 10px no-repeat;}
-
背景属性的顺序:背景颜色→背景图像→背景定位→背景重复
-
repeat(默认值)
no-repeat(不平铺)
repeat-x(只沿水平方向平铺)
repeat-y(只垂直方向平铺)
10、渐变
linear-gradient ( position, color1, color2,…)
11、三大特性
- 层叠性:
标签必须使用同一类型的选择器,最后定义的样式会将前面定义的样式冲突部分覆盖掉。 - 继承性:
- 当一个元素并没有设置一个属性时,他会去父级找
- 一般和字体相关的都是可以继承的,和盒模型相关的不可继承
- 不可继承变可继承 用通配符选择器设置inherit关键字来实现
- 优先级:
越特殊优先级越高,高的可以对低的实现样式覆盖
初始值
(1)CSS中,每个属性都有一个初始值
background-color的初始值为transparent
margin-left的初始值为0
(2)可以使用initial关键字显式重置为初始值
background-color:initial
12、求值过程
13、css布局方式及相关技术
(1)布局是什么
- 确定内容的大小和位置的算法
- 依据元素,容器,兄弟节点和内容等信息来计算
(2)布局相关技术
- 常规流(行级,块级,表格布局,FlexBox,Grid布局)
- 浮动
- 绝对定位
(3)盒模型
width
-指定content box宽度
-取值为长度,百分数,auto
-auto由浏览器根据其他属性确定
-百分数相对于容器的content box宽度
height
-指定content box高度
-取值为长度,百分数,auto
-auto由浏览器根据其他属性确定
-百分数相对于容器的content box高度
-容器有指定高度时,百分数才生效
padding
-指定元素四个方向的内边框
-百分数相对于容器宽度
border
-指定容器边框样式,粗细,颜色
-三种属性:border-width 、 border-style 、 border-color
-四个方向:border-top 、 border-bottom 、 border-left 、 border-right
-当四条边框不同色时,可以通过不透明度调节,可以得到小三角形
margin
-指定元素四个方向的外边框
-取值可以是长度,百分数,auto
-百分数相对于容器宽度
-使用margin-auto水平居中
-margin collapse
box-sizing:border-box
overflow
visible展示
hidden隐藏
scroll滚动
(4)行级 VS 块级
- 盒子
| 行级 | 块级 |
|---|---|
| 和其他行级盒子一起放在一行或拆开成多行 | 不和其他盒子并排摆放 |
| 盒模型中的width,height不适用 | 适用所有的盒模型属性 |
- 元素
| 行级 | 块级 |
|---|---|
| 生成行级盒子 | 生成块级盒子 |
| 内容分散在多个行盒中 | |
| span、em、strong、cite、code等 | body、article、div、main、section、h1-1、p、ul、li等 |
| display:inline | display:block |
-
display属性
- block---块级盒子
- inline---行级盒子
- inline-block---本身是行级,可以放在行盒中;可以设置宽高;作为一个整体不会被拆散成多行
- none---排版时完全被忽略
-
行级排版上下文
- Inline Fromatting Context(IFC)
- 只包含行级盒子的容器会创建一个IFC
- IFC内的排版规则
- 盒子在一行内水平摆放
- 一行放不下时,换行显示
- text-align决定一行内盒子的水平对齐
- vertical-align决定一个盒子在行内的垂直对齐
- 避开浮动(float)元素
-
块级排版上下文
- Block Formatting Context(BFC)
- 某些容器会创建一个BFC
- 根元素
- 浮动、绝对定位、inline-block
- Flex子项和Grid子项
- overflow值不是visible的块盒
- display:flow-root;
- BFC内的排版规则
- 盒子从上到下摆放
- 垂直margin合并
- BFC内盒子的margin不会与外面的合并
- BFC不会和浮动元素重叠
-
行级和块级同在,会创建一个匿名盒子来包裹这两个元素
(5)Flex Box是什么?
- 一种新的排版上下文
- display: flex;
- 他可以控制子级盒子的:
- 摆放的流向(上,下,左,右)
- 摆放的顺序
- 盒子宽度和高度
- 水平和垂直方向的对齐
- 是否允许折行
justify-content
align-items
(6)Flexibility
- 可以设置子项的弹性:当容器有剩余空间时,会伸展;容器空间不够时,会收缩
- flex-grow有剩余空间时的伸展力
- flex-shrink容器空间不足时的收缩力
- flex-basis没有收缩或伸展时的基础长度
(7)Grid布局
- 是一个二维布局
- display: grid;使元素生成一个块级的Grid容器
- 使用grid-template相关属性将容器划分为网格
- 设置每一个子项占那些行/列
- 划分网格:
grid-template-columns:100px 100px 200px; //三列
grid-template-rows:100px 100px; //两行
//(auto代表自动,1fr代表一份)
- grid line 网格线
.a {
grid-row-start:1;
grid-column-start:1;
grid-row-end:3;
grid-column-end:3;
}
//等价于
.a {
grid-area:1/1/1/1;
}
(8)float浮动
(9)position属性
* static---默认值,非定位元素
* relative---相对自身原本位置偏移,不脱离文档流
* absolute---绝对定位,相对非static祖先元素定位
* fixed---相对于视口绝对定位
- relative
- 在常规流里面布局
- 相对于自己本应该的位置进行偏移
- 使用top,left,bottom,right设置偏移长度
- 流内其他元素当它没有偏移一样布局
- absolute
- 脱离常规流
- 相对于最近的非static祖先定位
- 不会对流内元素布局造成影响
(10)z-index属性
指定定位元素的堆叠顺序
必须在position上才有效,可以负值,不同父元素的子元素之间进行显示时会根据父级元素的z-index进行渲染