add: clip-path 属性
This commit is contained in:
		
							parent
							
								
									1a7cd4cf80
								
							
						
					
					
						commit
						5414be9d2d
					
				@ -6,7 +6,8 @@
 | 
			
		||||
 | 
			
		||||
## background 的常见背景属性
 | 
			
		||||
 | 
			
		||||
CSS样式中,常见的背景属性有以下几种:(经常用到,要记住)
 | 
			
		||||
 | 
			
		||||
**css2.1** 中,常见的背景属性有以下几种:(经常用到,要记住)
 | 
			
		||||
 | 
			
		||||
- `background-color:#ff99ff;`  设置元素的背景颜色。
 | 
			
		||||
 | 
			
		||||
@ -24,6 +25,16 @@ CSS样式中,常见的背景属性有以下几种:(经常用到,要记
 | 
			
		||||
 | 
			
		||||
- 另外还有一个综合属性叫做`background`,它的作用是:将上面的多个属性写在一个声明中。
 | 
			
		||||
 | 
			
		||||
**CSS3** 中,新增了一些background属性:
 | 
			
		||||
 | 
			
		||||
- background-origin
 | 
			
		||||
 | 
			
		||||
- background-clip 背景裁切
 | 
			
		||||
 | 
			
		||||
- background-size 调整尺寸
 | 
			
		||||
 | 
			
		||||
- 多重背景
 | 
			
		||||
 | 
			
		||||
上面这几个属性经常用到,需要记住。现在我们逐个进行讲解。
 | 
			
		||||
 | 
			
		||||
## background-color:背景颜色的表示方法
 | 
			
		||||
@ -222,7 +233,6 @@ PS:padding的区域也是有背景图的。
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## `background-position`属性
 | 
			
		||||
 | 
			
		||||
`background-position`属性指的是**背景定位**属性。公式如下:
 | 
			
		||||
@ -352,7 +362,520 @@ background属性和border一样,是一个综合属性,可以将多个属性
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
PS:以后的CSS3内容中,我们会接触到更多的background属性: background-origin、background-clip、background-size(在CSS2.1背景图片是不能调整尺寸,IE9开始兼容)、多背景。
 | 
			
		||||
## `background-size`属性:背景尺寸
 | 
			
		||||
 | 
			
		||||
`background-size`属性:设置背景图片的尺寸。
 | 
			
		||||
 | 
			
		||||
格式举例:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	/* 宽、高的具体数值 */
 | 
			
		||||
	background-size: 500px 500px;
 | 
			
		||||
 | 
			
		||||
	/* 宽高的百分比(相对于容器的大小) */
 | 
			
		||||
	background-size: 50% 50%;   // 如果两个属性值相同,可以简写成:background-size: 50%;
 | 
			
		||||
 | 
			
		||||
	background-size: 100% auto;  //这个属性可以自己试验一下。
 | 
			
		||||
 | 
			
		||||
	/* cover:图片始终填充满容器,且保证长宽比不变。图片如果有超出部分,则超出部分会被隐藏。 */
 | 
			
		||||
	background-size: cover;
 | 
			
		||||
 | 
			
		||||
	/* contain:将图片完整地显示在容器中,且保证长宽比不变。可能会导致容器的部分区域为空白。  */
 | 
			
		||||
	background-size: contain;
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
这里我们对属性值 `cover` 和 `contain` 进行再次强调:
 | 
			
		||||
 | 
			
		||||
- `cover`:图片始终**填充满**容器,且保证**长宽比不变**。图片如果有超出部分,则超出部分会被隐藏。
 | 
			
		||||
 | 
			
		||||
- `contain`:将图片**完整地**显示在容器中,且保证**长宽比不变**。可能会导致容器的部分区域留白。
 | 
			
		||||
 | 
			
		||||
代码举例:(这张图片本身的尺寸是 1080 * 1350)
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
 | 
			
		||||
<head>
 | 
			
		||||
	<meta charset="UTF-8">
 | 
			
		||||
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
			
		||||
	<title>Document</title>
 | 
			
		||||
	<style>
 | 
			
		||||
		.img_wrap {
 | 
			
		||||
			display: flex;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		.img {
 | 
			
		||||
			width: 200px;
 | 
			
		||||
			height: 200px;
 | 
			
		||||
			border:1px solid red;
 | 
			
		||||
			background: url(http://img.smyhvae.com/20191006_1330.jpg) no-repeat;
 | 
			
		||||
			margin-right: 20px;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		.div1 {
 | 
			
		||||
			background-size: 100% auto;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		.div2 {
 | 
			
		||||
			background-size: cover;
 | 
			
		||||
		}
 | 
			
		||||
		.div3{
 | 
			
		||||
			background-size: contain;
 | 
			
		||||
		}
 | 
			
		||||
	</style>
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
	<section class="img_wrap">
 | 
			
		||||
		<div class="img div1"></div>
 | 
			
		||||
		<div class="img div2"></div>
 | 
			
		||||
		<div class="img div3"></div>
 | 
			
		||||
 | 
			
		||||
	</section>
 | 
			
		||||
</body>
 | 
			
		||||
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
效果如下:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## 背景原点:`background-origin` 属性
 | 
			
		||||
 | 
			
		||||
`background-origin` 属性:控制背景从什么地方开始显示。
 | 
			
		||||
 | 
			
		||||
格式举例:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
 | 
			
		||||
	/* 从 padding-box 内边距开始显示背景图 */
 | 
			
		||||
	background-origin: padding-box;           //默认值
 | 
			
		||||
 | 
			
		||||
	/* 从 border-box 边框开始显示背景图  */
 | 
			
		||||
	background-origin: border-box;
 | 
			
		||||
 | 
			
		||||
	/* 从 content-box 内容区域开始显示背景图  */
 | 
			
		||||
	background-origin: content-box;
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
如果属性值设置成了`border-box`,那边框部分也会显示图片哦。
 | 
			
		||||
 | 
			
		||||
如下图所示:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## `background-clip`属性:设置元素的背景(背景图片或颜色)是否延伸到边框下面
 | 
			
		||||
 | 
			
		||||
格式举例:
 | 
			
		||||
 | 
			
		||||
`background-clip: content-box;`   超出的部分,将裁剪掉。属性值可以是:
 | 
			
		||||
 | 
			
		||||
 - `border-box` 超出 border-box 的部分,将裁剪掉
 | 
			
		||||
 | 
			
		||||
 - `padding-box` 超出 padding-box 的部分,将裁剪掉
 | 
			
		||||
 | 
			
		||||
 - `content-box` 超出 content-box 的部分,将裁剪掉
 | 
			
		||||
 | 
			
		||||
假设现在有这样的属性设置:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	background-origin: border-box;
 | 
			
		||||
 | 
			
		||||
	background-clip: content-box;
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
上方代码的意思是,背景图片从**边框部分**开始加载,但是呢,超出**内容区域**的部分将被裁减掉。
 | 
			
		||||
 | 
			
		||||
## 同时设置多个背景
 | 
			
		||||
 | 
			
		||||
我们可以给一个盒子同时设置多个背景,用以逗号隔开即可。可用于自适应局。
 | 
			
		||||
 | 
			
		||||
代码举例:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<head lang="en">
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title></title>
 | 
			
		||||
    <style>
 | 
			
		||||
        .box {
 | 
			
		||||
            height: 416px;
 | 
			
		||||
            border: 1px solid #000;
 | 
			
		||||
            margin: 100px auto;
 | 
			
		||||
            /* 给盒子加多个背景,按照背景语法格式书写,多个背景使用逗号隔开 */
 | 
			
		||||
            background: url(images/bg1.png) no-repeat left top,
 | 
			
		||||
            url(images/bg2.png) no-repeat right top,
 | 
			
		||||
            url(images/bg3.png) no-repeat right bottom,
 | 
			
		||||
            url(images/bg4.png) no-repeat left bottom,
 | 
			
		||||
            url(images/bg5.png) no-repeat center;
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div class="box"></div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
实现效果如下:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
上方代码中,我们其实给盒子设置了五张小图,拼成的一张大图。当改变浏览器窗口大小时,可以自适应布局。
 | 
			
		||||
 | 
			
		||||
## 渐变:background-image
 | 
			
		||||
 | 
			
		||||
渐变是CSS3当中比较丰富多彩的一个特性,通过渐变我们可以实现许多炫丽的效果,有效的减少图片的使用数量,并且具有很强的适应性和可扩展性。
 | 
			
		||||
 | 
			
		||||
渐变分为:
 | 
			
		||||
 | 
			
		||||
- 线性渐变:沿着某条直线朝一个方向产生渐变效果。
 | 
			
		||||
 | 
			
		||||
- 径向渐变:从一个**中心点**开始沿着**四周**产生渐变效果。
 | 
			
		||||
 | 
			
		||||
- 重复渐变。
 | 
			
		||||
 | 
			
		||||
见下图:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
### 线性渐变
 | 
			
		||||
 | 
			
		||||
格式:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
 | 
			
		||||
    background-image: linear-gradient(方向, 起始颜色, 终止颜色);
 | 
			
		||||
 | 
			
		||||
    background-image: linear-gradient(to right, yellow, green);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
参数解释:
 | 
			
		||||
 | 
			
		||||
- 方向可以是:`to left`、`to right`、`to top`、`to bottom`、角度`30deg`(指的是顺时针方向30°)。
 | 
			
		||||
 | 
			
		||||
格式举例:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<head lang="en">
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title></title>
 | 
			
		||||
    <style>
 | 
			
		||||
        div {
 | 
			
		||||
            width: 500px;
 | 
			
		||||
            height: 100px;
 | 
			
		||||
            margin: 10px auto;
 | 
			
		||||
            border: 1px solid #000;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* 语法:
 | 
			
		||||
            linear-gradient(方向,起始颜色,终止颜色);
 | 
			
		||||
            方向:to left   to right  to top   to bottom  角度 30deg
 | 
			
		||||
            起始颜色
 | 
			
		||||
            终止颜色
 | 
			
		||||
        */
 | 
			
		||||
        div:nth-child(1) {
 | 
			
		||||
            background-image: linear-gradient(to right, yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* 不写方向,表示默认的方向是:从上往下 */
 | 
			
		||||
        div:nth-child(2) {
 | 
			
		||||
            background-image: linear-gradient(yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* 方向可以指定角度 */
 | 
			
		||||
        div:nth-child(3) {
 | 
			
		||||
            width: 100px;
 | 
			
		||||
            height: 100px;
 | 
			
		||||
            background-image: linear-gradient(135deg, yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* 0%的位置开始出现黄色,40%的位置开始出现红色的过度。70%的位置开始出现绿色的过度,100%的位置开始出现蓝色 */
 | 
			
		||||
        div:nth-child(4) {
 | 
			
		||||
            background-image: linear-gradient(to right,
 | 
			
		||||
            yellow 0%,
 | 
			
		||||
            red 40%,
 | 
			
		||||
            green 70%,
 | 
			
		||||
            blue 100%);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* 颜色之间,出现突变 */
 | 
			
		||||
        div:nth-child(5) {
 | 
			
		||||
            background-image: linear-gradient(45deg,
 | 
			
		||||
            yellow 0%,
 | 
			
		||||
            yellow 25%,
 | 
			
		||||
            blue 25%,
 | 
			
		||||
            blue 50%,
 | 
			
		||||
            red 50%,
 | 
			
		||||
            red 75%,
 | 
			
		||||
            green 75%,
 | 
			
		||||
            green 100%
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        div:nth-child(6) {
 | 
			
		||||
            background-image: linear-gradient(to right,
 | 
			
		||||
            #000 0%,
 | 
			
		||||
            #000 25%,
 | 
			
		||||
            #fff 25%,
 | 
			
		||||
            #fff 50%,
 | 
			
		||||
            #000 50%,
 | 
			
		||||
            #000 75%,
 | 
			
		||||
            #fff 75%,
 | 
			
		||||
            #fff 100%
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div></div>
 | 
			
		||||
<div></div>
 | 
			
		||||
<div></div>
 | 
			
		||||
<div></div>
 | 
			
		||||
<div></div>
 | 
			
		||||
<div></div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
效果如下:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
**举例**:按钮
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title>CSS3 渐变</title>
 | 
			
		||||
    <style>
 | 
			
		||||
        html, body {
 | 
			
		||||
            height: 100%;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        body {
 | 
			
		||||
            margin: 0;
 | 
			
		||||
            padding: 0;
 | 
			
		||||
            background-color: #f8fcd4;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .nav {
 | 
			
		||||
            width: 800px;
 | 
			
		||||
            text-align: center;
 | 
			
		||||
            padding-top: 50px;
 | 
			
		||||
            margin: 0 auto;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*设置按钮基本样式*/
 | 
			
		||||
        .nav a {
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
            width: 100px;
 | 
			
		||||
            height: 30px;
 | 
			
		||||
            text-align: center;
 | 
			
		||||
            line-height: 30px;
 | 
			
		||||
            font-size: 14px;
 | 
			
		||||
            color: #fff;
 | 
			
		||||
            text-decoration: none;
 | 
			
		||||
            border: 1px solid #e59500;
 | 
			
		||||
            background-color: #FFB700;
 | 
			
		||||
            background-image: linear-gradient(
 | 
			
		||||
                    to bottom,
 | 
			
		||||
                    #FFB700 0%,
 | 
			
		||||
                    #FF8C00 100%
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div class="nav">
 | 
			
		||||
    <a href="javascript:;">导航1</a>
 | 
			
		||||
    <a href="javascript:;">导航2</a>
 | 
			
		||||
    <a href="javascript:;">导航3</a>
 | 
			
		||||
    <a href="javascript:;">导航4</a>
 | 
			
		||||
    <a href="javascript:;">导航5</a>
 | 
			
		||||
    <a href="javascript:;">导航6</a>
 | 
			
		||||
</div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
效果:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
### 径向渐变
 | 
			
		||||
 | 
			
		||||
格式:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
	background-image: radial-gradient(辐射的半径大小, 中心的位置, 起始颜色, 终止颜色);
 | 
			
		||||
 | 
			
		||||
	background-image: radial-gradient(100px at center,yellow ,green);
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
解释:围绕中心点做渐变,半径是150px,从黄色到绿色做渐变。
 | 
			
		||||
 | 
			
		||||
中心点的位置可以是:at  left  right  center bottom  top。如果以像素为单位,则中心点参照的是盒子的左上角。
 | 
			
		||||
 | 
			
		||||
当然,还有其他的各种参数。格式举例:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<head lang="en">
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title></title>
 | 
			
		||||
    <style>
 | 
			
		||||
        div {
 | 
			
		||||
            width: 250px;
 | 
			
		||||
            height: 250px;
 | 
			
		||||
            border: 1px solid #000;
 | 
			
		||||
            margin: 20px;
 | 
			
		||||
            float: left;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
            径向渐变:
 | 
			
		||||
            radial-gradient(辐射的半径大小, 中心的位置,起始颜色,终止颜色);
 | 
			
		||||
            中心点位置:at  left  right  center bottom  top
 | 
			
		||||
        */
 | 
			
		||||
 | 
			
		||||
        /*辐射半径为100px,中心点在中间*/
 | 
			
		||||
        div:nth-child(1) {
 | 
			
		||||
            background-image: radial-gradient(100px at center, yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*中心点在左上角*/
 | 
			
		||||
        div:nth-child(3) {
 | 
			
		||||
            background-image: radial-gradient(at left top, yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        div:nth-child(2) {
 | 
			
		||||
            background-image: radial-gradient(at 50px 50px, yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*设置不同的颜色渐变*/
 | 
			
		||||
        div:nth-child(4) {
 | 
			
		||||
            background-image: radial-gradient(100px at center,
 | 
			
		||||
            yellow 0%,
 | 
			
		||||
            green 30%,
 | 
			
		||||
            blue 60%,
 | 
			
		||||
            red 100%);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*如果辐射半径的宽高不同,那就是椭圆*/
 | 
			
		||||
        div:nth-child(5) {
 | 
			
		||||
            background-image: radial-gradient(100px 50px at center, yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div class="box"></div>
 | 
			
		||||
<div class="box"></div>
 | 
			
		||||
<div class="box"></div>
 | 
			
		||||
<div class="box"></div>
 | 
			
		||||
<div class="box"></div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
效果如下:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
**举例:**利用径向渐变和边框圆角的属性,生成按钮。代码如下:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title>CSS3 渐变</title>
 | 
			
		||||
    <style>
 | 
			
		||||
 | 
			
		||||
        div:nth-child(1) {
 | 
			
		||||
            width: 200px;
 | 
			
		||||
            height: 200px;
 | 
			
		||||
            margin: 40px auto;
 | 
			
		||||
            border-radius: 100px;
 | 
			
		||||
            background-color: yellowgreen;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        div:nth-child(2) {
 | 
			
		||||
            width: 200px;
 | 
			
		||||
            height: 200px;
 | 
			
		||||
            margin: 40px auto;
 | 
			
		||||
            border-radius: 100px;
 | 
			
		||||
            background-color: yellowgreen;
 | 
			
		||||
            background-image: radial-gradient(
 | 
			
		||||
                    200px at 100px 100px,
 | 
			
		||||
                    rgba(0, 0, 0, 0),
 | 
			
		||||
                    rgba(0, 0, 0, 0.5)
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div></div>
 | 
			
		||||
<div></div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
效果如下:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
上图中,给第二个div设置的透明度是从0到0.5。如果设置的透明度是从0到0,则样式无变化,和第一个div一样。如果设置的透明度是从1到1,则盒子是全黑的。
 | 
			
		||||
 | 
			
		||||
## clip-path:裁剪出元素的部分区域做展示
 | 
			
		||||
 | 
			
		||||
`clip-path`属性可以创建一个只有元素的部分区域可以显示的剪切区域。区域内的部分显示,区域外的隐藏。
 | 
			
		||||
 | 
			
		||||
虽然`clip-path`不是背景属性,但往往会结合背景属性一起使用,达到一些效果。
 | 
			
		||||
 | 
			
		||||
举例:(鼠标悬停时,放大裁剪的区域)
 | 
			
		||||
 | 
			
		||||
```css
 | 
			
		||||
    .div1 {
 | 
			
		||||
        width: 320px;
 | 
			
		||||
        height: 320px;
 | 
			
		||||
        border: 1px solid red;
 | 
			
		||||
        background: url(http://img.smyhvae.com/20191006_1410.png) no-repeat;
 | 
			
		||||
        background-size: cover;
 | 
			
		||||
 | 
			
		||||
        /* 裁剪出圆形区域 */
 | 
			
		||||
        clip-path: circle(50px at 100px 100px);
 | 
			
		||||
        transition: clip-path .4s;
 | 
			
		||||
    }
 | 
			
		||||
    .div1:hover{
 | 
			
		||||
        /* 鼠标悬停时,裁剪出更大的圆形 */
 | 
			
		||||
        clip-path: circle(80px at 100px 100px);
 | 
			
		||||
    }
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
`clip-path`属性的好处是,即使做了任何裁剪,**容器的占位大小是不变的**。比如上方代码中,容器的占位大小一直都是 320px * 320px。这样的话,也方便我们做一些动画效果。
 | 
			
		||||
 | 
			
		||||
`clip-path: polygon()`举例:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
另外,还可以引入 svg 图形,这里就不详细展开了。
 | 
			
		||||
 | 
			
		||||
## 我的公众号
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -171,7 +171,7 @@ CSS3 对盒模型做出了新的定义,即允许开发人员**指定盒子宽
 | 
			
		||||
 | 
			
		||||
单个属性的写法:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
```css
 | 
			
		||||
	border-top-left-radius: 60px 120px;        //参数解释:水平半径   垂直半径
 | 
			
		||||
 | 
			
		||||
	border-top-right-radius: 60px 120px;
 | 
			
		||||
@ -358,443 +358,6 @@ CSS3 对盒模型做出了新的定义,即允许开发人员**指定盒子宽
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 背景属性
 | 
			
		||||
 | 
			
		||||
背景属性在 CSS3 中也得到很大程度的增强,比如背景图片尺寸、背景裁切区域、背景定位参照点、多重背景等。
 | 
			
		||||
 | 
			
		||||
### 背景尺寸:`background-size`属性
 | 
			
		||||
 | 
			
		||||
`background-size`属性:设置背景图片的尺寸。
 | 
			
		||||
 | 
			
		||||
格式举例:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	/* 宽、高的具体数值 */
 | 
			
		||||
	background-size: 500px 500px;
 | 
			
		||||
 | 
			
		||||
	/* 宽高的百分比 */
 | 
			
		||||
	background-size: 50% 50%;   // 如果两个属性值相同,可以简写成:background-size: 50%;
 | 
			
		||||
 | 
			
		||||
	background-size: 100% auto;  //这个属性可以自己试验一下。
 | 
			
		||||
 | 
			
		||||
	/* cover:会自动调整缩放比例,保证图片始终填充满背景区域,如有溢出部分则会被隐藏。 */
 | 
			
		||||
	background-size: cover;
 | 
			
		||||
 | 
			
		||||
	/* contain:会自动调整缩放比例,保证图片始终完整显示在背景区域。  */
 | 
			
		||||
	background-size: contain;
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
这里我们对属性值 `cover` 和 `contain`进行再次强调:
 | 
			
		||||
 | 
			
		||||
- `cover`:会自动调整缩放比例,保证图片始终**填充满**背景区域,如有**溢出部分**则会被隐藏。也就是说,保证背景图片完全覆盖盒子,但不能保证完整显示。
 | 
			
		||||
 | 
			
		||||
- `contain`:会自动调整缩放比例,保证图片始终**完整显示**在背景区域。也就是说,保证背景图片最大化地在盒子里,**等比例**显示,但不保证能铺满盒子。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 背景原点:`background-origin` 属性
 | 
			
		||||
 | 
			
		||||
`background-origin` 属性:控制背景从什么地方开始显示。
 | 
			
		||||
 | 
			
		||||
格式举例:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
 | 
			
		||||
	/* 从 padding-box 内边距开始显示背景图 */
 | 
			
		||||
	background-origin: padding-box;           //默认值
 | 
			
		||||
 | 
			
		||||
	/* 从 border-box 边框开始显示背景图  */
 | 
			
		||||
	background-origin: border-box;
 | 
			
		||||
 | 
			
		||||
	/* 从 content-box 内容区域开始显示背景图  */
 | 
			
		||||
	background-origin: content-box;
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
如果属性值设置成了`border-box`,那边框部分也会显示图片哦。
 | 
			
		||||
 | 
			
		||||
如下图所示:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
### 背景裁剪:`background-clip`属性
 | 
			
		||||
 | 
			
		||||
格式举例:
 | 
			
		||||
 | 
			
		||||
`background-clip: content-box;`   超出的部分,将裁剪掉。属性值可以是:
 | 
			
		||||
 | 
			
		||||
 - `border-box` 超出 border-box 的部分,将裁剪掉
 | 
			
		||||
 | 
			
		||||
 - `padding-box` 超出 padding-box 的部分,将裁剪掉
 | 
			
		||||
 | 
			
		||||
 - `content-box` 超出 content-box 的部分,将裁剪掉
 | 
			
		||||
 | 
			
		||||
假设现在有这样的属性设置:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	background-origin: border-box;
 | 
			
		||||
 | 
			
		||||
	background-clip: content-box;
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
上方代码的意思是,背景图片从**边框部分**开始加载,但是呢,超出**内容区域**的部分将被裁减掉。
 | 
			
		||||
 | 
			
		||||
### 同时设置多个背景
 | 
			
		||||
 | 
			
		||||
我们可以给一个盒子同时设置多个背景,用以逗号隔开即可。可用于自适应局。
 | 
			
		||||
 | 
			
		||||
代码举例:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<head lang="en">
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title></title>
 | 
			
		||||
    <style>
 | 
			
		||||
        .box {
 | 
			
		||||
            height: 416px;
 | 
			
		||||
            border: 1px solid #000;
 | 
			
		||||
            margin: 100px auto;
 | 
			
		||||
            /* 给盒子加多个背景,按照背景语法格式书写,多个背景使用逗号隔开 */
 | 
			
		||||
            background: url(images/bg1.png) no-repeat left top,
 | 
			
		||||
            url(images/bg2.png) no-repeat right top,
 | 
			
		||||
            url(images/bg3.png) no-repeat right bottom,
 | 
			
		||||
            url(images/bg4.png) no-repeat left bottom,
 | 
			
		||||
            url(images/bg5.png) no-repeat center;
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div class="box"></div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
实现效果如下:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
上方代码中,我们其实给盒子设置了五张小图,拼成的一张大图。当改变浏览器窗口大小时,可以自适应布局。
 | 
			
		||||
 | 
			
		||||
## 渐变:background-image
 | 
			
		||||
 | 
			
		||||
渐变是CSS3当中比较丰富多彩的一个特性,通过渐变我们可以实现许多炫丽的效果,有效的减少图片的使用数量,并且具有很强的适应性和可扩展性。
 | 
			
		||||
 | 
			
		||||
渐变分为:
 | 
			
		||||
 | 
			
		||||
- 线性渐变:沿着某条直线朝一个方向产生渐变效果。
 | 
			
		||||
 | 
			
		||||
- 径向渐变:从一个**中心点**开始沿着**四周**产生渐变效果。
 | 
			
		||||
 | 
			
		||||
- 重复渐变。
 | 
			
		||||
 | 
			
		||||
见下图:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
### 线性渐变
 | 
			
		||||
 | 
			
		||||
格式:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
 | 
			
		||||
    background-image: linear-gradient(方向, 起始颜色, 终止颜色);
 | 
			
		||||
 | 
			
		||||
    background-image: linear-gradient(to right, yellow, green);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
参数解释:
 | 
			
		||||
 | 
			
		||||
- 方向可以是:`to left`、`to right`、`to top`、`to bottom`、角度`30deg`(指的是顺时针方向30°)。
 | 
			
		||||
 | 
			
		||||
格式举例:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<head lang="en">
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title></title>
 | 
			
		||||
    <style>
 | 
			
		||||
        div {
 | 
			
		||||
            width: 500px;
 | 
			
		||||
            height: 100px;
 | 
			
		||||
            margin: 10px auto;
 | 
			
		||||
            border: 1px solid #000;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* 语法:
 | 
			
		||||
            linear-gradient(方向,起始颜色,终止颜色);
 | 
			
		||||
            方向:to left   to right  to top   to bottom  角度 30deg
 | 
			
		||||
            起始颜色
 | 
			
		||||
            终止颜色
 | 
			
		||||
        */
 | 
			
		||||
        div:nth-child(1) {
 | 
			
		||||
            background-image: linear-gradient(to right, yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* 不写方向,表示默认的方向是:从上往下 */
 | 
			
		||||
        div:nth-child(2) {
 | 
			
		||||
            background-image: linear-gradient(yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* 方向可以指定角度 */
 | 
			
		||||
        div:nth-child(3) {
 | 
			
		||||
            width: 100px;
 | 
			
		||||
            height: 100px;
 | 
			
		||||
            background-image: linear-gradient(135deg, yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* 0%的位置开始出现黄色,40%的位置开始出现红色的过度。70%的位置开始出现绿色的过度,100%的位置开始出现蓝色 */
 | 
			
		||||
        div:nth-child(4) {
 | 
			
		||||
            background-image: linear-gradient(to right,
 | 
			
		||||
            yellow 0%,
 | 
			
		||||
            red 40%,
 | 
			
		||||
            green 70%,
 | 
			
		||||
            blue 100%);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* 颜色之间,出现突变 */
 | 
			
		||||
        div:nth-child(5) {
 | 
			
		||||
            background-image: linear-gradient(45deg,
 | 
			
		||||
            yellow 0%,
 | 
			
		||||
            yellow 25%,
 | 
			
		||||
            blue 25%,
 | 
			
		||||
            blue 50%,
 | 
			
		||||
            red 50%,
 | 
			
		||||
            red 75%,
 | 
			
		||||
            green 75%,
 | 
			
		||||
            green 100%
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        div:nth-child(6) {
 | 
			
		||||
            background-image: linear-gradient(to right,
 | 
			
		||||
            #000 0%,
 | 
			
		||||
            #000 25%,
 | 
			
		||||
            #fff 25%,
 | 
			
		||||
            #fff 50%,
 | 
			
		||||
            #000 50%,
 | 
			
		||||
            #000 75%,
 | 
			
		||||
            #fff 75%,
 | 
			
		||||
            #fff 100%
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div></div>
 | 
			
		||||
<div></div>
 | 
			
		||||
<div></div>
 | 
			
		||||
<div></div>
 | 
			
		||||
<div></div>
 | 
			
		||||
<div></div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
效果如下:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
**举例**:按钮
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title>CSS3 渐变</title>
 | 
			
		||||
    <style>
 | 
			
		||||
        html, body {
 | 
			
		||||
            height: 100%;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        body {
 | 
			
		||||
            margin: 0;
 | 
			
		||||
            padding: 0;
 | 
			
		||||
            background-color: #f8fcd4;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        .nav {
 | 
			
		||||
            width: 800px;
 | 
			
		||||
            text-align: center;
 | 
			
		||||
            padding-top: 50px;
 | 
			
		||||
            margin: 0 auto;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*设置按钮基本样式*/
 | 
			
		||||
        .nav a {
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
            width: 100px;
 | 
			
		||||
            height: 30px;
 | 
			
		||||
            text-align: center;
 | 
			
		||||
            line-height: 30px;
 | 
			
		||||
            font-size: 14px;
 | 
			
		||||
            color: #fff;
 | 
			
		||||
            text-decoration: none;
 | 
			
		||||
            border: 1px solid #e59500;
 | 
			
		||||
            background-color: #FFB700;
 | 
			
		||||
            background-image: linear-gradient(
 | 
			
		||||
                    to bottom,
 | 
			
		||||
                    #FFB700 0%,
 | 
			
		||||
                    #FF8C00 100%
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div class="nav">
 | 
			
		||||
    <a href="javascript:;">导航1</a>
 | 
			
		||||
    <a href="javascript:;">导航2</a>
 | 
			
		||||
    <a href="javascript:;">导航3</a>
 | 
			
		||||
    <a href="javascript:;">导航4</a>
 | 
			
		||||
    <a href="javascript:;">导航5</a>
 | 
			
		||||
    <a href="javascript:;">导航6</a>
 | 
			
		||||
</div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
效果:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
### 径向渐变
 | 
			
		||||
 | 
			
		||||
格式:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
	background-image: radial-gradient(辐射的半径大小, 中心的位置, 起始颜色, 终止颜色);
 | 
			
		||||
 | 
			
		||||
	background-image: radial-gradient(100px at center,yellow ,green);
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
解释:围绕中心点做渐变,半径是150px,从黄色到绿色做渐变。
 | 
			
		||||
 | 
			
		||||
中心点的位置可以是:at  left  right  center bottom  top。如果以像素为单位,则中心点参照的是盒子的左上角。
 | 
			
		||||
 | 
			
		||||
当然,还有其他的各种参数。格式举例:
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
<head lang="en">
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title></title>
 | 
			
		||||
    <style>
 | 
			
		||||
        div {
 | 
			
		||||
            width: 250px;
 | 
			
		||||
            height: 250px;
 | 
			
		||||
            border: 1px solid #000;
 | 
			
		||||
            margin: 20px;
 | 
			
		||||
            float: left;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
            径向渐变:
 | 
			
		||||
            radial-gradient(辐射的半径大小, 中心的位置,起始颜色,终止颜色);
 | 
			
		||||
            中心点位置:at  left  right  center bottom  top
 | 
			
		||||
        */
 | 
			
		||||
 | 
			
		||||
        /*辐射半径为100px,中心点在中间*/
 | 
			
		||||
        div:nth-child(1) {
 | 
			
		||||
            background-image: radial-gradient(100px at center, yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*中心点在左上角*/
 | 
			
		||||
        div:nth-child(3) {
 | 
			
		||||
            background-image: radial-gradient(at left top, yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        div:nth-child(2) {
 | 
			
		||||
            background-image: radial-gradient(at 50px 50px, yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*设置不同的颜色渐变*/
 | 
			
		||||
        div:nth-child(4) {
 | 
			
		||||
            background-image: radial-gradient(100px at center,
 | 
			
		||||
            yellow 0%,
 | 
			
		||||
            green 30%,
 | 
			
		||||
            blue 60%,
 | 
			
		||||
            red 100%);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*如果辐射半径的宽高不同,那就是椭圆*/
 | 
			
		||||
        div:nth-child(5) {
 | 
			
		||||
            background-image: radial-gradient(100px 50px at center, yellow, green);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div class="box"></div>
 | 
			
		||||
<div class="box"></div>
 | 
			
		||||
<div class="box"></div>
 | 
			
		||||
<div class="box"></div>
 | 
			
		||||
<div class="box"></div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
效果如下:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
**举例:**利用径向渐变和边框圆角的属性,生成按钮。代码如下:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html lang="en">
 | 
			
		||||
<head>
 | 
			
		||||
    <meta charset="UTF-8">
 | 
			
		||||
    <title>CSS3 渐变</title>
 | 
			
		||||
    <style>
 | 
			
		||||
 | 
			
		||||
        div:nth-child(1) {
 | 
			
		||||
            width: 200px;
 | 
			
		||||
            height: 200px;
 | 
			
		||||
            margin: 40px auto;
 | 
			
		||||
            border-radius: 100px;
 | 
			
		||||
            background-color: yellowgreen;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        div:nth-child(2) {
 | 
			
		||||
            width: 200px;
 | 
			
		||||
            height: 200px;
 | 
			
		||||
            margin: 40px auto;
 | 
			
		||||
            border-radius: 100px;
 | 
			
		||||
            background-color: yellowgreen;
 | 
			
		||||
            background-image: radial-gradient(
 | 
			
		||||
                    200px at 100px 100px,
 | 
			
		||||
                    rgba(0, 0, 0, 0),
 | 
			
		||||
                    rgba(0, 0, 0, 0.5)
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<div></div>
 | 
			
		||||
<div></div>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
效果如下:
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
上图中,给第二个div设置的透明度是从0到0.5。如果设置的透明度是从0到0,则样式无变化,和第一个div一样。如果设置的透明度是从1到1,则盒子是全黑的。
 | 
			
		||||
 | 
			
		||||
CSS3的更多属性,且看下文继续。
 | 
			
		||||
 | 
			
		||||
## 我的公众号
 | 
			
		||||
 | 
			
		||||
@ -120,4 +120,18 @@ css 中的字体族可以理解成是某一类字体。常见的字体族可以
 | 
			
		||||
- 替代方案:针对性加 class
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## CSS 效果
 | 
			
		||||
 | 
			
		||||
我们可以利用 CSS 实现各种效果,常见的效果属性有:
 | 
			
		||||
 | 
			
		||||
- box-shadow:盒子的阴影
 | 
			
		||||
 | 
			
		||||
- text-shadow:文本的阴影
 | 
			
		||||
 | 
			
		||||
- border-radius
 | 
			
		||||
 | 
			
		||||
- background
 | 
			
		||||
 | 
			
		||||
- clip-path
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user