CSS基础学习笔记
元素表达语义,样式使可变的
不需要记,但是需要时刻记着查css的文档
-
CSS
- cascading style sheets
- 层叠样式表
用于定义网页样式和布局的样式表语言,用于指定页面中各元素的字体,大小,间距等
- 内部样式表(选择器):样式表保存在
style
样式中 - 内联样式表:在标签中使用
style
属性 - 外联样式表:引入为外部的
css
文件
外联样式表的引入:<link>
标签在<head>
内引入
语法结构(选择器)
CSS通常由选择器、属性和属性值组成,多个规则可以组合在一起,同时应用多个样式。
类名是自定义的。
选择器
{
属性1:属性值1;
属性2:属性值2;
...
}
- 选择器的声明可以写无数条属性
- 声明的每一行属性都需要以英文分号结尾
- 声明的所有属性和值都以键值对形式出现。
- 选择器:选择要应用样式的标签
<!--p标签选择器-->
p
{
color:blue;
font-size:16px;
}
选择器类型:
- 元素选择器
- 类选择器:根据类名选择
- ID选择器:根据ID选择
- 子元素选择器
- 通用选择器
- 后代选择器(包含选择器)
- 并集选择器(兄弟选择器)
- 伪类选择器
- 标签属性选择器
<!-- 元素选择器 -->
<!--对所有h1标签选择-->
<style>
h1
{
color:yellow;
}
</style>
<!--类选择器-->
.类名
{
}
<!--id选择器-->
#ID名
{
}
<!--通用选择器,选中所有元素-->
*
{
}
<!-- 标签属性选择器 -->
标签[属性]{
}
<!--子元素选择器-->
<style>
.father>son
/*用类名,标签名,ID都可以,能选中就行*/
{
}
</style>
/*后代选择器,比子代级别更低的标签*/
<style>
.father grandson
{
}
</style>
/*兄弟选择器,紧跟在该元素之后的同级元素(与+后的标签同级)*/
<style>
h3+p
{
}
</style>
/*伪类选择器,用户交互等*/
<style>
#element:hover
{
...
}
</style>
/*伪元素选择器,创建虚拟元素并样式化*/
<div class="father">
<p class="son></p>
<div>
<p class="grandson"></p>
</div>
</div>
<p>这是一个普通的p标签</p>
<h3>这是一个兄弟选择器</p>
<p>另一个p标签</p>
<h3 id="element">这是一个伪类选择器</h3>
常见元素属性
给选中的元素定义样式,可以用选择器,也可以用style
属性对单个标签样式化
复合属性:一个属性设置多个样式
<h3 style="font: bolder 50px 'KaiTi';">这是一个复合属性</h3>
行内块元素
水平方向上排列,但是可以设置宽度、高度、内外边距等块级元素的属性。
可以包含其他行内元素或块元素
<div>块元素,自动换行</div>
<span>行内元素,只能在一行中,不能独占一行</span>
<img>/*行内块元素,可以在一行出现多个*/
使用dispaly
属性可以将行内元素、块元素、行内块元素转换
常见属性
1. line-hight
:设置行高
常见样式声明
color:元素内部的文字颜色
1. 预设值:定义好的颜色名称
2. 使用色值:
rgb表示法:
hex表示法:
常见颜色的色值:
淘宝红:#ff4400,#f40
黑色:#000000, #000
白色:#ffffff, #fff
红色:#ff0000, #f00
绿色:#00ff00, #0f0
蓝:#0000ff, #00f
紫:#f0f
青:#0f
黄:#ff0
灰色:#ccc
background-color:背景颜色
与color
使用方式相同
font-size:元素内部文字的大小
1. 单位
- px:像素
- em:相对单位,相对于父元素的字体大小,没有设置字体大小会继承父元素的字体大小,层次结构表示继承关系
每个元素必须有字体大小,如果没有声明字体大小,则直接使用父元素的字体大小。没有父元素,则使用基准字号(浏览器里设置的字号)
user_agent:用户代理,即浏览器的设置,会各种标签进行默认样式的设置,具有默认css样式
font-weight:字体的粗细程度
font-weight: bold
加粗;font-weight: normal
不加粗
font-family:文字类型
微软雅黑,黑体……
需要用户电脑上有改字体,可以使用多个字体:
<style>
div
{
font-family: consolas,微软雅黑,Arial,san-serif/*(非衬线字体,万能的)*/
}
非衬线字体:字体边缘没有经过修饰
衬线字体:宋体等,打印好看
san-serif
:电脑自行选择一个非衬线字体
font-style:字体样式
normal
:正常
比如字体的倾斜(italic
),但有的字体可能不支持该方式
<i>
元素:默认样式为倾斜字体,对于语音有影响,通常用它来表示图标
<strong>
元素:加粗,重要的,不能忽略的内容
<em>
元素:表示强调,默认斜体
text-decoration:文本样式
文本修饰,给文本加线
del
元素:废弃的内容
s
元素:过期的内容
<del>章</del>口就来
html已不再使用<s>块级元素</s>
text-indent 首行缩进,可以使用像素,或者字符个数
line-height:行高
每行文本的占据的像素,是容器的高度,可以用来实现文本垂直居中
对于单行文本垂直居中,使用像素
对于多行文本,使用纯数字
width:宽度,hight:高度,letter-spacing文字间隙
letter-spacing
:单词,单字之间的间隔
text-align:元素内部文字的水平排列方式
居中,靠右,靠左。
选择器
选择器:精准地选中元素
ID选择器
元素选择器
类选择器
通配符选择器
*
{
}
属性选择器
根据属性选择标签
/*选择所有具有href属性且值为`http://...`的标签,可以不加值*/
[href="http://..."]
伪类选择器
选中某些元素的某种状态
/*选中鼠标悬停时的a元素*/
a:hover{
}
/*选中鼠标按下时的a元素*/
a:active{
}
/*未访问的链接*/
a:link{
}
/*已经访问过的*/
a:visited{
}
以上四个伪类的书写顺序:link,visited,hover,active
伪元素选择器
生成一个子元素并选中,且该子元素一定为第一个
/*
span:before{
content:"《"
}
选择器的组合
- 并且:多个选择器不加任何符号连接,直接放在一起
- 后代元素:两个选择器之间加空格
a.red .blue{}
- 子元素:
>
- 相邻兄弟元素:
+
- 兄弟选择器:
~
选择器的并列
多个选择器,用逗号分隔
语法糖:用于减轻写代码的负担
层叠冲突
声明冲突:同一个样式,设置多个不同的值,多次应用到同一个元素
层叠:解决声明冲突的过程,浏览器自动处理
第一步、比较重要性
作者样式表的important元素:
- 作者样式表指开发者写的样式表
- important元素指加了
!important
的元素
重要性顺序:
- 作者样式表中的!important样式
- 作者样式表中的普通样式
- 浏览器默认样式表中的样式
第二步、比较特殊性
看选择器
1. 总体规则:该样式在选择器选中的范围越窄,越特殊
2. 具体规则:通过选择器,计算一个4位数,比较四位数的大小
内联样式最特殊
- 千位:如果是内联样式,记作1,否则记作0。
- 百位:等于选择器中所有ID选择器的数量。
- 十位:等于包含该样式的所有选择器中类选择器,属性选择器,伪类选择器的总数
- 等于选择器中所有元素选择器、伪元素选择器的总数
第三步、比较代码出现的次序
当使用前两种方式都无法解决时,则按照样式代码出现的顺序,使用后出现的样式设置
应用
1. 重置样式表
覆盖浏览器的默认样式,使得在各浏览器中显示效果相同,然后再根据需要重写样式。
2. a
标签的伪元素选择器书写顺序
继承
子元素会继承父元素的某些css属性。通过将样式写在父元素上,子元素通过继承使用父元素的某些样式
<style>
div
{
color:red;
}
<body>
<div class="container">
<ul>
<li></li>
<ul>
</div>
<body>
<div>
标签下的所有元素的字体颜色都是红色
通常,跟文字内容相关的属性都能继承
简写属性,同时设置多个属性
不可继承的属性
background
不可继承
属性值的计算过程
一个一个元素依次渲染
顺序按照文档的树形结构的顺序,从树形目录的根节点开始渲染
渲染每个元素的前提条件:该元素的所有css属性必须有值。
从所有属性都没有值,到计算出所有属性值,才能显示
CSS属性值计算过程
- 确定声明值:没有冲突的css属性的值先确定
- 层叠冲突:对样式表有冲突的声明使用层叠规则,确定CSS属性
- 使用继承:若仍存在没有值的属性,可以继承的属性,则继承父元素的值
- 使用默认值:对仍然没有值的属性使用默认值。
1. 强制继承
对于希望继承父元素的值,但是在前两步可以确定元素值时,可以使用强制继承。也可以使,强制继承不可继承的属性值
a
{
color:inherit
/*强制继承*/
}
2. 特殊的CSS取值
- inherit: 手动继承
- initial: 初始值,强制将该属性的值设置为默认值
盒模型
文档中每个元素都是一个盒子( 一个矩形区域 )
盒子类型:
- 行盒: display属性值等于inline的元素
- 块盒:display属性值等于block的元素
行盒在页面中不换行,块盒独占一行
浏览器默认样式表中设置为块盒: 容器,h1~h6,p
常见的行盒:span, a, img…
盒子的组成部分
从内到外
- 内容: content
- 填充: padding 盒子边框到内容的距离
- 边框: border
- 外边距: margin 盒子与盒子之间的距离
盒子模型的属性( 同时设置多个值,简写属性 ):
属性名 | 描述 |
---|---|
Content | 盒子包含的实际内容 |
Padding (内边距) | 内容与边框之间的部分 |
Border | 盒子的边界,在内边距外部 |
Margin (外边距) | 围绕在边框的外部,盒子与其他元素之间的空间 |
后三个属性是复合属性
1. 内容区属性
width
, height
设置的是盒子内容部分的宽高
2. 填充区属性
padding-left
, padding-right
,padding-top
, padding-bottom
.
设置的都是填充部分的大小
填充+内容=填充区 。
3. 边框属性(简写属性)
border-style
(边框样式), boder-color
(边框颜色), border-width
(边框宽度)
边框颜色默认为字体颜色
4. 外边距
margin
: 简写属性,直接设置上下左右的margin大小
盒模型的应用
改变宽高范围
1.默认情况下, width
和height
设置的是内容盒宽高。
直接量的是边框盒的宽高
2. 解决方法
使用box-sizing
属性,属性值设置为border
即可实现设置的尺寸为边框盒的宽高
背景覆盖范围
默认背景覆盖边框盒
background-clip
: 使背景覆盖范围改变
溢出处理
overflow
属性(x,y两个方向)解决
- hide
- scroll( 滚动条)
- auto( 自动处理)
断词规则
word-break
: 文字显示不下时,如何换行
- normal: 普通。CJK字符(文字间位置截断), 非CJK字符(在单词结束时断行)
- break-all: 截断所有。在文字处截断。
对于非CJK字符,会在单词中截断 - keep-all: 在单词间截断(空格处)
空白处理
对单行文本实现显示不完的内容用.
代替
<style >
li{
border-bottom
line-height
padding-left
...
white-space: nowrap
overflow: hidden
text-overflow:ellipsis
}
...
行盒
1.特点
- 盒子沿着内容延申
- 行盒设置宽高只改变背景的宽高,不影响content的大小,对其他元素的排列没有影响
- 内边距:水平方向有效,垂直方向不会占据实际空间,只改变背景
- 边框:水平方向有效
- 外边距:水平方向有效
总结:行盒只有水平方向的设置影响其他元素排列
2.行块盒
同时具有行盒和块盒的特点,但是不会独占一行,可以设置宽高。
display:inline-block
做分页(浏览器第一页,第二页……)
空白折叠,发生在行盒(行块盒)内部或行盒(行块盒)之间
3. 可替换元素和非可替换元素
大部分元素,页面上显示的结果取决于元素内容,称为非可替换元素
少部分元素,页面上显示的内容取决于元素属性,称为可替换元素
绝大部分可替换元素都为行盒,类似于行块盒,可以设置四个方向的大小
视觉格式化模型
页面中多个盒子的排列规则
排列方式:常规流,浮动,定位
常规流
所有文档默认情况下都是常规流,文档流
总体规则:块盒独占一行,行盒水平依次排列
包含块:每个盒子都有它的包含块,包含块决定了盒子的排列区域。
绝大部分元素的包含块为其父元素的内容盒
移动父元素时,子元素的位置相对于父元素不变
子元素充满其包含块
1. 块盒默认情况下
-
水平方向
每个块盒的总宽度必须刚好等于包含块的宽度。width默认为auto, 占据剩余宽度
margin的默认值为0。若宽度,边框,内边距计算完后仍为占满包含块,则margin-right占满所有剩余空间
margin设置auto,表示占据剩余空间,且左右平均。
通过给margin赋负值,可以使子元素在显示上超出父元素的content
-
每个块盒垂直方向上的auto值
height: 适应内容的高度,无内容则height值为0
margin: 表示0
-
百分比取值
padding,width,margin的取值可以去百分比,是相对于包含块的宽度
高度的百分比:包含块的高度与子元素无关,则百分比相对于包含块的高度;若有关,则百分比不可用。
-
相邻margin合并
两个常规流块盒,相邻margin会合并,取两个margin的最大值
浮动
最初用于文字环绕,后来也用于进行横向排列
基本特点
1. 修改float属性值为:
- left: 左浮动,元素考上靠左
- right: 右浮动,元素靠上靠右
默认为none
注意:
- 当一个元素浮动后一定为块盒,display属性的值为block
- 浮动元素的包含块与常规流一样,为父元素的内容盒
浮动元素会与行盒顶端对齐,左右会完全贴近另一个浮动元素或者包含块边缘。所以同一浮动方式的多个浮动元素可以在包含块中依次排列
2. 尺寸
- width为auto, 适应内容宽度
- height为auto, 适应内容高度
- margin为auto, 值为0
- 百分比设置和常规流的设置相同
盒子的排列
先靠上,再靠左或靠右,可以并排
浮动盒子在包含块中排列时,会避开前面的常规流盒子
靠后的常规流盒子无视其前面的浮动盒子,按照css中规定的方式排列
行盒在排列时会避开浮动盒子
文字直接放在块盒中,浏览器会自动生成一个行盒包裹文字,称为匿名行盒
高度坍塌
原因:常规流盒子的自动高度为适应内容,在计算时,不考虑浮动盒子的高度,只考虑常规流盒子。
解决方法:清除浮动,使用clear属性
- 默认值:none
- left: 清除左浮动,该元素必须出现在前面所有左浮动盒子的下方
- right:清除右浮动,该元素必须出现在前面所有右浮动盒子的下方
- both:清除左右浮动,该元素必须出现在前面所有浮动盒子的下方
定位
手动控制元素在包含块中的精准位置
涉及的CSS属性:position
position属性值
- 默认值: static, 静态定位
- relative: 相对定位
- absolute: 绝对定位
- fixed: 固定定位
注意:元素的position值不为static,则元素为定位元素,脱离文档流,但是相对定位不会脱离
1. 脱离了文档流的元素的部分特点:
- 文档流中的元素排列时,会忽略脱离文档流的元素
- 常规流元素计算自动高度时,会忽略脱离了文档流的元素
- 不影响常规流、浮动元素的排列
2. 相对定位
不会脱离文档流,只是让元素在原来位置上进行偏移
通过四个css属性设置位置:
- left:
- right:
- top:
- bottom
盒子的偏移不会影响其他盒子的排列
3. 绝对定位
- 宽高为auto,适应内容
- 包含块变化:找祖先元素中的第一个定位元素,该元素的填充盒为其包含块,找不到时,则以整个网页为其包含块( 初始化包含块 )
属性设置:
- left: 坐标,距离包含块左边的距离
- right: 距离右边
- top: 距离上边
- bottom: 距离下边
4. 固定定位
除包含块外,其他与绝对定位相同
固定定位的包含块为视口(浏览器的可视窗口,整个网页页面中正在显示在浏览器窗口的部分)
典型例子:盗版网站的广告
绝对定位和固定定位默认情况下
定位下的居中
某个方向居中
- 定宽(高)
- 将左右(上下)距离设置为0
- 将左右(上下)的margin设置为auto
左右值相同时,以左边为准; 上下值相同时,以上为准
绝对定位和固定定位中,margin设为auto自动吸收剩余空间(左右和上下)。
多个定位元素重叠时
堆叠上下文
设置z-index, 调整元素的前后摆放:
- 只有定位元素有效,
- 可以设置负数,设为负数后,遇到常规流元素、浮动元素会被覆盖
补充
- 绝对定位和固定定位的元素一定是块盒
- 绝对定位和固定定位元素一定不是浮动
半透明效果:用固定定位
透明通道
每个颜色都有透明通道:0 ~ 1
- rgba(红, 绿, 蓝, alpha)
- hex: #红绿蓝透
更多选择器
更多伪类选择器
1. first-child
选中第一个元素,且元素为指定类型
a:first-child
:选中第一个子元素,且该子元素需要是a
元素,如果没有,就不选
2. first-of-type
配合其他选择器
a:first-of-type
: 选中子元素中的第一个a
元素
3. nth-child
选中指定位置的子元素
a:nth-child(5)
: 选中第5个子元素且为<a>
更多伪元素选择器
1. first-line
选中元素中的第一行文字
2. first-letter
选中元素中文字第一个字母
3. selection
选中用户框选的文字
更多样式
透明度
1. opacity
设置整个元素的透明度,取值为0~1
2. 在颜色位置设置alpha通道
#ragba(1,1,1,0.2)
, alpha
通道的取值为0~1
鼠标样式
1. cursor
默认值为auto
: 浏览器自行控制
还可以设置为图片,格式使用.cur
或.icon
。cursor: url("img/target.ico"),auto;
, 如果浏览器出问题,则使用自动样式
盒子隐藏
1. dispaly:none
: 不生成盒子,可能会影响其他盒子的排列
2. visibility: hidden
: 不显示盒子,但是盒子会生成
背景图
img
元素属于HTML, 背景图属于CSS
- 当图片是网页元素时,必须使用
<img>
- 当图片仅用于美化页面时,必须使用背景图
2. css属性
background-img
:backgroudn-img:url("img/dafd/agdss.png")
url是相对于HTML文件的
默认会将页面铺满,如果一张图片没有铺满,则重复。background-repeat
: 速写属性,控制背景图是否重复background-size
: 对图片进行缩放
contain: 按图片原始比例缩放,显示完整的图片,区域不一定撑满
cover: 图片将区域撑满且保持原比例不变
百分比: 根据盒子的width和height调整背景图片的宽高- background-position: 背景图的位置
预设值:
center: 居中
bottom/top: 靠下/上
right/left: 靠右/坐
数字/百分比:背景图相对盒子left与top的距离,可以写负数
雪碧图(精灵图): 将小图标组合成一个大图片文件(雪碧图),通过调整背景图的位置,取出雪碧图的一部分 - background-attachment: 背景图是否固定。可以实现固定定位的效果,位置相对于视口
fixed
: 固定定位
3. 背景图与背景颜色共存
没有背景图的地方用背景颜色填充
4. 速写属性
background
:url no-repeat (position) (size)
当position
与size
都使用数字或者百分比时,要先写position
再写size
,size
或position
的属性值用/
隔开
lity: hidden`: 不显示盒子,但是盒子会生成
背景图
img
元素属于HTML, 背景图属于CSS
- 当图片是网页元素时,必须使用
<img>
- 当图片仅用于美化页面时,必须使用背景图
2. css属性
background-img
:backgroudn-img:url("img/dafd/agdss.png")
url是相对于HTML文件的
默认会将页面铺满,如果一张图片没有铺满,则重复。background-repeat
: 速写属性,控制背景图是否重复background-size
: 对图片进行缩放
contain: 按图片原始比例缩放,显示完整的图片,区域不一定撑满
cover: 图片将区域撑满且保持原比例不变
百分比: 根据盒子的width和height调整背景图片的宽高- background-position: 背景图的位置
预设值:
center: 居中
bottom/top: 靠下/上
right/left: 靠右/坐
数字/百分比:背景图相对盒子left与top的距离,可以写负数
雪碧图(精灵图): 将小图标组合成一个大图片文件(雪碧图),通过调整背景图的位置,取出雪碧图的一部分 - background-attachment: 背景图是否固定。可以实现固定定位的效果,位置相对于视口
fixed
: 固定定位
3. 背景图与背景颜色共存
没有背景图的地方用背景颜色填充
4. 速写属性
background
:url no-repeat (position) (size)
当position
与size
都使用数字或者百分比时,要先写position
再写size
,size
或position
的属性值用/
隔开