CSS基础

选择器

标签选择器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
p {
color: red;
}
</style>
</head>
<body>
<p>
这里是p标签
</p>
</body>
</html>

类选择器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.paragraph {
color: red;
}
</style>
</head>
<body>
<p class="paragraph">
这里是p标签
</p>
</body>
</html>

ID选择器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#paragraph {
color: red;
}
</style>
</head>
<body>
<p id="paragraph">
这里是p标签
</p>
</body>
</html>

同一个id应该只使用一次,最好不要重复使用,用在页面唯一需要修改样式的地方

通配符选择器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<p>
这里是p标签
</p>
</body>
</html>

基础选择器总结

常见CSS属性设置

字体属性

字体大小

1
2
3
4
5
<style>
div {
font-size: 20px;
}
</style>

谷歌浏览器默认的字体大小是16px,可以给整个body指定一个字体大小

字体粗细

1
2
3
4
5
<style>
div {
font-weight: bold;
}
</style>

字体粗细

经常使用数值来设置粗细

字体样式

1
2
3
4
5
<style>
div {
font-style: normal;
}
</style>

文字倾斜

学会去掉倾斜样式

字体综合设置

一行代码设置字体样式,粗细,大小/高度,以及字体

1
2
3
4
5
<style>
div {
font: font-style font-weight font-size/line-height font-family;
}
</style>

使用 font 属性时,必须按上面语法格式中的顺序书写,不能更换顺序,并且各个属性间以空格隔开 不需要设置的属性可以省略(取默认值),但必须保留 font-size 和 font-family 属性,否则 font 属性将不起作用

字体总结

字体总结

CSS文本属性

文本颜色

1
2
3
4
5
<style>
div {
color:red;
}
</style>

颜色值

文本对齐

  • text-align: center; 只能是水平居中,不能上下居中
  • text-align: left;左对齐
  • text-align: right;右对齐
1
2
3
4
5
6
7
8
9
10
11
<style>
h1 {
text-align: center;
}
h2 {
text-align: left;
}
h3 {
text-align: right;
}
</style>

文本划线

1
2
3
4
5
6
7
8
9
10
11
<style>
div {
text-decoration: underline;/*下划线*/
text-decoration: line-through;/*删除线*/
text-decoration: overline;/*上划线*/
}
a {
/*去掉超链接的下划线*/
text-decoration: none;
}
</style>

文本缩进

1
2
3
4
5
6
7
8
<style>
p {
/*让文本的首行缩进20像素*/
text-indent: 20px;/*也可以写-20px,向左缩进*/
/*表示缩进当前文字俩个大小的距离,单位为em*/
text-indent: 2em;
}
</style>

行间距

1
2
3
4
5
6
7
8
9
10
11
<style>
p {
line-height: 26px;
/*
行间距包括:
上间距
行高
下间距
*/
}
</style>

image-20201030153037485

文本属性总结

文本属性总结

CSS引入方式

  1. 内部样式表(嵌入式)
  2. 行内样式表(行内式)
  3. 外部样式表(链接式)

内部样式表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
<head>
<style>
div {
color:red;
}
</style>
</head>
<body>
<div>
这是一个div标签
</div>
<style>
div {
color:red;
}
</style>
</body>
</html>

行内样式表

1
<div style="color: red; font-size: 12px;">

外部样式表

外部单独建立CSS文件,然后在HTML文档里引入即可

1
2
3
div {
color:pink;
}
1
2
3
<head>
<link rel="stylesheet" href="css文件路径">
</head>

引入方式总结

css引入方式总结

Emmet语法

  1. 快速生成HTML结构
  2. 快速生成CSS样式

快速生成HTML结构语法

  1. 生成标签 直接输入标签名 按tab键即可 比如 div 然后tab 键, 就可以生成
  2. 如果想要生成多个相同标签 加上 * 就可以了 比如 div*3 就可以快速生成3个div
  3. 如果有父子级关系的标签,可以用 > 比如 ul > li就可以了
  4. 如果有兄弟关系的标签,用 + 就可以了 比如 div+p
  5. 如果生成带有类名或者id名字的, 直接写 .demo 或者 #two tab 键就可以了
  6. 如果生成的div 类名是有顺序的, 可以用 自增符号 $
  7. 如果想要在生成的标签内部写内容可以用 { } 表示

快速生成CSS样式语法

CSS 基本采取简写形式即可

​ 1. 比如 w200 按tab 可以 生成 width: 200px;

​ 2. 比如 lh26px 按tab 可以生成 line-height: 26px;

CSS复合选择器

后代选择器

选择该标签里所有该后代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>复合选择器</title>
<style>
ol li {
color: red;
}
ol li a {
color: red;
}
.nav li a {
color: red;
}
</style>
</head>
<body>
<ol>
<li>我是ol里的li</li>
<li>我是ol里的li</li>
<li>我是ol里的li</li>
<li>我是ol里的li</li>
<li><a href="#">我是ol里的li</a></li>
</ol>

<ul>
<li>我是ul里的li</li>
<li>我是ul里的li</li>
<li>我是ul里的li</li>
<li>我是ul里的li</li>
<li><a href="#">我是ul里的li</a></li>
<li><a href="#">我是ul里的li</a></li>
<li><a href="#">我是ul里的li</a></li>
<li><a href="#">我是ul里的li</a></li>
</ul>

<ul class="nav">
<li>我是ul里的li</li>
<li>我是ul里的li</li>
<li>我是ul里的li</li>
<li>我是ul里的li</li>
<li><a href="#">我是ul里的li</a></li>
<li><a href="#">我是ul里的li</a></li>
<li><a href="#">我是ul里的li</a></li>
<li><a href="#">我是ul里的li</a></li>
<li><a href="#">我是ul里的li</a></li>
</ul>
</body>
</html>

子选择器

选择离他最近的子元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>复合选择器</title>
<style>
.nav > a {
color: red;
}

/*div a {*/
/* color: red;*/
/*}*/
</style>
</head>
<body>
<div class="nav">
<a href="#">
我是亲儿子
</a>
<p>
<a href="#">我是孙子</a>
</p>
</div>
</body>
</html>

并集选择器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<style>
div,
p{
color: red;
}
</style>
<body>
<div>
熊大
</div>
<p>
熊二
</p>
</body>

伪类选择器

链接伪类

语法:

​ 伪类选择器书写最大的特点是用冒号(:)表示,比如 :hover 、 :first-child 。

​ a:link 没有点击过的(访问过的)链接
​ a:visited 点击过的(访问过的)链接
​ a:hover 鼠标经过的那个链接
​ a:active 鼠标正在按下还没有弹起鼠标的那个链接

链接伪类选择器注意事项

​ 为了确保生效,请按照 LVHA 的循顺序声明 :link-:visited-:hover-:active。

​ 记忆法:love hate 或者 lv 包包 hao 。

​ 因为 a 链接在浏览器中具有默认样式,所以我们实际工作中都需要给链接单独指定样式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>复合选择器</title>
<style>
/*未被访问的链接*/
a:link {
color: #333333;
text-decoration: none;
}

/*已经访问过的*/
a:visited {
color: orange;
}

/*鼠标经过*/
a:hover {
color: skyblue;
}

/*活动的链接,鼠标点下去不放开时显示的效果*/
a:active {
color: green;
}
</style>
</head>
<body>
<div class="nav">
<a href="#">
小猪佩奇
</a>
</div>
</body>
</html>

开发常用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>复合选择器</title>
<style>
/*未被访问的链接*/
a {
color: black;
text-decoration: none;
}

/*鼠标经过*/
a:hover {
color: skyblue;
}

</style>
</head>
<body>
<div class="nav">
<a href="#">
小猪佩奇
</a>
</div>
</body>
</html>

focus 伪类选择器

focus焦点就是光标,一般input标签里的text可以获取到光标,用来修改聚焦到光标后的样式变化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>复合选择器</title>
<style>
input:focus {
background-color: pink;
color: red;
}

</style>
</head>
<body>
<div class="nav">
<input type="text">
<input type="text">
<input type="text">
</div>
</body>
</html>

复合选择器总结

1570868930472

元素的显示模式

1、什么是元素的显示模式

定义:

​ 元素显示模式就是元素(标签)以什么方式进行显示,比如

自己占一行,比如一行可以放多个

作用:

​ 网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好的布局我们的网页。

2、元素显示模式分类

2.1 块元素

常见的块元素

1
2
3
4
5
6
<h1>~<h6>
<p>
<div>
<ul>
<ol>
<li>

div 是最典型的块元素

块级元素的特点

  • 比较霸道,自己独占一行。
  • 高度,宽度、外边距以及内边距都可以控制。
  • 宽度默认是容器(父级宽度)的100%。
  • 是一个容器及盒子,里面可以放行内或者块级元素。

注意

文字类的元素内不能放块级元素

例如

1
2
3
<p> 标签主要用于存放文字,因此 <p> 里面不能放块级元素,特别是不能放<div> 
同理,
<h1>~<h6>等都是文字类块级标签,里面也不能放其他块级元素

2.2 行内元素

常见的行内元素:

1
2
3
4
5
6
7
8
9
10
<a>
<strong>
<b>
<em>
<i>
<del>
<s>
<ins>
<u>
<span>

标签是最典型的行内元素。有的地方也将行内元素称为内联元素。

行内元素的特点:

  • 相邻行内元素在一行上,一行可以显示多个。

  • 高、宽直接设置是无效的。

  • 默认宽度就是它本身内容的宽度。

  • 行内元素只能容纳文本或其他行内元素,不能容纳块元素例如div。

注意:
链接里面不能再放链接
特殊情况链接 里面可以放块级元素,但是给 转换一下块级模式最安全

2.3 行内块元素

常见的行内块标签

1
2
3
<img />
<input />
<td>

​ 它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素。

行内块元素的特点

  • 和相邻行内元素(行内块)在一行上,但是他们之间会有空白缝隙。
  • 一行可以显示多个(行内元素特点)。
  • 默认宽度就是它本身内容的宽度(行内元素特点)。
  • 高度,行高、外边距以及内边距都可以控制(块级元素特点)。

3、元素显示模式总结

1570870718415

4、元素显示模式转换

1
2
3
4
5
6
7
<style>
a {
display:block;/*转换为块级元素*/
display:inline;/*转换为行内元素*/
display:inline-block;/*转换为行内块元素*/
}
</style>

5、实现块内垂直居中

让文字行高和块元素的高度相同即可,

height: 40px

line-height: 40px

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>小米官网</title>
<style>
/*把a转换为块级标签*/
a {
display: block;
width: 230px;
height: 40px;
background-color: #55585a;
font-size: 14px;
color: white;
text-decoration: none;
text-indent: 2em;
line-height: 40px;
/*text-align: center;*/
}
/*鼠标经过*/
a:hover {
background-color: #ff6700;
}
</style>
</head>
<body>
<a href="">手机 电话卡</a>
<a href="">电视 盒子</a>
<a href="">笔记本 平板</a>
<a href="">出行 穿戴</a>
<a href="">智能 路由器</a>
<a href="">健康儿童</a>
<a href="">耳机 音箱</a>
</body>
</html>

背景

背景图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>bgc</title>
<style>
div {
width: 1920px;
height: 1080px;
background-image: url(https://cdn.jsdelivr.net/gh/zhao-v/blog-img/img/20201019235515.png)
}
</style>
</head>
<body>
<div></div>
</body>
</html>

其他说明

​ 实际开发常见于 logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)

​ 注意:背景图片后面的地址,千万不要忘记加 URL, 同时里面的路径不要加引号

背景平铺

1
background-repeat:repeat | no-repeat | repeat-x | repeat-y

1570886684882

背景图片位置

1
background-position: top center;

image-20201031150908827

其他说明:

1、参数是方位名词

​ 如果指定的两个值都是方位名词,则两个值前后顺序无关,比如 left top 和 top left 效果一致

​ 如果只指定了一个方位名词,另一个值省略,则第二个值默认居中对齐

2、参数是精确单位

​ 如果参数值是精确坐标,那么第一个肯定是 x 坐标,第二个一定是 y 坐标

​ 如果只指定一个数值,那该数值一定是 x 坐标,另一个默认垂直居中

3、参数是混合单位

​ 如果指定的两个值是精确单位和方位名词混合使用,则第一个值是 x 坐标,第二个值是 y 坐标

背景图片固定(背景附着)

1
background-attachment: scroll | fixed;

image-20201031153451950

背景复合写法

背景合写样式:

​ background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置;

1
background: transparent url(image.jpg) repeat-y fixed top;

背景色半透明

1
background: rgba(255,255,255,0.3);

背景总结

image-20201031154329084

CSS三大特性

层叠性

冲突的样式,按就近原则,离使用目标近的使用

image-20201031161803423

继承性

1571490049279

子元素可以继承父元素的样式:(text-,font-,line-这些元素开头的可以继承,以及color属性)

行高的用法

1
2
3
body {
font: 12px/1.5 Microsoft YaHei;
}
  • 行高可以跟单位也可以不跟单位
  • 如果子元素没有设置行高,则会继承父元素的行高为 1.5
  • 此时子元素的行高是:当前子元素的文字大小 * 1.5
  • body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高

优先级

  • 选择器相同,则执行层叠性
  • 选择器不同,则根据选择器权重执行

image-20201031163648929

优先级注意点:

  1. 权重是有4组数字组成,但是不会有进位。
  2. 可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..
  3. 等级判断从左向右,如果某一位数值相同,则判断下一位数值。
  4. 可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.
  5. 继承的权重是0, 如果该元素没有直接选中,不管父元素权重多高,子元素得到的权重都是 0。

复合选择器标签叠加,但是不会进位

  • div ul li ——> 0,0,0,3
  • .nav ul li ——> 0,0,1,2
  • a:hover —–—> 0,0,1,1
  • .nav a ——> 0,0,1,1

盒子模型

CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框外边距内边距、和 实际内容

1571492536942

边框(border)

1
2
3
div {
border: border-width || border-style || border-color;
}

image-20201031191633722

边框样式 border-style 可以设置如下值:

  • none:没有边框即忽略所有边框的宽度(默认值)
  • solid:边框为单实线(最为常用的)
  • dashed:边框为虚线
  • dotted:边框为点线

四条边框合写:

1
border: 1px solid red;

每条边框分开写:

1
border-top: 1px solid red;  /* 只设定上边框, 其余同理 */  

表格边框

1、border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。

2、语法:

1
border-collapse:collapse; 

collapse 单词是合并的意思

border-collapse: collapse; 表示相邻边框合并在一起

边框会影响盒子实际大小

边框会额外增加盒子的实际大小。因此我们有两种方案解决:

  • 测量盒子大小的时候,不量边框。
  • 如果测量的时候包含了边框,则需要 width/height 减去边框宽度

内边距(padding)

内边距的使用方式

1、padding 属性用于设置内边距,即边框与内容之间的距离。

2、语法:

合写属性:

1571493298248

分写属性:

1571493260536

内边距会影响盒子实际大小

1、当我们给盒子指定 padding 值之后,发生了 2 件事情:

  1. 内容和边框有了距离,添加了内边距。
  2. padding影响了盒子实际大小。

2、内边距对盒子大小的影响:

  • 如果盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子。
  • 如何盒子本身没有指定width/height属性, 则此时padding不会撑开盒子大小。

3、解决方案:

​ 如果保证盒子跟效果图大小保持一致,则让 width/height 减去多出来的内边距大小即可。

外边距(margin)

外边距的使用方式

margin 属性用于设置外边距,即控制盒子和盒子之间的距离。

外边距典型应用

外边距可以让块级盒子水平居中的两个条件:

  • 盒子必须指定了宽度(width)。
  • 盒子左右的外边距都设置为 auto 。

常见的写法,以下三种都可以:

1
2
3
margin-left: auto;   margin-right: auto;
margin: auto;
margin: 0 auto;

注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加 text-align:center 即可。

外边距合并

使用 margin 定义块元素的垂直外边距时,可能会出现外边距的合并。

主要有两种情况:

1、相邻块元素垂直外边距的合并

​ 当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom,下面的元素有上外边距 margin-top ,则他们之间的垂直间距不是 margin-bottom 与 margin-top 之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并。

1571494239103

解决方案:
尽量只给一个盒子添加 margin 值。

2、嵌套块元素垂直外边距的塌陷

​ 对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。

1571494373778

解决方案:

  • 可以为父元素定义上边框。
  • 可以为父元素定义上内边距。
  • 可以为父元素添加 overflow:hidden

导航栏

一般不直接用a标签,都是用li标签来做

其他常用样式

圆角边框(CSS3)

1
border-radius:length;    
  • 参数值可以为数值或百分比的形式
  • 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为 50%
  • 该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角
  • 分开写:border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius
  • 兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用

盒子阴影

1
box-shadow: h-shadow v-shadow blur spread color inset; 

1571541874805

文字阴影

在 CSS3 中,我们可以使用 text-shadow 属性将阴影应用于文本。
语法:

1
text-shadow: h-shadow v-shadow blur color;

1571541954222

浮动

​ float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。

1
2
3
div { 
float: left;
}

1571543209934

浮动属性本来是用来在文字中嵌入图片所用的,就相当于在word文档中插入图片,然后选择文字环绕方式,所以浮动不会遮盖周围文字。

  • 浮动的元素会具有行内块元素的特性
  • 浮动元素的大小根据内容来决定
  • 浮动的盒子中间是没有缝隙的

浮动元素经常和标准流父级搭配使用

为了约束浮动元素位置, 我们网页布局一般采取的策略是:

​ 先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧

1571544991989

Tips:
浮动布局注意点:

1、浮动和标准流的父盒子搭配。

先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置

2、一个元素浮动了,理论上其余的兄弟元素也要浮动。

一个盒子里面有多个子盒子,如果其中一个盒子浮动了,其他兄弟也应该浮动,以防止引起问题。

浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流

清除浮动

清除浮动的本质是清除浮动元素造成的影响:浮动的子标签无法撑开父盒子的高度

注意:

  • 如果父盒子本身有高度,则不需要清除浮动
  • 清除浮动之后,父级就会根据浮动的子盒子自动检测高度。
  • 父级有了高度,就不会影响下面的标准流了

清除浮动样式

1
选择器{clear:属性值;} 

1571555980419

实际应用中, 几乎只用 clear: both;清除浮动的策略是: 闭合浮动。

清除浮动的多种方式

额外标签法

额外标签法也称为隔墙法,是 W3C 推荐的做法。

使用方式:

​ 额外标签法会在浮动元素末尾添加一个空的标签。

1
例如 <div style="clear:both"></div>,或者其他标签(如<br />等)。

注意: 要求这个新的空标签必须是块级元素。

父级添加 overflow 属性

可以给父级添加 overflow 属性,将其属性值设置为 hidden、 auto 或 scroll 。

1
overflow:hidden | auto | scroll;

优点:代码简洁

缺点:无法显示溢出的部分

注意:是给父元素添加代码

父级添加after伪元素

:after 方式是额外标签法的升级版。给父元素添加:

1
2
3
4
5
6
7
8
9
10
.clearfix:after {  
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix { /* IE6、7 专有 */
*zoom: 1;
}

优点:没有增加标签,结构更简单

缺点:照顾低版本浏览器

代表网站: 百度、淘宝网、网易等

父级添加双伪元素

给父元素添加

1
2
3
4
5
6
7
8
9
10
.clearfix:before,.clearfix:after {
content:"";
display:table;
}
.clearfix:after {
clear:both;
}
.clearfix {
*zoom:1;
}

优点:代码更简洁

缺点:照顾低版本浏览器

代表网站:小米、腾讯等

1571556500074

CSS属性书写顺序

建议遵循以下顺序:

  1. 布局定位属性:display / position / float / clear / visibility / overflow(建议 display 第一个写,毕竟关系到模式)
  2. 自身属性:width / height / margin / padding / border / background
  3. 文本属性:color / font / text-decoration / text-align / vertical-align / white- space / break-word
  4. 其他属性(CSS3):content / cursor / border-radius / box-shadow / text-shadow / background:linear-gradient …

举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
.jdc {
display: block;
position: relative;
float: left;
width: 100px;
height: 100px;
margin: 0 10px;
padding: 20px 0;
font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
color: #333;
background: rgba(0,0,0,.5);
border-radius: 10px;
}

定位(position)

定位就是把一些元素随意的固定在任何位置

定位 = 定位模式 + 边偏移

定位模式 用于指定一个元素在文档中的定位方式。边偏移则决定了该元素的最终位置。

子绝父相

定位模式

position

语义
static 静态定位
relative 相对定位
absolute 绝对定位
fixed 固定定位

边偏移

边偏移属性 示例 描述
top top: 80px 顶端偏移量,定义元素相对于其父元素上边线的距离
bottom bottom: 80px 底部偏移量,定义元素相对于其父元素下边线的距离
left left: 80px 左侧偏移量,定义元素相对于其父元素左边线的距离
right right: 80px 右侧偏移量,定义元素相对于其父元素右边线的距离

定位类型

静态定位(static)

1
2
3
4
{
position:static;
top:100px;
}

还按标准流显示,一般不用

相对定位(relative)

根据自己原来的位置为准,然后进行移动,即相对原来的位置平移。

1
2
3
4
{
position: relative;
top:100px;
}

移动之后,原来的位置还是自己的,继续占有原来的位置

绝对定位(absolute)

相对于祖先元素进行平移,祖先元素必须同时使用定位才有效,否则以浏览器为准移动,而且以最近一级的定位为基准。

1
2
3
4
{
position: absolute;
top: 100px;
}

绝对定位不再占有原先的位置,飞的比float高。

固定定位(fixed)

以浏览器可视区域为准移动

1
2
3
4
5
{
position: fixed;
top: 100px;
right: 40px;
}

不再保留原来的位置

体会最深的就是各种网页侧边广告

Tip:(贴到版心盒子右边,不随页面大小改变)

1
2
3
4
5
{
position: fixed;
left: 50%;/*先走页面的一半*/
margin-left10px/*然后再走版心的一半像素*/
}

粘性定位(sticky)

1
2
3
4
{
position: sticky;
top: 10px;
}

以浏览器的可视窗口为参照点移动,占有原先的位置,使用的时候必须添加top、left、right、bottom、其中的一个才有效。

兼容性差,一般不用,所见到的相同的网页效果一般都是用JavaScript做的

定位的叠放次序(z-index)

z-index

1
2
3
{
z-index: 1;/*数值越大越靠上,可以为负数*/
}

如果值相同,则按照书写顺序后来者居上,不能加单位,且只有定位的盒子才有效

定位的拓展

因为父级需要占有位置,因此是相对定位, 子盒子不需要占有位置,则是绝对定位

当然,子绝父相不是永远不变的,如果父元素不需要占有位置,子绝父绝也会遇到。

实现水平居中

1
2
3
4
5
{
position: absolute;
left: 50%;
margin-left: -100px;
}

实现垂直居中

1
2
3
4
5
{
position: absolute;
top: 50%;
margin-top: -100px;
}
  1. 行内元素加绝对定位或者固定定位,可以直接设置高度和宽度

  2. 块级元素添加绝对或者固定定位,如果不给宽度和高度,默认就是内容的宽度和高度

  3. 浮动,绝对定位(固定定位)的元素不会触发外边距合并的问题。

浮动的元素不会压住下面标准流的段落或图片,如果是绝对定位或者固定定位会压住段落或图片。

浮动的最初设计理念是为了实现文字中图片的环绕效果,就好比word中的文字环绕效果

定位总结

定位模式 是否脱标 移动位置 是否常用
static 静态定位 不能使用边偏移 很少
relative 相对定位 否 (占有位置) 相对于自身位置移动 基本单独使用
absolute绝对定位 是(不占有位置) 带有定位的父级 要和定位父级元素搭配使用
fixed 固定定位 是(不占有位置) 浏览器可视区 单独使用,不需要父级
sticky 粘性定位 否 (占有位置) 浏览器可视区 当前阶段少
  1. 边偏移需要和定位模式联合使用,单独使用无效
  2. topbottom 不要同时使用;
  3. leftright 不要同时使用。

定位(position)应用

一般页面底部的返回顶部按钮摆放

1
2
3
4
5
6
7
8
9
10
.fixed {
position: fixed;
/* 1. 走浏览器宽度的一半 */
left: 50%;
/* 2. 利用margin 走版心盒子宽度的一半距离 */
margin-left: 450px;
width: 50px;
height: 150px;
background-color: skyblue;
}

显示与隐藏

  1. display

    • display 设置或检索对象是否及如何显示。

      1
      2
      3
      display: none 隐藏对象

      display:block 除了转换为块级元素之外,同时还有显示元素的意思。
    • 特点: display 隐藏元素后,不再占有原来的位置。

    • 后面应用及其广泛,搭配 JS 可以做很多的网页特效。实际开发场景:

  2. visibility

    • visibility 属性用于指定一个元素应可见还是隐藏。

      1
      2
      3
      visibility:visible ;  元素可视

      visibility:hidden;   元素隐藏
    • 特点:visibility 隐藏元素后,继续占有原来的位置。(停职留薪)

    • 如果隐藏元素想要原来位置, 就用 visibility:hidden

    • 如果隐藏元素不想要原来位置, 就用 display:none (用处更多 重点)

  3. overflow

    • overflow 属性指定了如果内容溢出一个元素的框(超过其指定高度及宽度) 时,会发生什么。
    属性值 描述
    visible 不剪切内容也不添加滚动条
    hidden 不显示超过对象尺寸的内容,超出的部分隐藏掉
    scroll 不管超出内容否,总是显示滚动条
    auto 超出自动显示滚动条,不超出不显示滚动条
    • 一般情况下,我们都不想让溢出的内容显示出来,因为溢出的部分会影响布局。
    • 但是如果有定位的盒子, 请慎用overflow:hidden 因为它会隐藏多余的部分。

显示与隐藏总结

属性 区别 用途
display 显示 (重点) 隐藏对象,不保留位置 配合后面js做特效,比如下拉菜单,原先没有,鼠标经过,显示下拉菜单, 应用极为广泛
visibility 可见性 (了解) 隐藏对象,保留位置 使用较少
overflow 溢出(重点) 只是隐藏超出大小的部分 1. 可以清除浮动 2. 保证盒子里面的内容不会超出该盒子范围

精灵图(sprites)

精灵图的核心思想就是通过background-position移动一张大图,只显示这张图的一部分

1
2
3
div {
background-position: -215px -141px;
}

字体图标(iconfont)

字体图标可以为前端工程师提供一种方便高效的图标使用方式,展示的是图标,本质属于字体

使用步骤

字体图标是一些网页常见的小图标,我们直接网上下载即可。 因此使用可以分为:

1.字体图标的下载

2.字体图标的引入 (引入到我们html页面中)

3.字体图标的追加 (以后添加新的小图标)

字体图标的下载

推荐下载网站:

IcoMoon 成立于 2011 年,推出了第一个自定义图标字体生成器,它允许用户选择所需要的图标,使它们成一字型。该字库内容种类繁多,非常全面,唯一的遗憾是国外服务器,打开网速较慢。

这个是阿里妈妈 M2UX 的一个 iconfont 字体图标字库,包含了淘宝图标库和阿里妈妈图标库。可以使用 AI制作图标上传生成。 重点是,免费!

字体图标的引入

下载完毕之后,注意原先的文件不要删,后面会用

  1. 把下载包里面的 fonts 文件夹放入页面根目录下

    1571520092646

  • 字体文件格式

不同浏览器所支持的字体格式是不一样的,字体图标之所以兼容,就是因为包含了主流浏览器支持的字体文件。

1).TureType( .ttf )格式.ttf字体是Windows和Mac的最常见的字体,支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+;

2).Web Open Font Format( .woff )格式woff字体,支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+;

3).Embedded Open Type( .eot )格式.eot字体是IE专用字体,支持这种字体的浏览器有IE4+;

4).SVG( .svg )格式.svg字体是基于SVG字体渲染的一种格式,支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+;

  1. 在 CSS 样式中全局声明字体: 简单理解把这些字体文件通过css引入到我们页面中。一定注意字体文件路径的问题
1
2
3
4
5
6
7
8
9
10
11
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?7kkyc2');
src: url('fonts/icomoon.eot?7kkyc2#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?7kkyc2') format('truetype'),
url('fonts/icomoon.woff?7kkyc2') format('woff'),
url('fonts/icomoon.svg?7kkyc2#icomoon') format('svg');
font-weight: normal;
font-style: normal;
}

  1. html 标签内添加小图标。

  2. 给标签定义字体。

    1
    2
    3
    span {
    font-family: "icomoon";
    }

    注意:务必保证 这个字体和上面@font-face里面的字体保持一致

    1571520485350

字体图标的追加

只需要将之前下载的图标文件夹里的json文件上传即可在原来的基础上追加

CSS三角

1571520965966

1
2
3
4
5
6
7
8
div {
width: 0;
height: 0;
border: 50px solid transparent;
border-color: red green blue black;
line-height:0;
font-size: 0;
}
  1. 我们用css 边框可以模拟三角效果
  2. 宽度高度为0
  3. 我们4个边框都要写, 只保留需要的边框颜色,其余的不能省略,都改为 transparent 透明就好了
  4. 为了照顾兼容性 低版本的浏览器,加上 font-size: 0; line-height: 0;

1571548099631

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<style>
.box1 {
width: 0;
height: 0;

/* 把上边框宽度调大 */
/* border-top: 100px solid transparent;
border-right: 50px solid skyblue; */
/* 左边和下边的边框宽度设置为0 */
/* border-bottom: 0 solid blue;
border-left: 0 solid green; */

/* 1.只保留右边的边框有颜色 */
border-color: transparent red transparent transparent;
/* 2. 样式都是solid */
border-style: solid;
/* 3. 上边框宽度要大, 右边框 宽度稍小, 其余的边框该为 0 */
border-width: 100px 50px 0 0 ;
}

</style>
</head>
<body>
<div class="box1"></div>
</body>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<!--京东三角案例参考代码-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>CSS三角强化的巧妙运用</title>
<style>
.price {
width: 160px;
height: 24px;
line-height: 24px;
border: 1px solid red;
margin: 0 auto;
}
.miaosha {
position: relative;
float: left;
width: 90px;
height: 100%;
background-color:red;
text-align: center;
color: #fff;
font-weight: 700;
margin-right: 8px;

}
.miaosha i {
position: absolute;
right: 0;
top: 0;
width: 0;
height: 0;
border-color: transparent #fff transparent transparent;
border-style: solid;
border-width: 24px 10px 0 0;
}
.origin {
font-size: 12px;
color: gray;
text-decoration: line-through;
}
</style>
</head>
<body>
<div class="price">
<span class="miaosha">
¥1650
<i></i>
</span>
<span class="origin">¥5650</span>
</div>
</body>
</html>

设置鼠标样式(cursor)

1
2
3
li {
cursor: pointer;
}

1571521805183

文本框轮廓线(outline)

1
2
3
input {
outline: none; /*去掉表单或文本框的轮廓线*/
}

防止拖拽文本域(resize)

1
2
3
textarea{ 
resize: none;
}

vertical-align 属性应用

用于设置一个元素的垂直对齐方式,但是它只针对于行内元素或者行内块元素有效。

1
vertical-align : baseline | top | middle | bottom 

15715220406451571522023413

文字省略号显示

单行文字

1
2
3
4
5
6
7
8
/*1. 先强制一行内显示文本*/
white-space: nowrap; ( 默认 normal 自动换行)

/*2. 超出的部分隐藏*/
overflow: hidden;

/*3. 文字用省略号替代超出的部分*/
text-overflow: ellipsis;

多行文字

多行文本溢出显示省略号,有较大兼容性问题,适合于webKit浏览器或移动端(移动端大部分是webkit内核)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*1. 超出的部分隐藏 */
overflow: hidden;

/*2. 文字用省略号替代超出的部分 */
text-overflow: ellipsis;

/* 3. 弹性伸缩盒子模型显示 */
display: -webkit-box;

/* 4. 限制在一个块元素显示的文本的行数 */
-webkit-line-clamp: 2;

/* 5. 设置或检索伸缩盒对象的子元素的排列方式 */
-webkit-box-orient: vertical;

推荐让后端人员来做这个效果,因为后端人员可以设置显示多少个字,操作更简单。

H5新特性

语义化标签

多媒体标签(audio、video)

video

1
<video src="media/mi.mp4"></video>

兼容性写法

1
2
3
4
5
<video  controls="controls"  width="300">
<source src="move.ogg" type="video/ogg" >
<source src="move.mp4" type="video/mp4" >
您的浏览器暂不支持 <video> 标签播放视频
</ video >

video常用属性

在google浏览器上面,默认禁止了自动播放,如果想要自动播放的效果,需要设置 muted属性.

audio

1
<audio src="media/music.mp3"></audio>

兼容性写法

1
2
3
4
5
< audio controls="controls"  >
<source src="happy.mp3" type="audio/mpeg" >
<source src="happy.ogg" type="audio/ogg" >
您的浏览器暂不支持 <audio> 标签。
</ audio>

audio常用属性

input标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- 我们验证的时候必须添加form表单域 -->
<form action="">
<ul>
<li>邮箱: <input type="email" /></li>
<li>网址: <input type="url" /></li>
<li>日期: <input type="date" /></li>
<li>时间: <input type="time" /></li>
<li>数量: <input type="number" /></li>
<li>手机号码: <input type="tel" /></li>
<li>搜索: <input type="search" /></li>
<li>颜色: <input type="color" /></li>
<!-- 当我们点击提交按钮就可以验证表单了 -->
<li> <input type="submit" value="提交"></li>
</ul>
</form>

新增input表单

CSS3新特性

新增选择器

属性选择器

属性选择器

1
2
3
4
5
6
7
8
9
10
11
12
/* 只选择 type =text 文本框的input 选取出来 */
input[type=text] {
color: pink;
}
/* 选择首先是div 然后 具有class属性 并且属性值 必须是 icon开头的这些元素 */
div[class^=icon] {
color: red;
}
/* 选择首先是section 然后 具有class属性 并且属性值 必须是 data结尾的这些元素 */
section[class$=data] {
color: blue;
}

类选择器、属性选择器、伪类选择器,权重为 10。

结构伪类选择器

结构伪类选择器主要根据文档结构来选择器元素, 常用于根据父级选择器里面的子元素

结构伪类选择器-01

E:nth-child(n)

匹配到父元素的第n个元素

  • 匹配到父元素的第2个子元素

    ul li:nth-child(2){}

  • 匹配到父元素的序号为奇数的子元素

    ul li:nth-child(odd){} odd 是关键字 奇数的意思(3个字母 )

  • 匹配到父元素的序号为偶数的子元素

    ul li:nth-child(even){} even(4个字母 )

  • 匹配到父元素的前3个子元素

    ul li:nth-child(-n+3){}

    选择器中的 n 是怎么变化的呢?

    因为 n是从 0 ,1,2,3.. 一直递增

    所以 -n+3 就变成了

    • n=0 时 -0+3=3

    • n=1时 -1+3=2

    • n=2时 -2+3=1

    • n=3时 -3+3=0

    • E:nth-child(n) 匹配父元素的第n个子元素E,也就是说,nth-child 对父元素里面所有孩子排序选择(序号是固定的) 先找到第n个孩子,然后看看是否和E匹配

    • E:nth-of-type(n) 匹配同类型中的第n个同级兄弟元素E,也就是说,对父元素里面指定子元素进行排序选择。 先去匹配E ,然后再根据E 找第n个孩子

    关于 nth-child(n) 我们要知道 n 是从 0 开始计算的,要记住常用的公式

伪元素选择器

伪元素选择器可以帮助我们利用CSS创建新标签元素,而不需要HTML标签,从而简化HTML结构

伪元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<style>
div {
width: 200px;
height: 200px;
background-color: pink;
}
/* div::before 权重是2 */
div::before {
/* 这个content是必须要写的 */
content: '我';
}
div::after {
content: '小猪佩奇';
}
</style>
<body>
<div>

</div>
</body>
  • before 和 after 创建一个元素,但是属于行内元素
  • 新创建的这个元素在文档树中是找不到的,所以我们称为伪元素
  • 语法: element::before {}
  • before 和 after 必须有 content 属性
  • before 在父元素内容的前面创建元素,after 在父元素内容的后面插入元素
    伪元素选择器和标签选择器一样,权重为 1

典型应用

  1. 字体图标

    • 结构中定义div盒子
    • 在style中先申明字体 @font-face
    • 在style中定义after伪元素 div::after{…}
    • 在after伪元素中 设置content属性,属性的值就是字体编码
    • 在after伪元素中 设置font-family的属性
    • 利用定位的方式,让伪元素定位到相应的位置;记住定位口诀:子绝父相
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <head>
    ...
    <style>
    @font-face {
    font-family: 'icomoon';
    src: url('fonts/icomoon.eot?1lv3na');
    src: url('fonts/icomoon.eot?1lv3na#iefix') format('embedded-opentype'),
    url('fonts/icomoon.ttf?1lv3na') format('truetype'),
    url('fonts/icomoon.woff?1lv3na') format('woff'),
    url('fonts/icomoon.svg?1lv3na#icomoon') format('svg');
    font-weight: normal;
    font-style: normal;
    font-display: block;
    }

    div {
    position: relative;
    width: 200px;
    height: 35px;
    border: 1px solid red;
    }

    div::after {
    position: absolute;
    top: 10px;
    right: 10px;
    font-family: 'icomoon';
    /* content: ''; */
    content: '\e91e';
    color: red;
    font-size: 18px;
    }
    </style>
    </head>
    <body>
    <div></div>
    </body>
  2. 清除浮动

    双伪元素

固定盒子大小

CSS3 中可以通过 box-sizing 来指定盒模型,有2个值:即可指定为 content-box、border-box,这样我们计算盒子大小的方式就发生了改变

可以分成两种情况:

  • box-sizing: content-box 盒子大小为 width + padding + border (以前默认的)
  • box-sizing: border-box 盒子大小为 width

如果盒子模型我们改为了box-sizing: border-box , 那padding和border就不会撑大盒子了(前提padding和border不会超过width宽度)

模糊特效(filter)

1
2
3
4
filter:   函数(); 
--> 例如:
filter: blur(5px);
--> blur模糊处理 数值越大越模糊

计算盒子宽度(calc()函数)

1
width: calc(100% - 80px);/* "+ - *  /"都可以 */

过渡动画(transition)

1
transition: 要过渡的属性  花费时间  运动曲线  何时开始;
  • 属性 : 想要变化的 css 属性, 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡, 写一个all 就可以
  • 花费时间: 单位是 秒(必须写单位) 比如 0.5s
  • 运动曲线: 默认是 ease (可以省略)
  • 何时开始:单位是 秒(必须写单位)可以设置延迟触发时间 默认是 0s (可以省略)