CSS3知识点复习与总结

本文详细总结了CSS3的相关知识点,包括选择器、样式声明、盒模型、定位、浮动等核心概念,深入探讨了层叠规则、继承、属性值计算过程等。适合前端开发者巩固和提升CSS3技能。

CSS3知识点复习与总结

文章目录

一、术语解释

CSS规则 = 选择器 + 声明块

选择器:用来选中元素

  1. 元素选择器:使用元素名选择(h1{}
  2. ID选择器:指定元素ID进行选择(#id{}
  3. 类选择器:选中所有声明此类名的元素(.red{}
    声明块:出现在大括号中,用来声明样式

二、CSS书写位置

1、内部样式表

通常书写在HTML页面的<head>中,其实写在<body>中也可以,但要注意写在正文前面,先加载样式,后加载内容。
渡一袁进(比喻鬼才):样式如果写在body最后,加载网页就好像先出来一个没有化妆的,过了一会才化好妆,视觉体验极差


在代码量少的时候,200行以内,可以使用内部样式表,可以提高第一次访问的响应速度,因为少加载了一个CSS文件。

<style>
        h1{}
</style>

2、内联样式表,元素样式表

<h1 style="color: gray; background-color: hotpink">现在开始添加样式</h1>

3、外部样式表

将样式书写在独立的CSS文件中

<link rel="stylesheet" href="css/1.css">

为什么推荐使用外部样式表

  1. 外部样式表可以解决多页面样式重复的问题(便于维护)
  2. 有利于浏览器缓存,提高页面响应速度
  3. 有利于代码分离(HTML和CSS),更容易阅读和维护

三、常见样式声明

color(元素内部文字颜色)

  • 预设值,常见的颜色单词,如red,blue
  • 三原色,色值:(光学三原色,红绿蓝),每个颜色0-255,组合成色值.
  • RGB表示法rgb(0,255,0)
  • hex16进制表示法:##FF4400(红绿蓝)

background-color(元素背景颜色)

background-color: #008c8c;

font-size(元素内部文字尺寸大小)

用到两种单位:像素px、em

  1. 像素px,绝对单位
  2. em,相对单位,相对于父元素的字体大小

每个元素都必须有字体大小,如果没有声明,则使用父元素的字体大小,如果没有父元素(HTML),则使用基准字号,基准字号在浏览器设置中。

font-weight(文字粗细程度)

可以使用数字和预设值(单词),默认值为“normal=400”

  1. 数字:默认为400,加粗为700
  2. 预设值:常用normal,bold
  3. strong也有加粗的效果
font-weight: bold;


<strong>表示重要的不能忽略 的内容</strong>

font-family(文字类型)

字体类型必须用户计算机中存在才有效,因此通常匹配多个字体
通常在末尾加上 sans-serif,如果其他字体都没有,则使用电脑上有的非衬线字体

font-family: consolas,'Times New Roman', Times, serif,微软雅黑,sans-serif;

font-style(字体样式,通常用来设置斜体)

i元素默认倾斜;但是实际使用中,通常用它表示一个图标

em 强调内容,样式为斜体

font-style: italic;

<i>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Suscipit, magni.</i>
<em>表示强调的内容,表示为斜体</em>

text-decoration(文本修饰,给文本加线)

  1. none,用于去掉超链接的下划线
  2. line-through,删除线
  3. underline,加下划线

del元素表示错误的内容,样式里面有删除线
s元素表示已经过期的信息,可以在商品原价上用

text-decoration: underline;

text-indent(首行文本缩进)

style="text-indent:2em "     #缩进两个中文字符宽度

line-height(行文本高度)

值越大,每行文本之间的距离就越大
设置为容器的高度,可以让单行文本垂直居中
行高可以设置为纯数字,表示当前元素字体大小的倍数

line-height: 1.5;

width和height(宽度和高度)

letter-spacing(文字间隙)

letter-spacing: 1em;

text-align(元素内部文字水平排列方式)

text-align: center

样式补充(透明度、盒子隐藏、鼠标、背景图)

透明度、鼠标样式

设置整个元素的透明度(包含所有子元素,文字,都会变得透明)
p{
    background-color: black;
    opacity: .5;
}

在颜色位置设置阿尔法通道改变透明度

鼠标样式
cursor: pointer;
cursor:url("img/1.ico");

盒子隐藏

.box1{
    display: none;
    #改变display属性,不再是盒子了

	visibility: hidden;
	#这个属性是生成盒子,但是显示隐藏,一个隐身的盒子
}

背景图片

  • img术语HTML的概念(当图片属于网页内容的时候,必须使用img元素)
  • 背景图属于CSS的概念(当图片仅用于美化页面时,必须使用背景图)

背景图片涉及的CSS属性

background-image: url();

#控制图片重复
background-repeat: no-repeat;

#保证图片尺寸完整显示
background-size: contain;
cover:保证比例不变,撑满,会有部分显示不出来

#尺寸:支持百分比和像素
background-size: 100% 100%;

#设置位置
background-position: center;

#背景图相对于视口固定
background-attachment: fixed;

四、选择器

简单选择器

1、ID选择器
#p1{
    color: red;
}
2、元素选择器
h2{
    background-color: #008c8c;
    text-align: center
}
3、类选择器
.blue{
    background-color: #008c8c;
}
4、通配符选择器(选中所有元素)
*{
    color: yellow;
}
5、属性选择器(根据属性名和属性值选中元素)
/* 选中所有具有href属性的元素 */
[href]{
    color: red;
    text-decoration-line: none;
}

/* 属性加属性值 */
[href="qq"]{
    color: skyblue;
}
6、伪类选择器(选中某些元素的某种状态)
  1. hover 鼠标悬停状态(常用,很多元素都可以用,悬停上去变大)
  2. active 鼠标按下状态,激活状态
  3. link 超链接未被访问时的状态
  4. visited 超链接被访问过的状态

first-child / last-child / first_of_-type / nth-child /nth-of-type

li:first-child	选中子元素中第一个li元素  , 注意中间没有内容是  并  的意思
li:first-child{
    color: red;
}

选中ul下面的第一个li
.box1 ul :first-child{
    color: blue;
}

.box1 ul :nth-child(2){
    color: red;
}

.box1 ul li:nth-of-type(2){
    color: red;
}


书写顺序:link、visited、hover、active

a:link{
    text-decoration: none;
    color: black;
}

a:visited{
    color: skyblue;
}

a:hover{
    color: red;
    font-size: 2em;
}

a:active{
    color: blue;
}
  • focus ------- 聚焦时的样式
  • checked — 单选或者多选被选中时的样式
input:focus{
    outline: none;
    border: 5px solid red;
}

单选多选框样式无法控制,但是可以使用checked来控制单选框后面的label的样式
7、伪元素选择器

在某个元素的内部的最前面或最后面增加一个子元素并设置样式

h2::before{
    content: "~~~~~~《";
    color:red;
}
h2::after{
    content: "》~~~~~~";
    color:red;
}

first-letter / first-line / selection
selection:选中被用户框选的文字

p::first-letter{
    font-size: 2em;
    color: red;
}

p::first-line{
    color: #008c8c;
}

p::selection{
    color: skyblue;
}

选择器的组合

1、并且(两个选择器连着写)
p#p1{
    color:red;
}
2、后代元素(加空格)(找儿子找孙子都行)
div h2{
    color:red;
}

#p1 li{
    color:#008c8c;
}

3、子元素(a>b)(b必须是a的儿子)
4、相邻兄弟元素(a+b)
h2+p{
    color:#008c8c;
}
5、后面出现的所有兄弟元素(a~b)
.blue h2~p{
    color:red;
}

选择器的并列(多个选择器,用“,”分隔)(a,b都使用同一个样式)

.blue h2~p,h2{
    color:red;
}

五、层叠(解决声明冲突的过程)

声明冲突:同一个样式,多次应用到同一个元素

层叠的浏览器自动处理过程

1、比较重要性(权重从高到低)
  1. 作者样式表中加了!important的属性h2{background-color: #008c8c !important;}
  2. 作者样式表中的普通样式
  3. 浏览器默认样式表
2、比较特殊性 (看选择器)

总体规则:选择器选中的范围越窄,越特殊(类和ID选择器 总是 比 元素选择器 特殊)
具体规则:通过选择器,计算出一个四位数(XXXX)

  1. 千位:如果是内联样式,记1,否则,记0
  2. 百位:等于选择器中所有ID选择器的数量,可以有多个ID
  3. 十位:等于选择器中所有类选择器、属性选择器、伪类选择器的数量
  4. 个位:等于选择器中所有元素选择器、伪类选择器的数量(body a 选择器(0002) 大于 a选择器(0001))
3、比较源次序(代码书写靠后的胜出)
应用
  1. 重置样式表(书写作者样式表,覆盖浏览器默认样式表)(网上有专用的重置样式表)
  2. 爱恨法则(lvha)(link、visited、hover、active)

六、继承(子元素会继承父元素的某些CSS属性)

通常跟文字内容相关的属性,可以继承


七、属性值的计算过程

浏览器是一个元素一个元素依次渲染
渲染每个元素的前提条件是:该元素的所有CSS属性必须都有值

+-----------------------------------------------------------+
一个元素,从属性都没有值到全部有值的计算过程   叫做   属性值的计算过程
+-----------------------------------------------------------+

在这里插入图片描述

声明值 = 开发者写的 + 浏览器默认样式

1、确定声明值:参考样式表中没有冲突的声明,作为CSS属性值

2、 层叠冲突:对样式表有冲突的声明使用重叠规则,确定CSS属性值

3、使用继承:对仍然没有属性的值,若可以继承,则继承父元素的值

4、使用默认值:对仍然没有属性的值,使用默认值

小问题:为什么 div 里面的 a 元素不会继承 div 的color属性值,而p元素会?
答:p元素在确定声明值这一步没有color,只能继承父元素的
------a元素在第一步确定声明值的过程中,使用了浏览器的默认样式,所以color属性已经确定
*****由此可知,更改a元素的某些属性必须进行声明。

#强制继承
a{
	color:inherit;
}

#使用默认值
background-color: initial;

八、盒模型

box,盒子,每个元素都会在页面中生成一个矩形区域

  1. 行盒:display属性 = inline的元素
  2. 块盒:display属性 = block的元素

display默认值为inline

浏览器自带属性将所有容器元素都设为block

盒子的组成部分

  1. 内容 content (width、height,设置盒子内容的宽高)
  2. 填充 padding ( padding-left;padding-right;padding-top;padding-bottom;
  3. 边框 border (边框样式+宽度+颜色)
  4. 外边距 margin
h2{
    color:red;
    background-color: skyblue;
    
    width: 100px;
    height: 100px;

    border-style:solid;
    border-width: 10px;
    border-color: #008c8c;
    
    padding-left: 5px;
    padding-right: 5px;
    padding-top: 5px;
    padding-bottom: 5px;
}

盒模型的应用

1、改变宽高范围(box-sizing)

默认情况下,width和height设置的是内容盒的宽高

在衡量设计稿尺寸的时候往往使用的是边框盒

以前方法是精确计算
现在CSS3采用 box-sizing,用来影响width和height的影响范围

#设置为border-box后,width和height将成为盒子整体的宽高
box-sizing: border-box;
2、改变背景覆盖范围(background-clip)

默认情况下,背景覆盖边框盒
可以使用background-clip改变背景的覆盖范围
在这里插入图片描述

3、溢出处理(overflow)

overflow,控制内容溢出边框盒后的处理方式

overflow: hidden;
4、断词规则(word-break)
  • normal:对于CJK字符(中日韩),在字符后面截断,对于非CJK,在单词后面截断
  • break-all:所有的都在字符处截断
  • keep-all:都在单词截断,中文没有空格,无法使用
5、空白处理(white-space)
overflow: hidden;
white-space: normal;#不换行
text-overflow: ellipsis;

行盒盒模型

常见的行盒元素:span、strong、em、i、img、video、audio

特点
  1. 行盒跟着内容延伸
  2. 行盒不能设置宽高(要调整宽高,只能调整字体大小,字体类型,行高)
  3. 内边距(填充区),在水平方向上有效,垂直方向只会影响背景,不会实际占据空间
  4. 边框和内边距一样
  5. 外边距也一样,都是左右有效,而上下无效,
  6. 结论:调整上下只能设置行高
行块盒(指display属性 = inline-block 的盒子)
  1. 不独占一行
  2. 盒模型中所有尺寸都有效
可替换元素 和 非可替换元素

非可替换元素:大部分元素,页面上显示的效果,取决于元素内容
可替换元素:少部分元素,页面显示结果取决于元素的属性

可替换元素:img、video、audio

可替换元素类似于行块盒


九、常规流

视觉格式化模型:页面中的多个盒子的排列规则(布局规则)

视觉格式化模型的三种方式

  1. 常规流
  2. 浮动
  3. 定位

常规流布局(文档流)

所有元素,默认情况下,都属于常规流布局,即没有经过作者改动

  • 总体规则:
  • 块盒独占一行
  • 行盒依次排列

(包含块–containning-block):-----每个盒子都有自己的包含块,包含块决定了盒子的排列区域。
绝大部分情况下,每个盒子的包含块为其父元素的内容盒

块盒规则1:水平方向上
  • 每个块盒的总宽度,必须刚好等于包含块的宽度(即 margin、border、padding、content的总宽度 = 父元素内容盒的宽度)
  • 宽度的默认值为auto(将剩余空间全部吸收)
  • 若宽度、边框、内边距、外边距计算后,仍然有剩余空间,则该空间被margin-right全部吸收
  • 在常规流中,块盒在其包含块中居中可以定宽,然后左右margin使用margin:auto;
块盒规则2:垂直方向上的auto值
  • height:auto 适应内容的高度
  • margin:auto 就是0
百分比取值
  • padding、宽高、margin可以设置为百分比
  • 以上所有的百分比相对于包含块的宽度(只有宽度为标准值,高度不算)
  • 高度的百分比设置:包含块的高度是否取决于子元素的高度,设置百分比无效
  • 若包含块的高度不取决于子元素的高度,则百分比相对于父元素的高度
上下外边距的合并

两个常规流块盒,上下外边距相邻,会进行合并(两个外边距取最大值)

  • 同级相邻的两个div如此
  • 父子元素上下外边距相邻,也会合并,注意是相邻(即中间没有隔开的东西,可以设置border隔开)

十、浮动

应用场景

  1. 文字环绕
  2. 横向排列

浮动的基本特点

修改float属性值为:

  1. left,元素靠上靠左排列
  2. right,元素靠上靠右排列
  3. 默认值为none

特点

  1. 当一个元素浮动后,它必定为块盒
  2. 浮动元素的包含块和常规流一样,是父元素的内容盒

盒子尺寸特点

  1. 宽度为auto时,表示适应内容的宽度
  2. 高度为auto时,和常规流一样,同样是适应内容的高度
  3. margin为auto时,始终为0
  4. 边框、内边距、百分比设置与常规流相同

浮动排列

  1. 左浮动的盒子靠上靠左排列
  2. 右浮动的盒子靠上靠右排列
  3. 浮动盒子在包含块中排列时,会避开常规流盒子
  4. 常规流块盒在排列时,无视浮动盒子
  5. 行盒在排列时,会避开浮动盒子(img float 文字环绕)
  6. 外边距合并不会发生

问题(高度坍塌)

根源

因为常规流盒子的自动高度是适应内容,在计算时不会考虑浮动盒子

即父常规流盒子认为:常规流子元素是我亲儿子,你要多大地儿,我就开辟多大地儿
浮动子元素不是我亲儿子,我有地儿你可以用,我要是没有,也懒得给你再开了

解决方案:使用clear属性

  1. clear(清除浮动)
  2. 默认值为none
  3. left:清除左浮动,该元素必须出现在前面所有左浮动盒子的下方(如果你有兄弟在天上飞,你不能无视他
  4. right:该元素必须出现在前面所有右浮动盒子的下方
  5. both:所有
#修复方式
用一个隐身的常规流盒子放在所有的浮动盒子下方
clear:both;

理解:父盒子有一个亲儿子,亲儿子最小,但是亲儿子注重兄弟情义(使用了clear:both),他不管亲生不亲生,要求自己的土地必须在所有兄弟的下面,因为他是亲儿子,父盒子必须让他在自己的土地范围内,没有办法,只好开辟大片土地。


十一、定位(手动控制元素在包含块中的精准位置)

position属性

  1. static:静态、不定位
  2. relative:相对定位
  3. absolute:绝对定位
  4. fixed:固定定位

定位元素会脱离文档流(相对定位除外)
一个脱离了文档流的元素:文档流中的元素摆放时,会忽略脱离了文档流的元素

相对定位

不会导致元素脱离文档流,只是让元素在原来位置上偏移

可以通过四个属性设置其相对偏移位置

  1. left
  2. right
  3. top
  4. bottom

相对定位,盒子不会影响其他盒子

绝对定位

包含块变化:找祖先元素中第一个定位元素,该元素的填充盒为其包含块

绝对定位第一件事是要找爹,往上翻辈分,第一个有定位的元素就是爹,如果没有,就是整个网页

常用来一个元素盖在另一个元素上面

固定定位

特点:和绝对定位的包含块不一样

固定定位的包含块为 视口

无论写到哪个犄角旮旯,他爹永远是视口
常用来 回到顶部 顶部的导航栏

定位体系下的居中

某个方向居中

  1. 定宽(高)
  2. 左右设置为0
  3. margin设置为auto

多个定位元素重叠时

堆叠上下文

使用z-index   #  另一根坐标系

z-index还可以设置为负数,如果是负数,遇到常规流和浮动元素,它会被覆盖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值