add: clip-path 属性

This commit is contained in:
qianguyihao 2019-10-06 14:39:23 +08:00
parent 1a7cd4cf80
commit 5414be9d2d
3 changed files with 541 additions and 441 deletions

View File

@ -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 @@ PSpadding的区域也是有背景图的。
![](http://img.smyhvae.com/2015-10-03-css-22.png)
## `background-position`属性
`background-position`属性指的是**背景定位**属性。公式如下:
@ -352,7 +362,520 @@ background属性和border一样是一个综合属性可以将多个属性
![](http://img.smyhvae.com/20170813_1515.png)
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>
```
效果如下:
![](http://img.smyhvae.com/20191006_1350.png)
## 背景原点:`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`,那边框部分也会显示图片哦。
如下图所示:
![](http://img.smyhvae.com/20180207_2115.png)
## `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>
```
实现效果如下:
![](http://img.smyhvae.com/20180207_2140.gif)
上方代码中,我们其实给盒子设置了五张小图,拼成的一张大图。当改变浏览器窗口大小时,可以自适应布局。
## 渐变background-image
渐变是CSS3当中比较丰富多彩的一个特性通过渐变我们可以实现许多炫丽的效果有效的减少图片的使用数量并且具有很强的适应性和可扩展性。
渐变分为:
- 线性渐变:沿着某条直线朝一个方向产生渐变效果。
- 径向渐变:从一个**中心点**开始沿着**四周**产生渐变效果。
- 重复渐变。
见下图:
![](http://img.smyhvae.com/20180208_1140.png)
### 线性渐变
格式:
```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>
```
效果如下:
![](http://img.smyhvae.com/20180207_2222.png)
**举例**:按钮
```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>
```
效果:
![](http://img.smyhvae.com/20180207_2301.png)
### 径向渐变
格式:
```
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>
```
效果如下:
![](http://img.smyhvae.com/20180207_2256.png)
**举例:**利用径向渐变和边框圆角的属性,生成按钮。代码如下:
```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>
```
效果如下:
![](http://img.smyhvae.com/20180208_1133.png)
上图中给第二个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()`举例:
![](http://img.smyhvae.com/20191006_1430.png)
另外,还可以引入 svg 图形,这里就不详细展开了。
## 我的公众号

View File

@ -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`,那边框部分也会显示图片哦。
如下图所示:
![](http://img.smyhvae.com/20180207_2115.png)
### 背景裁剪:`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>
```
实现效果如下:
![](http://img.smyhvae.com/20180207_2140.gif)
上方代码中,我们其实给盒子设置了五张小图,拼成的一张大图。当改变浏览器窗口大小时,可以自适应布局。
## 渐变background-image
渐变是CSS3当中比较丰富多彩的一个特性通过渐变我们可以实现许多炫丽的效果有效的减少图片的使用数量并且具有很强的适应性和可扩展性。
渐变分为:
- 线性渐变:沿着某条直线朝一个方向产生渐变效果。
- 径向渐变:从一个**中心点**开始沿着**四周**产生渐变效果。
- 重复渐变。
见下图:
![](http://img.smyhvae.com/20180208_1140.png)
### 线性渐变
格式:
```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>
```
效果如下:
![](http://img.smyhvae.com/20180207_2222.png)
**举例**:按钮
```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>
```
效果:
![](http://img.smyhvae.com/20180207_2301.png)
### 径向渐变
格式:
```
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>
```
效果如下:
![](http://img.smyhvae.com/20180207_2256.png)
**举例:**利用径向渐变和边框圆角的属性,生成按钮。代码如下:
```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>
```
效果如下:
![](http://img.smyhvae.com/20180208_1133.png)
上图中给第二个div设置的透明度是从0到0.5。如果设置的透明度是从0到0则样式无变化和第一个div一样。如果设置的透明度是从1到1则盒子是全黑的。
CSS3的更多属性且看下文继续。
## 我的公众号

View File

@ -120,4 +120,18 @@ css 中的字体族可以理解成是某一类字体。常见的字体族可以
- 替代方案:针对性加 class
## CSS 效果
我们可以利用 CSS 实现各种效果,常见的效果属性有:
- box-shadow盒子的阴影
- text-shadow文本的阴影
- border-radius
- background
- clip-path