CSS全称为“层叠样式表 (Cascading Style Sheets)
”,它主要是用于定义 HTML内容在浏览器内的显示样式,如文字大小、颜色、字体加粗等。使用 CSS
样式的一个好处是通过定义某个样式,可以让不同网页位置的文字有着统一的字体、字号或者颜色等。
css 里面注释是 /*注释内容*/
嵌入式 css
样式就是可以把css
样式代码写在 stype
标签之间,一般情况下嵌入式 css
样式写在 head
之间。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>CSS样式的优势</title> <style type="text/css"> span {
font-size:20px;
/*设置文字字号*/
color:orange;
/*设置文字颜色*/
font-weight:bold;
/*设置字体加粗*/
}
</style>
</head>
<body>
<p>我是 <span>Edviv</span>,业余 <span>算法</span> 爱好者~</p>
</body>
</html>
运行效果👇
css 样式 由 选择符 和 声明 组成,而 声明 又由 属性 和 值 组成。
选择符:又称选择器,指明网页中要应用样式规则的元素,如本例中是网页中所有的段(p)的文字将变成蓝色,而其他的元素(如ol)不会受到影响。
声明:在英文大括号“{}”中的的就是声明,属性和值之间用英文冒号“:”分隔。当有多条声明时,中间可以英文分号“;”分隔。
内联式css样式 表就是把 css 代码直接写在现有的 HTML 标签中,如果有多条css样式代码设置可以写在一起,中间用分号隔开。
<p style="color:red;font-size:12px">这里文字是红色</p>
外部式css样式就是把 css
代码写一个单独的外部文件中,这个 css
样式文件以 .css
为扩展名,在 head
内(不是在 style
标签内)使用 link
标签将 css
样式文件链接到 HTML
文件内。
<link href="base.css" rel="stylesheet" type="text/css" />
注意:
1、css
样式文件名称以有意义的英文字母命名,如 main.css
2、rel=“stylesheet” type=“text/css”
是固定写法不可修改。
3、link
标签位置一般写在 head
标签之内。
优先级:内联式 > 嵌入式 > 外部式
CSS3 选择器
每一条 css
样式声明(定义)由两部分组成,形式如下:
选择器{
样式;
}
标签选择器: 就是 html
代码中的标签 html
body
h1
p
img
p{
font-size:12px;line-height:1.6em;}
上面的 css
样式代码的作用:为 p
标签设置12px
字号,行间距设置 1.6em
的样式。
类选择器:
语法: 类选器名称{ css
样式代码;}
注意
1.英文圆点
开头
2.其中类选器名称可以任意起名(但不要起 中文
)
ID选择器
1.使用 ID选择器
,必须给标签添加上 id
属性,为标签设置 id=“ID名称”
。
2.ID选择符
的前面是井号(#)
号,而不是英文圆点(.)
。
3、id属性
的值既为当前标签的 id
,尽量见名思意,语义化。
类和ID选择器的区别:
相同点: 可以应用于任何元素。
不同点:
1. ID选择器
只能在文档中使用一次。与类选择器不同,在一个HTML
文档中,ID选择器
有且仅只能使用一次
,而 类选择器可以使用多次
。
2. 可以使用 类选择器词列表方法为一个元素同时设置多个样式
,但是 ID选择器是不可以实现的
。
子选择器: 即大于符号 (>)
, 用于选择指定标签元素的第一代子元素。
.food>li{
border:1px solid red;}
使 class
名为 food
下的子元素 li
加入红色实线边框。
后代选择器: 包含选择器,即加入 空格
,用于选择指定标签元素下的后辈元素。
.first span{
color:red;}
>
作用于元素的第一代后代,空格
作用于元素的所有后代。
通用选择器: 功能最强大的选择器,它使用一个 (*)
号指定,它的作用是匹配 html
中所有标签元素。
* {
color:red;}
使用下面代码使用 html
中任意标签元素字体颜色全部设置为红色。
伪类选择器: 伪类选择符,它允许给 html
不存在的标签(标签的某种状态)设置样式,比如说我们给 html
中一个标签元素的鼠标滑过的状态来设置字体颜色:
a:hover{
color:red;}
关于伪选择符:
关于伪类选择符,到目前为止,可以兼容所有浏览器的“伪类选择符”就是 a
标签上使用 :hover
了(其实伪类选择符还有很多,尤其是 css3
中,但是因为不能兼容所有浏览器,只是讲了这一种最常用的)。其实 :hover
可以放在任意的标签上,比如说 p:hover
,但是它们的兼容性也是很不好的,所以现在比较常用的还是 a:hover
的组合。
分组选择器: 为 html
中多个标签元素设置同一个样式时,可以使用分组选择符 (,)
h1,span{
color:red;}
等价于👇面这行代码
h1{
color:red;}
span{
color:red;}
CSS3的继承,优先级和重要性
继承者 - 样式的继承: CSS
的某些样式是具有继承性的,继承是一种规则,它允许样式不仅应用于某个特定 html
标签元素,而且应用于其后代。
p{
color:red;}
<p>三年级时,我还是一个<span>胆小如鼠</span>的小女孩。</p>
如某种颜色应用于 p
标签,这个颜色设置不仅应用 p
标签,还应用于 p
标签中的所有子元素文本,这里子元素为 span
标签。
注意有一些 css
样式是不具有继承性的。如 border:1px solid red
p{
border:1px solid red;}
<p>三年级时,我还是一个<span>胆小如鼠</span>的小女孩。</p>
上面例子中它代码的作用只是给p标签设置了边框为 1
像素、红色、实心边框线,而对于子元素 span
是没用起到作用的。
选择器的优先级:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>css3选择器优先级</title> <style type="text/css"> #box{
/*-- id 选择 --*/
color:red;
}
.dv{
/*-- 类选择 --*/
color:blue;
}
div{
/*-- 标签选择器 --*/
color:purple;
}
*{
/*--统配符选择器--*/
color:green;
}
</style>
</head>
<body>
我是Edviv
<div>
我是Edviv
</div>
<div class="dv">
我是Edviv
</div>
<div class="dv" id="box">
我是Edviv
</div>
<div class="dv" id="box" style="color:orange">
我是Edviv
</div>
</body>
</html>
运行效果如👇图所示
如果一个元素使用了多个选择器,则会按照选择器的优先级来给定样式。选择器的优先级依次是: 内联样式 > id选择器 > 类选择器 > 标签选择器 > 通配符选择器
权值计算-特殊性: 同一个元素设置了不同的 CSS
样式代码,浏览器是根据权值来判断使用哪种 css
样式的,权值高的就使用哪种 css
样式。
标签的权值为 1
,类选择符的权值为 10
,ID
选择符的权值最高为100
p{
color:red;} /*权值为1*/
p span{
color:green;} /*权值为1+1=2*/
.warning{
color:white;} /*权值为10*/
p span.warning{
color:purple;} /*权值为1+1+10=12*/
#footer .note p{
color:yellow;} /*权值为100+10+1=111*/
注意:还有一个权值比较特殊–继承也有权值但很低,有的文献提出它只有0.1,所以可以理解为继承的权值最低。
选择器最高层级!important: 某些样式设置具有最高权值
p{
color:red!important;}
p{
color:green;}
<p class="first">三年级时,我还是一个<span>胆小如鼠</span>的小女孩。</p>
/* p 段落中的文本会显示的red红色 */
注意:!important要写在分号的前面:
注意当网页制者不设置 css
样式时,浏览器会按照自己的一套样式来显示网页。并且用户也可以在浏览器中设置自己习惯的样式,比如有的用户习惯把字号设置为大一些,使其查看网页的文本更加清楚。这时注意样式优先级为:浏览器默认的样式 < 网页制作者样式 < 用户自己设置的样式
,但记住 !important
优先级样式是个例外,权值高于用户自己设置的样式。
font-family
设置字体系列: 使用css
样式为网页中的文字设置字体、字号、颜色等样式属性
body{
font-family:"宋体";}
注意不要设置不常用的字体,因为如果用户本地电脑上如果没有安装你设置的字体,就会显示浏览器默认的字体。(因为用户是否可以看到你设置的字体样式取决于用户本地电脑上是否安装你设置的字体。)
现在一般网页喜欢设置“ 微软雅黑
”,如下代码:
body{
font-family:"Microsoft Yahei";}
/* 等价关系 */
body{
font-family:"微软雅黑";}
注意:第一种方法比第二种方法兼容性更好一些
font-size:
设置字体大小
font-weight:
设置字体粗细
font-style:
设置字体样式,normal
是正常字体,系统默认; italic
设置字体为斜体,用于字体本身就有倾斜的样式;oblique
设置倾斜的字体,强制将字体倾斜。
color
设置字体颜色,其属性设置字体颜色
属性设置方式,有三种设置方式:
英文命令颜色
p{
color:red;}
RGB颜色: 与 photoshop
中的 RGB
颜色是一致的,由 R(red)
、G(green)
、B(blue)
三种颜色的比例来配色;每一项的值可以是 0~255
之间的整数,也可以是 0%~100%
的百分数
p{
color:rgb(133,45,200);}
十六进制颜色: 这种颜色设置方法是现在比较普遍使用的方法,其原理其实也是 RGB
设置,但是其每一项的值由 0-255
变成了十六进制 00-ff
。
p{
color:#00ffff;}
font
样式的简写方式 网页中的字体css
样式代码也有他自己的缩写方式,👇面是给网页设置字体的代码:
body{
font-style:italic;
font-weight:bold;
font-size:12px;
line-height:1.5em;
font-family:"宋体",sans-serif;
}
缩写为一句如👇:
body{
font:italic bold 12px/1.5em "宋体",sans-serif;
}
注意:
1、使用这一简写方式你至少要指定 font-size
和 font-family
属性,其他的属性(如 font-weight
、font-style
、font-variant
、line-height
)如未指定将自动使用默认值。
2、在缩写时 font-size
与 line-height
中间要加入“/”
斜扛。
一般情况下因为对于中文网站,英文还是比较少的,所以下面缩写代码比较常用:只是有字号、行间距、中文字体、英文字体设置。
body{
font:12px/1.5em "宋体",sans-serif;
}
CSS3文本样式
text-decoration
添加文本修饰: 可以设置添加到文本的修饰,默认值为 none
,定义标准的文本。
text-decoration
的值为 underline
为定义文本下的一条线
text-decoration
的值为 overline
为定义文本上的一条线text-decoration
的值为 line-through
为定义穿过文本下的一条线
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>文本修饰</title> <style type="text/css"> .box1{
text-decoration: overline;
/*表示装饰在文本顶部*/
}
.box2{
text-decoration: underline;
/*表示装饰在文本底部*/
}
.box3{
text-decoration: line-through;
/*表示装饰从文本穿过*/
}
p{
color:red;
}
</style>
</head>
<body>
<div class="box1">
<p>有一条线在我头上</p>
</div>
<div class="box2">
<p>有一条线在我脚底</p>
</div>
<div class="box3">
<p>有一条线从我身体穿过</p>
</div>
</body>
</html>
text-indent
为文本添加首行缩进 中文文字中的段前习惯空两个文字的空白,这个特殊的样式可以用下面代码来实现:
p{
text-indent:2em;}
/* 2em的意思就是文字的2倍大小 */
line-height
为文字设置行间间距
p{
line-height: 2em;}
/* 设置段落行间距(行高) 为 2em*/
letter/word-spacing
增加或减少字符间的空白 letter-spacing:
网页排版中设置文字间隔或者字母间隔word-spacing
设置英文单词之间的间距
text-align
设置文本对齐方式,为块状元素中的文本、图片设置样式,center
设置居中,left
设置居左,right
设置居右
长度值: 比较常用到 px
(像素)、em
、%
百分比。
像素 像素为什么是相对单位呢?因为像素指的是显示器上的小点(CSS
规范中假设“90像素=1英寸
”)。实际情况是浏览器会使用显示器的实际像素值有关,在目前大多数的设计者都倾向于使用像素(px
)作为单位。
em 就是本元素给定字体的 font-size
值,如果元素的 font-size
为 14px
,那么 1em = 14px
;如果 font-size
为 18px
,那么 1em = 18px
p{
font-size:12px;text-indent:2em;}
/*上面代码就是可以实现段落首行缩进 24px(也就是两个字体大小的距离)*/
当给 font-size
设置单位为 em
时,此时计算的标准以 p
的父元素的 font-size
为基础。
p{
font-size:14px}
span{
font-size:0.8em;}
/*span 中的字体“例子”字体大小就为 11.2px(14 * 0.8 = 11.2px)*/
百分比:
p{
font-size:12px;line-height:130%}
/*设置行高(行间距)为字体的130%(12 * 1.3 = 15.6px)*/
CSS3盒模型
元素分类: 在CSS
中,html
中的标签元素大体被分为三种不同的类型:块状元素、内联元素(又叫行内元素)和内联块状元素。
常用的块状元素有:div
,p
、h1
…h6
、ol
、ul
、dl
、table
、address
、blockquote
、form
常用的内联元素有:a
、span
、br
、i
、em
、strong
、label
、q
、var
、cite
、code
常用的内联块状元素有:img
、input
设置 display:block
就是将 元素
显示为 块级元素
块级元素特点:
1.每个块级元素都从新的一行开始,并且其后的元素也另起一行;即一个块级元素独占一行
2.元素的高度、宽度、行高以及顶和底边距都可设置。
3.元素宽度在不设置的情况下,是它本身父容器的100%(和父元素的宽度一致),除非设定一个宽度。
display:inline
将元素设置为内联元素
内联元素特点:
1.和其他元素都在一行上;
2.元素的高度、宽度及顶部和底部边距不可设置;
3.元素的宽度就是它包含的文字或图片的宽度,不可改变。
内联块状元素: 同时具备内联元素、块状元素的特点;display:inline-block
就是将元素设置为内联块状元素;【css2.1
新增,img
、input
标签就是这种内联块状标签】
inline-block 元素特点:
1.和其他元素都在一行上;
2.元素的高度、宽度、行高以及顶和底边距都可设置。
none
:不占据位置
display: none;
/*当想要元素隐藏的时候可以使用此值。*/
Box Model
块级标签都具备盒子模型的特征。
css
内定义的宽(width
)和高(height
),指的是填充以里的内容范围
一个元素实际宽度(盒子的宽度)=左边界+左边框+左填充+内容宽度+右填充+右边框+右边界
div{
width:200px;
padding:20px;
border:1px solid red;
margin:10px;
}
/*元素的实际长度为:10px+1px+20px+200px+20px+1px+10px=262px。在 chrome浏览器下可查看元素盒模型 */
网页中的标签不论是 行内元素
还是 块状元素
都可以给它设置一个背景色。
background-color:颜色值
/*为标签设置背景颜色*/
使用 border
为盒子添加边框;盒子模型的边框就是围绕着内容及补白的线,这条线你可以设置它的粗细、样式和颜色
div{
border:2px solid red;
}
👆等价于👇
div{
border-width:2px;
border-style:solid;
border-color:red;
}
border-style
(边框样式)常见样式有;dashed
(虚线)| dotted
(点线)| solid
(实线)
border-color
(边框颜色)中的颜色可设置为十六进制颜色
border-width
(边框宽度)中的宽度也可以设置为:thin
| medium
| thick
但不是很常用,最常还是用像素 px
border
为盒子添加边框border-bottom:1px solid red
:下边框border-top:1px solid red
:上边框border-right:1px solid red
:右边框border-left:1px solid red
:左边框
border-radius
设置圆角,圆角默认顺序可分为左上、右上、右下、左下border-top-left-radius:10px
设置左上角圆角border-top-right-radius: 10px
设置右上角圆角border-bottom-right-radius: 10px
设置右下角圆角border-bottom-left-radius: 10px
设置左下角圆角
padding
为盒子设置内边距(填充);元素内容与边框之间是可以设置距离的,称之为“内边距(填充)”;填充也可分为上、右、下、左(顺时针)
div{
padding:20px 10px 15px 30px;}
👆👇等价 div{
padding-top:20px;
padding-right:10px;
padding-bottom:15px;
padding-left:30px;
}
/*上、右、下、左的填充都为10px*/
div{
padding:10px;}
/*上下填充一样为10px,左右一样为20px*/
div{
padding:10px 20px;}
margin
为盒子设置外边距(边界);元素与其它元素之间的距离可以使用边界(margin)来设置。边界也是可分为上、右、下、左(顺时针)
div{
margin:20px 10px 15px 30px;}
/*👆👇等价*/
div{
margin-top:20px;
margin-right:10px;
margin-bottom:15px;
margin-left:30px;
}
/*上右下左的边界都为10px*/
div{
margin:10px;}
/*上下边界一样为10px,左右一样为20px*/
div{
margin:10px 20px;}
总结:padding
在边框里,margin
在边框外
css布局模型有三种 流动模型(Flow)、浮动模型(Float) 、层模型(Layer)
流动模型 是默认的网页布局模式
流动布局模型具有2个比较典型的特征:
1.块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%;实际上,块状元素都会以行的形式占据位置。
2.在流动模型下,内联元素都会在所处的包含元素内从左到右水平分布显示。
浮动模型: 使两个元素并排显示,任何元素在默认情况下是不能浮动的,但可以用 CSS 定义为浮动float:left
向左浮动float:right
向右浮动
层模型: 层布局模型就像是图像软件 P h o t o S h o p PhotoShop PhotoShop 中非常流行的图层编辑功能一样,每个图层能够精确定位操作
层模型有三种形式 绝对定位position:absolute)、相对定位(position: relative)、固定定位(position: fixed)
层模型之绝对定位 需要设置 position:absolute
(表示绝对定位),这条语句的作用将元素从文档流中拖出来,然后使用 left
、right
、top
、bottom
属性相对于其最接近的一个具有定位属性的父包含块进行绝对定位。如果不存在这样的包含块,则相对于 body
元素,即相对于浏览器窗口
实现 d i v div div 元素相对于浏览器窗口向右移动 100 p x 100px 100px,向下移动 50 p x 50px 50px 即左边空出 100 p x 100px 100px,上边空出 50 p x 50px 50px
层模型之相对定位 需要设置 position:relative
(表示相对定位),它通过 left
、right
、top
、bottom
属性确定元素在正常文档流中的偏移位置。相对定位完成的过程是首先按 static(float)
方式生成一个元素(并且元素像层一样浮动了起来),然后相对于以前的位置移动,移动的方向和幅度由 left
、right
、top
、bottom
属性确定,偏移前的位置保留不动。
层模型之固定定位: 需要设置 position:fixed
表示固定定位,由于视图本身是固定的,它不会随浏览器窗口的滚动条滚动而变化,除非你在屏幕中移动浏览器窗口的屏幕位置,或改变浏览器窗口的显示大小,因此固定定位的元素会始终位于浏览器窗口内视图的某个位置,不会受文档流动影响,这与 background-attachment:fixed
;属性功能相同。
Relative
与 Absolute
组合使用,相对于其它元素进行定位,必须遵守下面规范:
1.参照定位的元素必须是相对定位元素的前辈元素
<div id="box1"><!--参照定位的元素-->
<div id="box2">相对参照元素进行定位</div><!--相对定位元素-->
</div>
/*box1是box2的父元素*/
2.参照定位的元素必须加入 position:relative
#box1{
width:200px;
height:200px;
position:relative;
}
3.定位元素加入 position:absolute
,便可以使用 top
、bottom
、left
、right
来进行偏移定位
#box2{
position:absolute;
top:20px;
left:30px;
}
/*box2就可以相对于父元素box1定位了;这里注意参照物就可以不是浏览器了,而可以自由设置了*/
flex弹性盒模型
display:flex
将块状元素能在一排显示;flex
需要添加到父元素上,改变子元素的排列顺序;子元素默认从左到右进行排序,且和父元素左边没有间隙。justify-content
属性设置横轴排列方式
flex-start:
交叉轴的起点对齐flex-end:
右对齐center:
居中space-between:
两端对齐,项目之间的间隔都相等space-around:
每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍
align-items:
属性设置纵轴排列方式flex-start:
默认值,左对齐flex-end:
交叉轴的终点对齐center:
交叉轴的中点对齐baseline:
项目的第一行文字的基线对齐;盒子中设置不同的字体大小,可以参考编辑器中的代码进行测试stretch(默认值):
如果项目未设置高度或设为auto,将占满整个容器的高度。flex属性
设置子元素相对于父元素的占比
1.给子元素设置flex属性,可以设置子元素相对于父元素的占比
2.flex属性的值只能是正整数,表示占比多少
3.给子元素设置了flex之后,其宽度属性会失效
水平居中设置-行内元素: 区分行内元素还是块状元素,块状元素里面又分为定宽块状元素,以及不定宽块状元素
被设置元素为文本、图片等行内元素时,水平居中是通过给父元素设置 text-align:center
来实现的
水平居中设置-定宽块状元素:
当被设置元素为 块状元素
时用 text-align:center
就不起作用了,这时分 定宽块状元素
和 不定宽块状元素
两种情况定宽块状元素:
块状元素的宽度 width
为固定值;定宽和块状两个条件的元素是可以通过设置“左右 margin
”值为“ auto
”来实现居中的
margin-left:auto;
margin-right:auto;
或者
margin:20px auto;
/* margin-left 与 margin-right 设置为 auto */
已知宽高实现盒子水平垂直居中?
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>已知宽高实现盒子水平垂直居中</title> <style type="text/css"> .box {
border: 1px solid #00ee00;
height: 300px;
position: relative; /*父元素相对定位*/
}
.box1 {
position:absolute; /*子元素相对定位*/
top:50%; /*top值为50%*/
left:50%; /*left值为50%*/
margin:-100px 0 0 -100px;
/* margin-top的值为负的高度的一半 margin-left的值为负的宽度的一半 */
width: 200px;
height: 200px;
border: 1px solid red;
}
</style>
</head>
<body>
<div class="box">
<div class="box1"></div>
</div>
</body>
</html>
技术点的解释:
1.利用父元素设置相对定位,子元素设置绝对定位,那么子元素就是相对于父元素定位的特性
2.子元素设置上和左偏移的值都为 50%
,是元素的左上角在父元素中心点的位置
3.然后再用 margin
给上和左都给负的自身宽高的一半,就能达到垂直水平居中的效果
面试常考题之宽高不定如何实现盒子水平垂直居中?
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>宽高不定实现盒子水平垂直居中</title> <style type="text/css"> .box {
border: 1px solid #00ee00;
height: 300px;
position: relative;
}
.box1 {
border: 1px solid red;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
</style>
</head>
<body>
<div class="box">
<div class="box1">
我是Edviv
</div>
</div>
</body>
</html>
技术点的解释:
1.利用父元素设置相对定位,子元素设置绝对定位,那么子元素就是相对于父元素定位的特性
2.子元素设置上和左偏移的值都为50%
3.然后再用css3属性translate位移,给上和左都位移-50%距离,就能达到垂直水平居中的效果