一.CSS概述
1.1.什么是css
Cascading Style Sheets 层叠样式表,级联样式表,简称样式表 |
1.2.作用
设置HTML网页中的元素样式 |
1.3.CSS和HTML的关系
HTML:负责网页结构的搭建,内容的展示 CSS:负责网页的修饰 |
1.4.CSS与HTML的属性使用原则
W3C建议我们尽量使用css的方式来取代html的属性 css样式: 1.样式代码高度的重用 2.提高可维护性 |
二.CSS的语法规范
2.1.使用CSS的方法
1.内联样式 将css的样式定义在HTML标签的style属性中 <any style="样式声明; 样式声明"></any> 样式声明由 样式属性:值 组成 多个样式声明之间用分号分隔 |
内联样式使用的非常少(禁止使用) 内联样式不能重用 内联样式优先级最高 项目中一般很少使用内联样式,只在学习和测试的时候使用 |
常用的css属性
color:设置文本的颜色 取值:合法颜色值(颜色的英文,#a~f*3 #abc #aaf #afa # faa #aff #faf) font-size:设置字体的大小 background:设置背景颜色 |
2.内部样式 在<head></head>标签中,添加<style><style>标签,在其内部定义样式规则 <style> 样式规则 </style> 样式规则:由选择器和样式声明组成 选择器{ 样式声明; 样式声明; } span{ color:#afa; background:#faf; } |
通过CSS的选择器来选中元素并为其设置各种样式 可以同时为多个标签设置样式,并且修改时只需要修改一处即可全部应用。 内部样式在本页面可以 重用,但是其他页面不能重用 项目中使用不多,但是学习和测试中大量使用 |
3.外部样式 独立创建一个新文件*.css。 可以在任何网页中引用 <head> <link rel="stylesheet" href="css文件的url"> </head> 外部样式是项目中必须使用的样式写法。
将样式编写到外部的CSS文件中,可以使用到浏览器的缓存机制, 从而加快网页的加载速度,提高用户的体验。 |
2.2 CSS样式的特性
1.继承性 大部分的css效果是可以直接被子元素继承的 必须是层级结构 后代标签可以继承祖先标签的某些属性,优先继承离标签最近的父辈元素的属性,继承的权重是0.
|
2.层叠性 可以为一个元素定义多个样式规则 规则中属性不冲突(不重复),可以同时作用到当前元素上 |
3.优先级 如果样式声明冲突时,按照样式规则优先级去应用 默认的优先级,从高到低: 1.内联样式(行内样式)优先级最高 2.内部样式、外部样式,遵循就近原则 3.浏览器默认样式最低 |
4.调整优先级 !important规则 放在属性值之后,与值之间用空格隔开 作用是调整优先级,让没有important属性不能覆盖他 |
三.基础选择器(重点*******)
3.1.选择器的作用
规范了页面中哪些元素能够使用定义好的样式 为了匹配元素 |
3.2.基础选择器详解
1.通用选择器 *{样式声明} 效率极低,尽量少用 *{margin:0;padding:0}外边距,内边距清0 |
2.元素选择器(标签选择器) 设置页面中同类元素的默认样式 标签名称{样式声明} p{color:red} |
3.类选择器 定义页面上某类元素的公共样式,谁想用我,就引用我的class名 元素通过class属性来引用该样式 .类名{样式的声明} <any class="类名"> 注意: "."不能省略 类名不能以数字开头 类名不能包含特殊字符(可以包含 - _) |
类选择器的特殊用法 1.多类选择器 让一个元素引用多个类选择器 <p class="font_blue font_size24">烤生蚝</p> 2.分类选择器 将元素选择器和类型选择器联合使用 元素选择器.类选择器{} 可以匹配到,指向了某个类的,具体某个元素 <span class="font_blue">水煮牛肉</span> span.font_blue{background:#faf;} 作用 1.指向更精确 2.优先级变高 |
4.id选择器 设置指定元素的样式,专属定制 为元素设置id值,使用#id值作为选择器,编写专属样式 #id属性值{样式声明} |
5.群组(并集)选择器 将多个选择器放在一起,一块定义某公共样式 选择器1,选择器2,选择器3......{公共样式声明} #content,p.mycolor,span{color:red} |
6.后代选择器 通过元素的后代关系匹配元素 后代:一层或者多层的嵌套关系 选中指定元素内的指定后代元素 语法:选择器1 选择器2 选择器3{样式声明} |
7.子代选择器 选中指定父元素的指定子元素 通过元素的子代关系匹配元素(一层嵌套) 选择器1>选择器2>选择器3{样式声明}
补充:1、交集选择器 作用:选中同时符合多个条件的元素 语法:选择器1选择器2选择器3选择器n{} 注意点: 交集选择器中如果有元素选择器,必须使用元素选择器开头
2、兄弟选择器 选择下一个兄弟 语法:前一个 + 下一个 选择下边所有的兄弟 语法:兄 ~ 弟
3、属性选择器 [属性名] 选择含有指定属性的元素 [属性名=属性值] 选择含有指定属性和属性值的元素 [属性名^=属性值] 选择属性值以指定字符开头的元素 [属性名$=属性值] 选择属性值以指定字符结尾的元素 [属性名*=属性值] 选择属性值中含有某字符的元素的元素 |
|
8.伪类选择器 伪类(不存在的类,特殊的类) 伪类用来描述一个元素的特殊状态 比如:第一个子元素、被点击的元素、鼠标移入的元素... 伪类一般情况下都是使用:开头 :first-child 第一个子元素 :last-child 最后一个子元素 :nth-child(n) 选中第n个子元素 特殊值: n 第n个 n的范围0到正无穷 2n 或 even 表示选中偶数位的元素 2n+1 或 odd 表示选中奇数位的元素
- 以上这些伪类都是根据所有的子元素进行排序
:first-of-type :last-of-type :nth-of-type() 这几个伪类的功能和上述的类似,不通点是他们是在同类型元素中进行排序
:not() 否定伪类 将符合条件的元素从选择器中去除 1.链接伪类 :link 元素尚未访问时的状态样式 :visited 元素访问过后的状态样式
注意:由于隐私的原因,所以visited这个伪类只能修改链接的颜色
#a1:link{color:red;} #a1:visited{color:yellow;} 2.动态伪类 :acitve 匹配元素被激活时的状态 #btn:active{color:purple;} :focus 匹配元素获取焦点时的状态 #txt:focus{background:#aff;} :hover 鼠标悬停在元素时的状态 .img:hover{width:100px;}
补充: 伪元素,表示页面中一些特殊的并不真实的存在的元素(特殊的位置) 伪元素使用 :: 开头
::first-letter 表示第一个字母 ::first-line 表示第一行 ::selection 表示选中的内容 ::before 元素的开始 ::after 元素的最后 - before 和 after 必须结合content属性来使用 div::before{ content: ‘『‘; color:red; }
|
|
3.3选择器的权值
|
样式的冲突 当我们通过不同的选择器,选中相同的元素,并且为相同的样式设置不同的值时,此时就发生了样式的冲突。 发生样式冲突时,应用哪个样式由选择器的权重(优先级)决定 权值:标识当前选择器的重要程度,权值越大优先级越高 !important >1000 内联样式 1000 id选择器 100 类和伪类选择器 10 元素选择器 1 *选择器 0 继承的样式无权值 无
权重大小:
标签选择器<类选择器<id选择器<行内样式<!important
总结: 1.当一个选择器中含有多个选择器时,需要将所有的选择器的权值进行相加。 然后再进行比较,权值高的优先显示 注意:选择器的权值计算不会超过其最大的数量级 (1W个#id也不会到1000) 2.群组选择器的权值,单独计算,不会相加 3.样式后面加!important 该样式会获取最高优先级 内联样式不能添加!important 4.如果权值相同,使用就近原则 |
四.尺寸和边框
4.1.尺寸属性
改变元素的宽高 width 最大宽度 max-width 最小宽度 min-width height 最大高度 max-height 最小高度 min-height |
附加知识点:单位
1.尺寸单位 px 像素 in 英寸 1in=2.54cm pt 磅值,多数用它表示字体大小 1pt=1/72in cm mm 厘米,毫米 em 相对单位,相对父元素的倍数 rem 相对单位,相对根元素的倍数(html) % 相对单位,相对父元素的百分之多少
补充: 长度单位: 像素 屏幕(显示器)实际上是由一个一个的小点点构成的 不同屏幕的像素形状大小是不同的,像素形状越小的屏幕显示的效果越清晰 所以同样的200px在不同的设备下显示效果不一样
百分比 也可以将属性值设置为相对于其父元素属性的百分比 设置百分比可以使子元素跟随父元素的改变而改变
em em是相对于其父元素的字体大小来计算的 1em = 1font-size em会根据字体大小的改变而改变
rem rem是相对于根元素的字体大小来计算 |
2颜色单位 1.颜色的英文单词 red blue yellow black orange pink purple 2.#rrggbb RGB光学三元色 6个16进制 #006699 3.#aabbcc--->#abc #f00 #0f0 #00f #fff #000 #333 4.rgb(r,g,b); r:0~255 g:0~255 b:0~255 rgb(255,255,255);白色 5.rgb(r%,g%,b%) 此变现形式使用极少 6.rgba(r,g,b,alpha) alpha透明度
补充: 颜色单位: 在CSS中可以直接使用颜色名来设置各种颜色 比如:red、orange、yellow、blue、green ... ... 但是在css中直接使用颜色名是非常的不方便
RGB值: RGB通过三种颜色的不同浓度来调配出不同的颜色 R red,G green ,B blue 每一种颜色的范围在 0 - 255 (0% - 100%) 之间 - 语法:RGB(红色,绿色,蓝色)
RGBA: 就是在rgb的基础上增加了一个a表示不透明度 - 需要四个值,前三个和rgb一样,第四个表示不透明度 1表示完全不透明 0表示完全透明 .5半透明
十六进制的RGB值: 语法:#红色绿色蓝色 颜色浓度通过 00-ff 如果颜色两位两位重复可以进行简写 #aabbcc --> #abc
HSL值 HSLA值 H 色相(0 - 360) S 饱和度,颜色的浓度 0% - 100% L 亮度,颜色的亮度 0% - 100%
|
补充:样式的继承,我们为一个元素设置的样式同时也会应用到它的后代元素上
继承是发生在祖先和后代之间的
继承的设计是为了方便我们的开发,
利用继承我们可以将一些通用的样式统一设置到共同的祖先元素上,
这样只需设置一次即可让所有的元素都具有该样式
注意:并不是所有的样式都会被继承:
比如 背景相关的,布局相关等的这些样式都不会被继承。
4.2.溢出处理
overflow overflow-x overflow-y 当内容多,元素区域小的时候,就会产生溢出效果 默认是纵向溢出 取值: 1.visible 可见的,默认值,溢出可见 2.hidden 隐藏的,溢出的内容不可见 3.scroll 显示滚动条,不管是否溢出,都添加横向和纵向滚动条,(不溢出不可用) 4.auto 溢出的部分,显示滚动条,并可用 |
4.3.边框属性
border:width style color; width:边框的宽度,以px为单位的数字 style:边框的样式 取值 solid实线 dotted虚线(点点) dashed虚线(短线) double 双实线 color:边框的颜色,合法的颜色值 (transparent 透明色) 这种写法,同时设置4个边框,是一种简写方式 取消边框 border:none/0; |
单边设置 border-top/right/bottom/left |
单属性设置 border-color:#f00; border-style:dotted; border-width:10px; |
单边单属性 border-方向-属性(共12个) border-top-style:double; border-top-color:#44f; |
4.4边框的倒角,阴影
|
边框的倒角(圆角) 将直角倒成圆角 border-radius: 取值 以px为单位的数字 % 设置圆形(50%) 单角设置 使用两条边去确认一个角,先写上下后写左右 border-top-left-radius:左上 border-top-right-radius:右上 border-bottom-left-radius:左下 border-bottom-right-radius:右下 |
边框阴影
box-shadow 用来设置元素的阴影效果,阴影不会影响页面布局 第一个值 水平偏移量 设置阴影的水平位置 正值向右移动 负值向左移动 第二个值 垂直偏移量 设置阴影的水平位置 正值向下移动 负值向上移动 第三个值 阴影的模糊半径 第四个值 阴影的颜色 box-shadow: h-shadow v-shadow blur spread color h-shadow 水平方向阴影偏移,必须值 v-shadow 垂直方向偏移量,必须值 以下可选参数 blur:阴影的模糊距离,可选值,越大模糊距离越明显 spread:阴影的尺寸,指定要在基础阴影上扩出的大小 color:阴影颜色 inset:把默认的外部阴影设置为内部阴影 |
4.5.轮廓
轮廓指的是边框的边框,绘制与边框外边的线条 outline:width style color;
outline 用来设置元素的轮廓线,用法和border一模一样 轮廓和边框不同的点,就是轮廓不会影响到可见框的大小 |
五.框模型(盒子模型)
5.1组成成分
盒模型、盒子模型、框模型(box model) CSS将页面中的所有元素都设置为了一个矩形的盒子 将元素设置为矩形的盒子后,对页面的布局就变成将不同的盒子摆放到不同的位置 每一个盒子都由一下几个部分组成: 内容区(content) 内边距(padding) 边框(border) 外边距(margin) |
5.2 内容区(content)
内容区(content),元素中的所有的子元素和文本内容都在内容区中排列
内容区的大小由width 和 height两个属性来设置
width 设置内容区的宽度
height 设置内容区的高度
5.3边框(border)
边框(border),边框属于盒子边缘,边框里边属于盒子内部,出了边框都是盒子的外部
边框的大小会影响到整个盒子的大小
要设置边框,需要至少设置三个样式:
边框的宽度 border-width
边框的颜色 border-color
边框的样式 border-style
border-width可以用来指定四个方向的边框的宽度
四个值:上 右 下 左
三个值:上 左右 下
两个值:上下 左右
一个值:上下左右
除了border-width还有一组 border-xxx-width
xxx可以是 top right bottom left
用来单独指定某一个边的宽度
border-color用来指定边框的颜色,同样可以分别指定四个边的边框
规则和border-width一样
border-color也可以省略不写,如果省略了则自动使用元素的color的颜色值
border-style 指定边框的样式
solid 表示实线
dotted 点状虚线
dashed 虚线
double 双线
border-style的默认值是none 表示没有边框
border简写属性,通过该属性可以同时设置边框所有的相关样式,并且没有顺序要求
除了border以外还有四个 border-xxx
border-top
border-right
border-bottom
border-left
页面元素皆为框(盒子)
内边距:元素边框与内容之间的空白间距
5.4.外边距
外边距:围绕在元素边框外的空白区域(元素与元素之间的距离) margin 定义4个方向外边距 margin-top/right/bottom/left 定义某一个方向的外边距 取值 1.以px为单位的数字 为正数 top,元素往下移动 left, 元素往右移动 为负数 top,元素往上移动 left,元素往左移动
元素在页面中是按照自左向右的顺序排列的, 所以默认情况下如果我们设置的左和上外边距则会移动元素自身 而设置下和右外边距会移动其他元素 margin-right 默认情况下设置margin-right本元素不会产生任何效果 margin-bottom 下外边距,设置一个正值,其下边的元素会向下移动
2.取值为%,相对于父元素尺寸的百分比 3.auto,自动计算块级元素的外边距,控制块级元素在水平方向居中对齐 margin的效果,改变元素在页面上的位置,多用于微调
元素的水平方向的布局: 元素在其父元素中水平方向的位置由以下几个属性共同决定“ margin-left border-left padding-left width padding-right border-right margin-right
一个元素在其父元素中,水平布局必须要满足以下的等式 margin-left+border-left+padding-left+width+padding-right+border-right+margin-right = 其父元素内容区的宽度 (必须满足) 以上等式必须满足,如果相加结果使等式不成立,则称为过度约束,则等式会自动调整 调整的情况: 如果这七个值中没有为 auto 的情况,则浏览器会自动调整margin-right值以使等式满足
这七个值中有三个值可以设置为auto width margin=-left maring-right 如果某个值为auto,则会自动调整为auto的那个值以使等式成立 0 + 0 + 0 + auto + 0 + 0 + 0 = 800 auto = 800 0 + 0 + 0 + auto + 0 + 0 + 200 = 800 auto = 600 200 + 0 + 0 + auto + 0 + 0 + 200 = 800 auto = 400
如果将一个宽度和一个外边距设置为auto,则宽度会调整到最大,设置为auto的外边距会自动为0 如果将三个值都设置为auto,则外边距都是0,宽度最大 如果将两个外边距设置为auto,宽度固定值,则会将外边距设置为相同的值 所以我们经常利用这个特点来使一个元素在其父元素中水平居中 示例: width:xxxpx; margin:0 auto;
垂直方向布局: 默认情况下父元素的高度被内容撑开 子元素是在父元素的内容区中排列的, 如果子元素的大小超过了父元素,则子元素会从父元素中溢出 使用 overflow 属性来设置父元素如何处理溢出的子元素
可选值: visible,默认值 子元素会从父元素中溢出,在父元素外部的位置显示 hidden 溢出内容将会被裁剪不会显示 scroll 生成两个滚动条,通过滚动条来查看完整的内容 auto 根据需要生成滚动条
overflow-x: overflow-y: |
简写方式 margin:value; 设置4个方向外边距 margin:v1 v2; v1:上下外边距 v2:左右外边距 margin:0 auto; 控制块级元素在水平方向居中对齐 margin:v1 v2 v3; v1:上外边距 v2:左右外边距 v3:下外边距 margin:v1 v2 v3 v4; 上 右 下 左(顺时针) |
3.自带外边距的元素有哪些
h1~h6,p,body,ol,ul,dl,pre 通常要清除这些元素的自带外边距*{margin:0;padding:0} |
4.外边距的特殊效果
1.垂直外边距的重叠(折叠) 相邻的垂直方向外边距会发生重叠现象 兄弟元素 兄弟元素间的相邻垂直外边距会取两者之间的较大值(两者都是正值) 特殊情况: 如果相邻的外边距一正一负,则取两者的和 如果相邻的外边距都是负值,则取两者中绝对值较大的
兄弟元素之间的外边距的重叠,对于开发是有利的,所以我们不需要进行处理 |
2.行内元素以及行内块元素的外边距 行内元素垂直外边距无效(img除外),水平外边距相遇两个值会相加 行内块,设置垂直外边距,整行元素跟着发生变化
行内元素的盒模型 行内元素不支持设置宽度和高度 行内元素可以设置padding,但是垂直方向padding不会影响页面的布局 行内元素可以设置border,垂直方向的border不会影响页面的布局 行内元素可以设置margin,垂直方向的margin不会影响布局
display 用来设置元素显示的类型 可选值: inline 将元素设置为行内元素 block 将元素设置为块元素 inline-block 将元素设置为行内块元素 行内块,既可以设置宽度和高度又不会独占一行 table 将元素设置为一个表格 none 元素不在页面中显示
visibility 用来设置元素的显示状态 可选值: visible 默认值,元素在页面中正常显示 hidden 元素在页面中隐藏 不显示,但是依然占据页面的位置 |
3.外边距溢出
在特殊条件下,给子元素设置的上外边距,会作用到父元素上 特殊条件:1父元素没有上边框,2只有第一个子元素设置上边距时 解决方案: 1.为父元素增加上边框;弊端:元素实际占地高度变大 2.为父元素添加上内边距;弊端:元素实际占地高度变大 3.在父元素的第一个子元素位置添加一个空的<table></table> |
5.5内边距
内边距:元素边框与内容之间的空白间距 不会影响其他元素,但是会改变元素自己的占地尺寸,会变大
内边距的设置会影响到盒子的大小 背景颜色会延伸到内边距上 |
padding:value;设置4个方向的内边距 padding-top/right/bottom/left 定义单方向的内边距 取值 以px为单位的数字 % 简写方式 padding:value; 设置4个方向的内边距 padding:v1 v2; v1:上下 v2:左右 padding没有auto padding:v1 v2 v3: v1:上 v2:左右 v3:下 padding:v1 v2 v3 v4;上 右 下 左 |
5.6 box-sizing属性
设置盒子模型的计算方式 默认计算方式: 元素实际占地宽度=左外边距+左边框+左内边距+内容区域宽度+右内边距+右边框+右外边距 元素实际占地高度=上外边距+上边框+上内边距+内容区域高度+下内边距+下边框+下外边距 |
box-sizing取值 content-box 默认值,会采用默认计算方式 border-box 元素的尺寸(定义宽高),包含border,padding和内容区域宽高,宽度和高度用来设置整个盒子可见框的大小 元素实际占地宽度=左右外边距+设置的宽度width 元素实际占地高度=上下外边距+设置的高度height |
5.7 块级元素,行内元素,行内块
块级元素:独立成行,可以设置宽高,margin上下有效 |
行内元素:与其他行内元素和行内块,共用一行 宽高无效,margin上下无效 |
行内块:与其他行内元素和行内块,共用一行 可以设置宽高,margin上下有效 一行行内元素,其中一个设置了上下margin,整行都跟着移动 |
补充:文档流(normal flow)
网页是一个多层的结构,一层摞着一层
通过CSS可以分别为每一层来设置样式
作为用户来讲只能看到最顶上一层
这些层中,最底下的一层称为文档流,文档流是网页的基础
我们所创建的元素默认都是在文档流中进行排列
对于我们来元素主要有两个状态
在文档流中
不在文档流中(脱离文档流)
元素在文档流中有什么特点:
块元素
块元素会在页面中独占一行(自上向下垂直排列)
默认宽度是父元素的全部(会把父元素撑满)
默认高度是被内容撑开(子元素)
行内元素
行内元素不会独占页面的一行,只占自身的大小
行内元素在页面中自左向右水平排列,如果一行之中不能容纳下所有的行内元素
则元素会换到第二行继续自左向右排列(书写习惯一致)
行内元素的默认宽度和高度都是被内容撑开
六.默认样式:
通常情况,浏览器都会为元素设置一些默认样式
默认样式的存在会影响到页面的布局,
通常情况下编写网页时必须要去除浏览器的默认样式(PC端的页面)
*{
margin: 0;
padding: 0;
}
要让一个文字在父元素中垂直居中,只需将父元素的line-height设置为一个和父元素height一样的值
height:25px;
line-height:25px;
默认情况下,盒子可见框的大小由内容区、内边距和边框共同决定
完美方案:重置样式表:专门用来对浏览器的样式进行重置的
reset.css 直接去除了浏览器的默认样式
normalize.css 对默认样式进行了统一
七.背景
7.1.背景颜色
background-color: 取值 合法的颜色值 transparent;透明 注意:背景色的填充,默认从边框位置处开始 |
7.2.背景图片
background-image:url(资源路径) 可以同时设置背景图片和背景颜色,这样背景颜色将会成为图片的背景色 如果背景的图片小于元素,则背景图片会自动在元素中平铺将元素铺满 如果背景的图片大于元素,将会一个部分背景无法完全显示 如果背景图片和元素一样大,则会直接正常显示 |
7.3.背景图片的平铺
background-repeat: 取值 repeat 默认值 , 背景会沿着x轴 y轴双方向重复,平铺 repeat-x 水平方向平铺 repeat-y 垂直方向平铺 no-repeat 背景图片不重复,不平铺,只显示一张 |
7.4.背景图的定位
background-position:x y 取值 1.以px为单位的数字 指的是,图片在水平和垂直方向的偏移量 2.x% y% 50% 50%中间 0% 0% 左上 100% 100% 右下 3.关键字 x:left/center/right y: top/center/bottom
background-position 用来设置背景图片的位置 设置方式: 通过 top left right bottom center 几个表示方位的词来设置背景图片的位置 使用方位词时必须要同时指定两个值,如果只写一个则第二个默认就是center 通过偏移量来指定背景图片的位置: 水平方向的偏移量 垂直方向变量 |
7.5.背景图的尺寸
background-size: width height 取值: 1.以px为单位的数字 2.% 3.cover,填满容器,图片的宽高比不变,铺满整个容器的宽高,图片溢出的部分会被裁减掉 将背景图同比缩放,直到背景图完全覆盖容器,不留一丝空白,图片溢出的部分会被裁减掉 图片可能会显示不完整,但是容器完全被背景图充满 4. contain 图片自身宽高比不变,但是,要缩放到图片能够完全展示出来,所以容器会有空白区域
background-size 设置背景图片的大小 第一个值表示宽度 第二个值表示高度 如果只写一个,则第二个值默认是 auto
cover 图片的比例不变,将元素铺满 contain 图片比例不变,将图片在元素中完整显示 |
7.6.背景图的固定
background-attachment: 将背景图固定在网页某个位置,一直在可视的区域中显示,不会随着网页滚动条改变位置 取值:1.scroll 默认值,会随着网页滚动条改变位置 2.fixed 固定,不会随着网页滚动条改变位置 |
7.7.背景的简写方式
在一个属性中,指定背景多个值 属性:background 取值:color url repeat attachment position background:#faa url(‘08.png‘) no-repeat center center;
注意: background-size必须写在background-position的后边,并且使用/隔开 background-position/background-size background-origin background-clip 两个样式 ,orgin要在clip的前边 |
7.8 补充
1、设置背景的范围 background-clip 可选值: border-box 默认值,背景会出现在边框的下边 padding-box 背景不会出现在边框,只出现在内容区和内边距 content-box 背景只会出现在内容区
background-origin 背景图片的偏移量计算的原点 padding-box 默认值,background-position从内边距处开始计算 content-box 背景图片的偏移量从内容区处计算 border-box 背景图片的变量从边框处开始计算
2、图片闪烁问题 图片属于网页中的外部资源,外部资源都需要浏览器单独发送请求加载, 浏览器加载外部资源时是按需加载的,用则加载,不用则不加载。 比如a:link会首先加载,而hover和active会在指定状态触发时才会加载,出现图片闪烁现象。
解决图片闪烁的问题: 可以将多个小图片统一保存到一个大图片中,然后通过调整background-position来显示的图片 这样图片会同时加载到网页中 就可以有效的避免出现闪烁的问题 这个技术在网页中应用十分广泛,被称为CSS-Sprite,这种图我们称为雪碧图
雪碧图的使用步骤: 1.先在雪碧图中确定要使用的图标 2.测量图标的大小 3.根据测量结果设置一个元素的宽高 4.将雪碧图设置为元素的背景图片 5.设置一个偏移量以显示正确的图片
雪碧图的特点: 一次性将多个图片加载进页面,降低请求的次数,加快访问速度,提升用户的体验,只用于背景图 |
|
八.渐变gradient
8.1.什么是渐变
通过渐变可以设置一些复杂的背景颜色,可以实现从一个颜色向其他颜色过渡的效果 !!渐变是图片,需要通过background-image来设置
线性渐变,颜色沿着一条直线发生变化 linear-gradient() linear-gradient(red,yellow) 红色在开头,黄色在结尾,中间是过渡区域 线性渐变的开头,我们可以指定一个渐变的方向 to left to right to bottom to top xxx deg表示度数 linear-gradient(to top,red,yellow) 渐变可以同时指定多个颜色,多个颜色默认情况下平均分布, background-image: linear-gradient(red,yellow,#bfa,orange); 也可以手动指定渐变的分布情况 background-image: linear-gradient(red 50px//开始位置,yellow 100px, green 120px, orange 200px); repeating-linear-gradient() 可以平铺的线性渐变
多种颜色平缓变化的一种显示效果 |
8.2.渐变的主要因素---色标
色标,一种颜色以及他出现的位置 一个渐变至少有两个色标 |
8.3.渐变的分类
1.线性渐变,以直线的方向来填充渐变色 2.径向渐变,以圆形的方式实现渐变色 |
3.重复渐变,将线性渐变,或径向渐变 重复几次 |
1..线性渐变
background-image 取值: 新版本:linear-gradient(方向,色标1,色标2........) 色标的写法:颜色的合法值 位置的百分比 方向取值:to top/right/bottom/left 角度 按顺时针计算 0deg to top 90deg to right 180deg to bottom 270deg to left 旧版本写法:-浏览器内核-linear-gradient(方向,色标1,色标2....) 方向 top/right/bottom/left |
2.径向渐变
background-image:radial-gradient(半径 at 圆心,色标1,色标2......); 半径:以px为单位的数字 圆心:x y,以px为单位的具体数值 x% y% 元素的宽高占比 关键字 x:left/center/right y:top/center/bottom
默认情况下径向渐变圆心的形状根据元素的形状来计算的 正方形 --> 圆形 长方形 --> 椭圆形 我们也可以手动指定径向渐变圆心的形状 circle ellipse 也可以指定渐变的位置 radial-gradient(大小(形状) at 圆心, 颜色 位置 ,颜色 位置 ,颜色 位置) 大小(形状):circle 圆形 ellipse 椭圆 圆心: 1、top right left center bottom 2、x y,以px为单位的具体数值
|
3.重复线性渐变
repeating-linear-gradient(to right,#faa 0px,#ffa 50px); 注意在重复渐变中,色标的位置,要给绝对值数字,不要用% |
4.重复的径向渐变
repeating-radial-gradient(50px at center center,#060606 0px,#af8bd8 20px,#292727 35px); |
九.浏览器兼容性
各个浏览器新版本都渐变 对于不支持的旧版本,可以添加浏览器内核前缀的方式,做兼容,让浏览器支持 chrome&safari: -webkit- firefox:-moz- ie:-ms- opera: -o- background: -webkit-linear-gradient(left, #006699 0%,#f00 25%, #990066 50%,#ff0 75%,#996600 100%); |
十.文本格式化(重点******)
10.1.字体属性
1.指定字体的类型(建议浏览器使用该字体)10 font-family:"类型1","类型2".... 可以同时指定多个字体,多个字体间使用,隔开 字体生效时优先使用第一个,第一个无法使用则使用第二个 以此类推
补充:font-face可以将服务器中的字体直接提供给用户去使用 @font-face{ /*指定字体的名字*/ font-family:‘myfont‘; /*服务器中字体的路径*/ src:url(‘./font/ZCOOLKuaiLe-Regular.ttf‘) format("truetype"); } font-family:myfont; 缺点:1.加载速度 2.版权 3.字体格式 |
2.字体大小 font-size 以px、pt为单位的数字 em 相当于当前元素的一个font-size rem 相对于根元素的一个font-size |
3.字体加粗 font-weight: bold/normal/lighter/bolder 无单位的数字 100-1000整百数 常用400-900 |
4.字体样式 font-style Normal:正常的 Italic:斜体的 |
5.小型大写字母 font-variant: normal small-caps; |
6.字体属性的简写方式 font:style variant weight size family font:italic small-caps bold 30px "黑体"; 简写方式最少要有size和family. font: 字体大小/行高 字体族 行高 可以省略不写 如果不写使用默认值 |
10.2.文本格式化
1.文本颜色 color:合法的颜色值 |
2.文本的水平对齐方式 text-align left/center/right/justify(两端对齐) 文本的垂直对齐方式 vertical-align 设置元素垂直对齐的方式(让子元素与父元素进行对齐方式) 可选值: baseline 默认值 基线对齐 top 顶部对齐 bottom 底部对齐 middle 居中对齐 图片与文本一致,默认是基线对齐。 |
3.行高 定义一行数据的高度 如果行高大于字体本身的大小,该行文本在行高内成垂直居中的显示效果 line-height: 以px为单位的数字,一般与容器的高相同 无单位数字,line-height:2; 是字体大小的倍数 行高(line height) 行高定义一行数据的高度 字体框 字体框就是字体存在的格子,设置font-size实际上就是在设置字体框的高度 行高会在字体框的上下平均分配
可以通过line-height来设置行高 行高可以直接指定一个大小(px em) 也可以直接为行高设置一个整数 如果是一个整数的话,行高将会是字体的指定的倍数 行高经常还用来设置文字的行间距 行间距 = 行高 - 字体大小 可以将行高设置为和元素高度一样的值,使单行文字在一个元素中垂直居中 Line-height对浮动元素不起作用 |
4.线条的修饰 text-decoration 1.none 没有线条,去掉a标签的下划线 2.overline 上划线 3.underline 下划线 4.line-through 删除线 |
5.首行缩进
text-indent: 以px为单位的数字 |
6. 文本的阴影
text-shadow: h-shadow v-shadow blur color; |
7、 white-space 设置网页如何处理空白
可选值:
normal 正常
nowrap 不换行
pre 保留空白
设置省略号:
.box2{
width: 200px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
十一.图标字体(iconfont)
在网页中经常需要使用一些图标,可以通过图片来引入图标
但是图片大小本身比较大,并且非常的不灵活
所以在使用图标时,我们还可以将图标直接设置为字体,
然后通过font-face的形式来对字体进行引入
这样我们就可以通过使用字体的形式来使用图标
fontawesome 使用步骤
1.下载 https://fontawesome.com/
2.解压
3.将css和webfonts移动到项目中
4.将css中的all.css引入到网页中
5.使用图标字体
(1) 直接通过类名来使用图标字体
class="fas fa-bell"
class="fab fa-accessible-icon"
(2)通过伪元素来设置图标字体
1.找到要设置图标的元素通过before或after选中
2.在content中设置字体的编码
3.设置字体的样式
fab
font-family: ‘Font Awesome 5 Brands‘;
fas
font-family: ‘Font Awesome 5 Free‘;
font-weight: 900;
li::before{
content: ‘\f1b0‘;
/* font-family: ‘Font Awesome 5 Brands‘; */
font-family: ‘Font Awesome 5 Free‘;
font-weight: 900;
}
(3) 通过实体来使用图标字体:&#x图标的编码;
<span class="fas">?</span>
阿里字体库:
将图标加入购物车,在购物车中将图标添加到项目中,打开图标管理,将项目下载到本地,将下载的项目中的图标复制到本地项目里面。
(1) <i class="iconfont"></i>
<i class="iconfont"></i>
<i class="iconfont"></i>
(2) <i class="iconfont icon-qitalaji"></i>
(3) 使用伪元素
p::before{
content: ‘\e625‘;
font-family: ‘iconfont‘;
font-size: 100px;
}
十二.表格的样式
12.1.表格的常用属性
之前学习的样式,在表格中,基本都可以使用 1.边框属性 table和td 2.边距属性 table都能使用,td没有margin 3.尺寸属性 4.文本格式属性 font-* text-* line-height 5.背景属性 颜色 图片 渐变 6.vertical-align:top/middle/bottom 要写在td才生效 |
12.2.表格特有的属性
1.边框合并 border-collapse 1.separate 默认,边框分离的模式 2.collapse 边框合并 |
|
2.边框的边距 设置单元格与单元格之间的距离,必须保证border-collapse:separate; border-spacing 1.取值一个value,垂直和水平距离相同 2.取值两个value1 value2. value1:水平距离,value2:垂直距离
补充: 1、如果表格中没有使用tbody而是直接使用tr, 那么浏览器会自动创建一个tbody,并且将tr全都放到tbody中 tr不是table的子元素 2、默认情况下元素在td中是垂直居中的 可以通过 vertical-align,text-align 来修改。 3、将元素设置为单元格 td display: table-cell; 此时该元素里面的文字支持text-align,但是该元素里面的元素不支持该属性。可以使用margin,也可以使用 vertical-align。 |
|
3.标题的位置 caption-side top/bottom |
|
4.表格的显示规则,告诉浏览器,我这张表格如果渲染,td尺寸的计算方式 table-layout: 1.auto 默认值,自动表格布局,列的尺寸实际是由内容决定的 2.fixed 固定表格的布局,列的尺寸由设置的值决定 需要table有尺寸,td有尺寸 |
|
自动布局auto |
固定布局fixed |
单元格的大小会适应内容 |
单元格尺寸取决于设定的值 |
表格复杂时,加载的速度慢(缺点) |
任何情况下会加速加载表格(优点) |
布局会比较灵活(优点) |
布局会比较死板(缺点) |
适用于不确定每列大小,并且表格不太繁琐的时候 |
当确定每列尺寸的时候使用 |
十三.定位(重点*********************)
13.1.什么是定位
元素在页面中的位置
定位(position) 定位是一种更加高级的布局手段 通过定位可以将元素摆放到页面的任意位置 使用position属性来设置定位 可选值: static 默认值,元素是静止的没有开启定位 relative 开启元素的相对定位 absolute 开启元素的绝对定位 fixed 开启元素的固定定位 sticky 开启元素的粘滞定位
相对定位: 当元素的position属性值设置为relative时则开启了元素的相对定位 相对定位的特点: 1.元素开启相对定位以后,如果不设置偏移量当前页面不会发生任何的变化 2.相对定位是参照于元素在文档流中的位置(最开始的位置)进行定位的 3.相对定位会提升元素的层级 4.相对定位不会使元素脱离文档流,原位置仍旧保留。 5.相对定位不会改变元素的性质块还是块,行内还是行内
偏移量(offset) 当元素开启了相对定位以后,可以通过偏移量来设置元素的位置,且不会影响其他元素的位置。 注意:如果通过设置margin改变元素位置,会影响其他元素的位置。 top 定位元素和定位位置上边的距离 bottom 定位元素和定位位置下边的距离 定位元素垂直方向的位置由top和bottom两个属性来控制 通常情况下我们只会使用其中一 top值越大,定位元素越向下移动 bottom值越大,定位元素越向上移动
left 定位元素和定位位置的左侧距离 right 定位元素和定位位置的右侧距离 定位元素水平方向的位置由left和right两个属性控制 通常情况下只会使用一个 left越大元素越靠右 right越大元素越靠左
绝对定位 当元素的position属性值设置为absolute时,则开启了元素的绝对定位 绝对定位的特点: 1.开启绝对定位后,如果不设置偏移量该元素的位置不会发生变化 2.开启绝对定位后,元素会从文档流中脱离,会影响其他元素位置。 3.绝对定位会改变元素的性质,行内变成块,块的宽高被内容撑开 4.绝对定位会使元素提升一个层级 5.绝对定位元素是相对于其包含块进行定位的
包含块( containing block ) 正常情况下: 包含块就是离当前元素最近的祖先块元素 <div> <div></div> </div> <div><span><em>hello</em></span></div>
绝对定位的包含块: 包含块就是离它最近的开启了定位的祖先元素, 如果所有的祖先元素都没有开启定位则根元素就是它的包含块
html(根元素、初始包含块)
固定定位: 将元素的position属性设置为fixed则开启了元素的固定定位 固定定位也是一种绝对定位,所以固定定位的大部分特点都和绝对定位一样 唯一不同的是固定定位永远参照于浏览器的视口进行定位 固定定位的元素不会随网页的滚动条滚动
粘滞定位 当元素的position属性设置为sticky时则开启了元素的粘滞定位 粘滞定位和相对定位的特点基本一致, 不同的是粘滞定位可以在元素到达某个位置时将其固定
水平布局 left+margin-left+border-left+padding-left+width+padding-right+border-right+margin-right+right=包含块的内容区的宽度
当我们开启了绝对定位后: 水平方向的布局等式就需要添加left和right两个值 此时规则和之前一样只是多添加了两个值: 当发生过度约束: 如果可设置auto的值中没有auto则自动调整right值以使等式满足 如果有auto,则自动调整auto的值以使等式满足
可设置auto的值 Margin width left right
因为left 和 right的值默认是auto,所以如果不指定left和right 则等式不满足时,会自动调整这两个值
垂直方向布局的等式的也必须要满足 top + margin-top/bottom + padding-top/bottom + border-top/bottom + height = 包含块的高度
元素水平垂直居中: position:absolute; margin:auto; left:0; right:0; top:0; bottom:0;
对于开启了定位元素,可以通过z-index属性来指定元素的层级 z-index需要一个整数作为参数,值越大元素的层级越高 元素的层级越高越优先显示
如果元素的层级一样,则优先显示结构上靠下的元素 祖先的元素的层级再高也不会盖住后代元素 |
十四.浮动
14.1 概念
浮动特点 1.元素一旦浮动起了,脱离文档流 不占页面空间,其它未浮动元素会上前补位 2.浮动元素会停靠在父元素的左边或者右边 或其它已经浮动元素的左/右的边缘 3.浮动解决多个块级元素在同一行内显示的问题 |
语法 属性 float 取值 left:左浮动,元素浮动起来后,停靠在父元素的左侧,或者往左挨着已浮动元素 right:右浮动,元素浮动起来后,停靠在父元素的右侧,或者往右挨着已浮动元素 none默认值,元素不浮动
注意:元素设置浮动以后,水平布局的等式便不需要强制成立 元素设置浮动以后,会完全从文档流中脱离,不再占用文档流的位置, 所以元素下边的还在文档流中的元素会自动向上移动
浮动的特点: 1、浮动元素会完全脱离文档流,不再占据文档流中的位置 2、设置浮动以后元素会向父元素的左侧或右侧移动, 3、浮动元素默认不会从父元素中移出 4、浮动元素向左或向右移动时,不会超过它前边的其他浮动元素 5、如果浮动元素的上边是一个没有浮动的块元素,则浮动元素无法上移 6、浮动元素不会超过它前面的浮动的兄弟元素,最多最多就是和它一样高
|
14.2 浮动元素引发的特殊情况
1.当父容器横向显示不下所有浮动元素的时候,最后一个元素将换行显示 1.1默认情况下,最后一个元素会优先显示在最高的位置,再往左排列 1.2会发生浮动元素占位的情况,浮动元素根据浮动方向,占据方向之上的位置,不允许最后一个元素占用 |
2.浮动对默认宽度的影响 块级元素不写宽度,宽度默认是父级元素的100% 元素一旦浮动起来,宽度以内容为准 前题,不设置width |
3.元素一旦浮动起来,就变为块级元素,允许修改尺寸,设置垂直外边距 |
4.文本,行内元素,行内块,是不会被浮动元素压在下方的,会巧妙避开,环绕着浮动元素显示 |
5.脱离文档流的特点: 块元素: 1、块元素不在独占页面的一行 2、脱离文档流以后,若没有设置元素宽高,则块元素的宽度和高度默认都被内容撑开
行内元素: 行内元素脱离文档流以后会变成块元素,特点和块元素一样
脱离文档流以后,不需要再区分块和行内了 |
清除浮动
元素一旦浮动之后,会对后续的元素带来一定的影响,后续元素会上前补位,如果不希望后续上前补位,可以给后续元素添加清除浮动的属性 clear: 取值 left:清除左浮动元素对我带来的影响 right:清除右浮动元素对我带来的影响 both: 清除所有浮动元素对我带来的影响 |
浮动元素对父元素高度带来的影响(高度坍塌)
高度塌陷的问题: 在一般情况下,父元素的高度默认是被子元素撑开的, 但是当子元素浮动后,其会完全脱离文档流,子元素从文档流中脱离 将会无法撑起父元素的高度,导致父元素的高度丢失
父元素高度丢失以后,其下的元素会自动上移,导致页面的布局混乱 所以高度塌陷是浮动布局中比较常见的一个问题,这个问题我们必须要进行处理!
BFC(Block Formatting Context) 块级格式化环境 BFC是一个CSS中的一个隐含的属性,可以为一个元素开启BFC 开启BFC该元素会变成一个独立的布局区域,与其他的区域不同。 元素开启BFC后的特点: 1.开启BFC的元素不会被浮动元素所覆盖,但是会跑到浮动元素旁边。 2.开启BFC的元素子元素和父元素外边距不会重叠 3.开启BFC的元素可以包含浮动的子元素
可以通过一些特殊方式来开启元素的BFC: 1、设置元素的浮动(不推荐) 2、将元素设置为行内块元素(不推荐) 3、将元素的overflow设置为一个非visible的值 常用的方式 为元素设置 overflow:hidden 开启其BFC 以使其可以包含浮动元素
如果我们不希望某个元素因为其他元素浮动的影响而改变位置, 可以通过clear属性来清除浮动元素对当前元素所产生的影响 clear 作用:清除浮动元素对当前元素所产生的影响 可选值: left 清除左侧浮动元素对当前元素的影响 right 清除右侧浮动元素对当前元素的影响 both 清除两侧中最大影响的那侧 原理: 设置清除浮动以后,浏览器会自动为当前元素添加一个与浮动元素高度相同的上外边距, 以使其位置不受其他元素的影响
解决父元素高度塌陷问题 父元素::after{ content: ‘‘; display: block; clear: both; }
解决外边距重叠的问题 .父元素::before{ content: ‘‘; display: table; }
clearfix 这个样式可以同时解决高度塌陷和外边距重叠的问题,当你在遇到这些问题时,直接使用clearfix这个类即可 .clearfix::before, .clearfix::after{ content: ‘‘; display: table; clear: both; }
块级元素不写高度,他的高度是根据内容判定的 如果内部元素都浮动了,内部元素都脱了默认文档流 父级元素就失去了高度------高度坍塌 解决方案: 1.给父级元素添加高度 弊端:不是每次都知道具体的高度是多少 2.设置父级元素也浮动 弊端:会影响父元素后面的其它元素 3.给父元素设置overflow:hidden/auto 弊端:如果内容想要溢出显示,显示不了。 4.在父元素中追加一个空的块级元素,只设置clear:both |
|
三.显示
1.显示方式
决定了元素在网页中表现形式(块级,行内,行内块,table) 语法 display 取值: 1.none 不显示元素,隐藏 2.block 让元素表现为块级 块级元素特征,独占一行,可以设置尺寸以及上下外边距 3.inline 让元素表现为行内 行内元素特征,多个元素一行显示,不能设置宽高以下上下外边距 4.inline-block 让元素表现为行内块 行内块特征,多个元素一行显示,可以设置尺寸以及上下外边距 5.table 让元素表现为table table的特征:尺寸以内容为准,独占一行,允许修改尺寸 |
2.显示的效果
属性:visibility 取值 visible/hidden |
visibility:hidden和display:none的区别 visibility:hidden隐藏,不脱离默认文档流,依然占位 display:none 隐藏,脱离了默认文档,不占页面位置 |
3.透明度
opacity:0~1 1是不透明,0是全透明 |
opacity和rgba的区别 opacity作用与元素,当一个元素设置了opacity之后, 这个元素本身,以及所有子元素,与颜色相关的属性,都会受到影响 rgba(0~255,0~255,0~255,0.5)只会改变你设定的这个颜色透明度 |
4.垂直对齐
vertical-align 使用在table中,取值top/middle/bottom 使用在img中,取值 top/middle/bottom/baseline 控制图片与两边文字垂直对齐方式 |
5.光标
改变鼠标悬停在元素时的样式 cursor: 取值 1.default 箭头 2.pointer 小手 3.crosshair + 4.text I 5.wait 等待 6.help 帮助 |
四.列表
列表标识 list-style-type none disc circle square |
列表标识的位置 list-style-position:outside/inside |
列表项引用图片 list-style-image:url() |
简写方式 list-style:type url() position; 常用的方式 list-style:none; |