css引入
行间样式——直接写到style里面
<div style="
background: red ;
weight:100px;
height:100px;
"></div>
页面级css——写在<heaad></head>里面
外部css文件——单独写一个css文件
CSS规则=选择器+声明块
text-decoration:none;→该元素是用来除去a元素的下划线的
img元素细化:object-fit(适应方式)元素通常取三个值→contain(当配合border元素使用时,既要保存原来比例和内容又要尽可能大的填充在盒元素中);fill(当配合border元素使用时,显示图片全部内容并填充到盒模型中,但不能保持比例。默认值);cover(保持比例不变并整个填充盒模型,但可能会丢失部分图片内容);当图片未设置高度只设置宽度时,增加宽度,高度会按照比例增加
选择器
选择器;选中元素
ID选择器:选中的是对应id值的元素
<style>
#ww {
color:red;
}
</style>
<body >
<h2 id="ww">Lorem ipsum dolor sit amet consectetur adipisicing elit.</h2>
</body>
元素选择器。了解→ :first-letter选中第一个数字
类选择器
<style>
div.abcd li{
color: red;
}
</style>
<div class="abcd">
Lorem ipsum dolor sit, consectetur adipisicing elit.
<ul>
<li>Lorem, ipsum dolor.</li>
<li>At, temporibus dolore?</li>
<li>Quam, odit necessitatibus.</li>
<li>Nulla, fuga officia.</li>
<li>Quidem, cum delectus.</li>
<li>Sapiente, tenetur dolores.</li>
</ul>
</div>
class后面引号中可以同时写多个类名,类名之间以空格分隔
通配符选择器——*(选中所有元素)
属性选择器——根据属性名和属性值选择元素
[href]{ //表示只选中含有href属性的元素(若方
括号中herf写入具体值,如[herf="n"],则表示只选
中含有herf属性且属性值为n的元素
color:red;
}
优先级为→!important>行间样式>ID>class=属性=伪类>元素(标签)=伪元素>通配符
伪类选择器——选中某些元素的某种状态(以下选择器用的时候就按照下面的顺序排列)。了解→ **:nth-child(n)**选中第n个元素
link:超链接未访问过时的状态
visited:超链接访问过后的状态
hover:鼠标悬停状态
如:
a:hover{
color: blanchedalmond
}
active:激活状态,鼠标按下状态
伪元素(属于行级元素)选择器
before
所选HTML中的元素::before{ content: "添加第一个子元素内容";//content——为所选元素添加一个子元素并令其为首个子元素 color:……; …… }
after
分组选择器
ul,
p,
span{
background-color:greenyellow;
}
同时选中多个元素
选择器的组合
并且
后代元素——空格
子元素——>
相邻兄弟元素——+
后面出现的所有兄弟元素——~
选择器的并列
多个选择器用逗号分隔
声明块
声明块出现在大括号中,里面有很多声明(属性)
每一个声明(属性)表达了某一方面的样式
CSS代码书写位置
内部样式表——书写在style元素中
内联样式表,元素样式表——直接书写在元素的style中
外部样式表——将样式书写到独立的CSS文件中
常见样式声明
color——元素内部的文字颜色。
预设值:定义好的单词。如"red,green等”
三原色,色值:光学三原色(红,绿,蓝),每个颜色可以使用0-255之间的数据来表达
rgb表示法:
color:rgb(0,255,0);表示绿色
hex(十六进制)表示法:
color:#hex红绿蓝;(#f40→淘宝红);transparent(透明色)
background-color——元素背景颜色
font-size——元素内部文字尺寸的大小(设置的是字体的高)
px:像素,绝对单位
em:相对单位,相对于父元素的字体大小,如果没有父元素(html),则使用基准字号。
font-weight——文字粗细程度,可以取值数字,可以取值预设值
normal:不加粗(400)
bold:加粗(700)
font-family——文字类型(必须用户计算机中存在的字体才会有效,通常使用多个字体以匹配不同环境)
font-family:字体1,字体2,字体3,……,sans-serif;
sans-serif:非衬线字体(一般电脑中都存在)
font-style:字体样式,通常用它设置斜体
font-style:italic;倾斜字体
font-style:normal;正常字体
text-decoration——文本修饰,给文本加线
text-decoration:none;没有线
text-decoration:underline;下划线
text-decoration:overline;上划线
text-decoration:line-through;中划线
text-decoration:none;没有线(可以用
于去掉<del>中的中划线)
cursor:;鼠标光标移到该元素上时的鼠标光标形态
line-height——每行文本高度,该值越大,每行文本的距离越大;设置行高为容器(height)的高度,可以让单行文本垂直居中;行高可以设置为纯数字,表示相对于当前数字的大小
width——元素的宽
height——元素的高
letter-space——文字间隙
text-indent——首行文本缩进
text-indent: 2em;缩进两个字符
text-indent: 2px; 缩进两个像素
13.text-align——元素内部文字的水平排列方式
text-align: center;居中
text-align: left;靠左排列
text-align: right;靠右排列
ul:→liststyle:none;表示去掉圆点,liststyle可以定义多种li列表前的标记
层叠
声明冲突:同一个样式,多次应用到同一个元素
层叠(权重计算):解决声明冲突的过程(浏览器自动处理)
1. 比较重要性
重要性从高到低:
1.作者样式表中的!important样式
2.作者样式表中的普通样式
3.浏览器默认样式中的样式
2. 比较特殊性
总体规则:选择器选中的范围越窄越特殊
具体规则:通过选择器计算出一个四位数(x x x x(逢256进1,即256进制)),数大的特殊
千位:如果是内联样式记1,否则记0
百位:等于选择器中所有ID选择器的数量
十位:等于选择器中所有类选择器、属性选择器、伪类选择器的数量
个位:等于选择器中所有元素选择器、伪元素选择器的数量
3. 比较源次序
代码书写靠后的胜出
应用
重置样式表——书写一些作者样式,覆盖浏览器的默认样式(常见的重置样式表:normalize.css、reset.css、meyer.css
爱恨法则(link>visited>hover>aactive)
继承
子元素会继承某些父元素的css属性(通常跟文字内容相关的属性都能被继承)
属性值的计算过程
一个元素一个元素依次渲染,顺序按照页面文档的树形目录结构进行
html
head
meta
title
body
h3
p
strong
a
img
渲染每个元素的前提条件:该元素的所有css属性必须有质(一个人元素从所有属性都没有值到所有属性都有值,这个计算过程叫做属性值计算过程)
无属性值→确定声明值→层叠冲突→使用继承→使用默认值→每个属性都有值
确定声明值:参考样式表(作者样式表、浏览器默认样式表)中没有冲突的声明,作为css属性值
层叠冲突:对样式表有冲突的声明使用重叠规则,确定css属性值
使用继承:对仍然没有值的属性,若可以继承,则继承父元素的值
使用默认值:对仍然没有值的属性使用默认值
特殊的两个css取值:
inherit:手动(强制)继承,将父类元素的值取出应用到该元素
initial:初始值,将该属性设置为默认值
盒模型(display:none;→不生成盒子)
box:盒子,每个元素在页面中都会生成一个矩形区域(盒子)
盒子类型:
行盒:display属性等于inline的元素(display默认值为inline)。
块盒:display属性等于block的元素。
行盒在页面中不换行,块盒独占一行
常见的浏览器默认样式表设置为块盒的元素有:容器元素、h1~h6、p、border-radius(弧度):50%;→此时表示圆形边框。
常见的浏览器默认样式表设置为行盒的元素有:span、a、video、audio、img
盒子的组成部分
border所设置的是边框
border:10px solid black;//可以分部写,如下所示
border-width:10px
border-style:solid(实体);//还可
取值为dotted(点状虚线)、dashed(条状虚线)
border-color:black;
无论是行盒还是块盒都是由以下几个部分组成,从内到外分别是:
内容(content):width、height,设置的是盒子内容的宽高。内容部分通常叫做整个盒子的内容盒(content—box)
填充/内边距(padding):盒子边框到盒子内容的距离。padding-left、padding-right、padding-top、padding-bottom。(padding简写属性→padding:上 右 下 左;)。填充区+内容区=填充盒(padding-box)
边框(border):border-style边框样式(默认值为none)、border-width边框宽度(默认值为0,后面跟四个数时分别表示“上”“右”“下”“左”;跟三个数时分别表示“上”“左右”“下”)、border-color边框颜色(默认为字体颜色)。边框+填充区+内容区=边框盒(border-box)
外边距(margin):边框到其他盒子的距离。margin-left、margin-right、margin-top、margin-bottom。(同padding属性一样科速写属性)
盒模型的应用
当line-hight值等于height时文字垂直居中
1.行级元素:内容决定元素所占位置
不可以通过css改变宽高
span strong em a del
2.块级元素:独占一行
可以通过css改变宽高
div p ul li ol form address
3.行级块元素:内容决定大小
可以改宽高
img
改变宽高范围
默认情况下,width和height设置的是内容盒宽高
衡量设计稿尺寸的时候,往往使用的是边框盒,但设置width和height,则设置的是内容盒
解决方法1:精确计算(较为麻烦)
解决方法2:css3:box-sizing
改变背景覆盖范围
默认情况下背景覆盖边框盒(可以通过background-clip进行修改)
溢出处理
overflow,控制内容溢出边框盒后的处理方式(hidden)为溢出隐藏
断词规则
word-break,会影响文字在什么位置被截断换行
normal:普通。CJK(中日韩)字符(在文字位置截断),非CJK字符(在单词位置截断)
break-all:截断所有。所有字符都在文字处截断
keep-all:保持所有,所有文字都在单词之间截断(CJK文字在空格处截断,没有空格默认整句文字为一个单词)
空白处理
white-space:nowrap(空白字符的处理规则是不换行)字符超出盒子横向尺寸后不换行(默认的是换行处理)
overflow(溢出处理):hidden;→隐藏溢出部分
text-overflow(文本溢出处理):ellipsis;→显示不完的部分显示出三个圆点的省略号
行盒的盒模型
常见的行盒:包含具体内容的元素(span,strong,em,i,img,video,audio
显著特点
盒子沿着内容延伸
行盒不能设置宽高(调整行盒的宽高应该使用字体大小、行高、字体类型,间接调整
内边距(填充区):水平方向有效,垂直方向只会影响背景,不会实际占用空间(但是会覆盖上下内容)
边框::水平方向有效,垂直方向只会影响背景,不会实际占用空间(但是会覆盖上下内容)
外边距::水平方向有效,垂直方向只会影响背景,不会实际占用空间。
行块盒
(display:inline-block;) 的盒子
不独占一行
盒模型中所有尺寸都有效
空白折叠
空白折叠发生在行盒(行块盒)内部或行盒(行块盒)之间
可替换元素和非可替换元素
大部分元素,页面上显示的结果取决于元素内容,称为非可替换元素
少部分元素,页面上显示的结果取决于元素属性,称为可替换元素
可替换元素:img、video、audio(绝大部分可替换元素均为行盒,但可替换元素又类似于行块盒,盒模型中所有尺寸都有效)
常规流
盒模型:规定单个盒子的规则
视觉格式化模型:页面中的多个盒子排列规则
视觉格式化模型大体上将页面中盒子的排列分为三种
常规流
浮动
定位
常规流
常规流又可以称作文档流、普通文档流、常规文档流
所有元素默认情况下都属于常规流布局
总体规则:块盒独占一行,行盒水平依次排列
包含块(containing block):每个盒子都有它的包含块,包含块决定了盒子的排列区域
绝大部分情况下:盒子的包含块为其父元素的内容盒
块盒
每个块盒的总宽度必须刚好等于包含块的宽度,宽度的默认值为auto(将剩余空间吸收掉),margin也可以取值auto(默认值为0)width吸收能力强于margin
若宽度、边框、内边距、外边距计算后仍有剩余空间,该剩余空间被margin-right全部吸收掉
在常规流中,块盒在其包含块中居中,可以定宽,然后左右margin设置为auto
每个块盒垂直方向上的auto值
height:auto,适应内容的高度
margin:auto,表示0
百分比取值
padding、宽、margin可以取值为百分比
以上所有百分比均是相对于包含块的宽度
高度的百分比:
包含块的高度取决于子元素的高度,设置百分比无效
包含块的高度不取决于子元素的高度,百分比是相对于父元素高度
上下外边距的合并
两个常规流块盒,上下外边距相邻,会进行合并(两个外边距取最大值)
浮动
应用场景
文字环绕
横向排列
浮动的基本特点
修改float属性为:
left:左浮动,元素靠上靠左
right:右浮动,元素靠上靠右
默认值为none(即不浮动,为常规流)
当一个元素浮动后,元素必定为块盒(更改display属性为block)
浮动元素的包含块,和常规流一样,为父元素的内容盒
盒子尺寸
宽度为auto时,适应内容宽度
高度为auto时,与常规流一致,适应内容高度
margin为auto时,值为0
边框、内边距、百分比(除了高以外,百分比均是相对于包含块的宽度)设置与常规流一样
盒子排列
左浮动的盒子,靠上靠左排列
右浮动的盒子,靠上靠右排列
浮动盒子在包含块中排列时,会避开常规流块盒
常规流块盒在排列时,无视浮动盒子
行盒在排列时会避开浮动盒子
如果文字没有在行盒中(直接摆放在块盒里),浏览器会自动生成一个行盒包裹文字,该行盒叫做匿名行盒
外边距合并不会发生
高度坍塌
高度坍塌的根源:常规流盒子的自动高度,在计算时,不会考虑浮动盒子
清除浮动,涉及css属性:clear
默认值:none
left:清除左浮动,该元素必须出现在前面所有左浮动盒子的下方
right:清除右浮动,该元素必须出现在前面所有右浮动盒子的下方
both:清除左右浮动,该元素必须出现在前面所有浮动盒子的下方
元素嵌套时,垂直方向的margin是一起的,会取它们
中最大的值;水平方向子元素的margin是相对于父元
素的margin(margin塌陷)
###### 解决方法
1. position:absolute;
2. displsy:inline-block;
3. float:left/right;
4. overflow:hidden;
-------------------
两个元素垂直方向上(上边元素的margin-bottom,下
边元素的margin-top)会重合,即实际距离取二者最大值(margin合并)
###### 解决方法
将两个元素其中一个写在一个新的元素(该元素
的css设为 overflow: hidden;)中,或者将两个元
素都写在两个不同的新的元素中(元素要求同上)
--------------------
###### 浮动元素会产生浮动流
1.所有产生了浮动流的元素,块级元素会直接忽视他们
2.产生了bfc的元素和文本类属性的元素以及文本类属性(inline)都能
看到浮动元素
----------------------
###### 用一个带边框的父元素包裹多个浮动流(*一
般情况下块级元素会忽视浮动流,直接设置块级元素
的宽高有不方便后期添加浮动流*)
只需要在该父元素内部的最下面加一个<p></p>元素再为p元素
设置css→clear:both;(清除周边的浮动流)即可。
也可以使用伪元素选择器
::after{
content:"content";
clear:both;
display:block;
}
注*clear只有加在块级元素中才有效
定位
涉及的css属性为position属性
position属性(凡是设置了position:abolute; float:left/right;系统会在内部把元素转换为inline-block;)
position属性默认值为static,静态定位(不定位)
relative:相对定位
absolute:绝对定位
fixed:固定定位
一个元素,只要position取值不为static,就认为该元素是一个定位元素,定位元素会脱离文档流(相对定位除外)
一个脱离了文档流的元素:
文档流中的元素摆放时,会忽略脱离了文档流的元素
文档流中的元素计算自动高度时,会忽略脱离了文档流的元素
定位
position:absolute;//表示可以被定位(脱离原来位置进行定位)
相对于最近的有定位的父级进行定位,如果没有,相对于文档进行定位
left(左边线距离屏幕左边距离)/right(左边线距离屏幕左边距离):;
top/bottom:;
-------------------------
position:relative;//保留原来位置进行定位
left/right:;
top/bottom:;
相对于自己原来的位置进行定位
--------------------
position:fixed//固定定位
left/right:;
top/bottom:;
---------------------
当left/right等取值不为像素而是百分值时,是相
对于窗口的(可做元素居中)
---------------------------
<body></body>自带8像素的margin
相对定位
不会导致元素脱离文档流,只是让元素在原来位置上进行偏移
可以通过四个css属性设置其位置
left
right
top
bottom
以上四个属性出现对立属性(矛盾)时,以left和top为准
相对定位下,盒子的偏移不会对其他盒子造成影响
绝对定位
宽高为auto(默认值),适应内容
包含块变化:找祖先元素中找第一个定位元素,该元素填充盒为其包含块。若找不到,则它的包含快为整个网页(初始化包含快)
固定定位
其他情况和绝对定位完全相同
包含块不同:固定为视口(浏览器可视窗口)
绝对定位、固定定位元素一定为块盒
绝对定位、固定定位元素一定不是浮动
定位下的居中
某个方向居中
定宽(高)
将左右(上下)距离设置为零
将左右(上下)margin设置为auto
绝对定位和固定定位中,margin为auto时会自动吸收剩余空间
多个定位元素重叠时
堆叠上下文
设置z-index,通常情况下,该值越大越靠近用户
只有定位元素设置z-index有效(常规元素和浮动都无效)
z-index可以是负数,如果是负数则遇到常规流、浮动元素,则会被其覆盖
透明效果
opacity,它设置的是整个元素的透明度,取值范围是0~1
每个颜色都具有透明通道,0~1
rgba(红,绿,蓝,alpha)
hex:#红绿蓝透明通道
更多的选择器
更多的伪类选择器
m:first-child;→选中m类中第一个子元素
:first-of-type,选中子元素中第一个指定类型的元素
m:last-child;→选中m类中第一个子元素
:last-of-type,选中子元素中最后一个指定类型的元素
m:nth-child(n);→必须是第n个子元素且必须是m类元素,括号里可以写2n(偶数个)、even(等同于2n)、2n+1(奇数个)、odd(等同于2n+1)
m:nth-of-type(n);→子元素中第n个m元素
更多的伪元素选择器
m::first-letter→选中m元素中第一个字母
m::first-line→选中m元素中第一行文字
m::selection→选中被用户框选(用鼠标光标框选)的文字
网友评论