这段时间,一直以为css这块感受每次写代码都是经常使用的那些基本属性,以为始终没有对css有一个更深层次的掌握,因此,最近开始学习css相关进阶知识,首先第一关就是攻克 “css揭秘” 这本经典书籍,因此在阅读过程当中,有一些总结想分享给你们,但愿你们一块儿进步。css
本系列文章,主要是围绕css3属性,实现咱们常见的各类效果,这些效果都是咱们实战开发中常常能够用到的效果:css3
本节要说的内容:浏览器
- 半透明边框
- 多重边框
- 灵活的背景定位
- 边框内圆角
- 条纹背景
- 复杂的背景图案
- 总结
默认状况下,css背景会覆盖到边框区域,以下: bash
width: 200px;
height: 200px;
background-color: green;
padding: 10px;
border: 10px solid rgba(0, 0, 0, .2);
复制代码
若是想要背景只覆盖到padding区域或者content区域,如何处理?backgroud-clip;ide
backgroud-clip: border-box(默认) / padding-box / content-box;
复制代码
首先,咱们看一下如下效果:布局
width: 200px;
height: 200px;
background: green;
border: 10px solid deeppink;
复制代码
width: 200px;
height: 200px;
background: green;
border: 10px solid deeppink;
outline: 10px solid pink;
复制代码
width: 200px;
height: 200px;
background: green;
box-shadow: 0 0 0 10px blue, 0 0 0 20px deeppink, 0 0 0 30px pink;
//说明:box-shadow缩写:
//第一个参数表示水平方向向右的偏移量,第二个参数表示垂直方向向下的偏移量
//第三个参数表示阴影的模糊程度,第四个参数表示阴影半径大小。
//第五个参数:outsert/ inset 外阴影或者内阴影,默认为前者。
复制代码
总结:通常实现多重边框的效果时,能够考虑outline和box-shadow去实现相似的效果,可是各个方式有不一样的优缺点: 1. outline: 优势是可使用和border同样的属性值,能够设置为dashed等效果,这些是box-shadow没法实现的,缺点就是只能实现两层边框,同时边框不必定会贴合border-radius的值,即边框若是设置了圆角,描边可能仍是直角的。 2. box-shadow:优势是能够实现多层边框,可是使用box-shadow实现只是相似边框的效果,并非真正的边框,也不会占据布局空间,也不会影响鼠标事件(即鼠标放在阴影和组件上都会触发相同的事件)
实现以下效果:想要背景图片距离底部20px,距离右边20px post
width: 200px;
height: 200px;
background: url("./img/logo_blue.jpg") no-repeat green;
background-position: right 20px bottom 20px;
//或者采用calc处理
//background-posotion: calc(100% - 20px) calc(100% - 20px)
background-size: 50px 50px;
复制代码
以上代码,咱们查看浏览器element发现: 学习
background-origin: padding-box(默认)/border-box/content-box
复制代码
首先,咱们看一下以下效果:边框外部直角,边框内部圆角 字体
咱们最多见的实现方法就是,采用两个div,一个设置直角,一个设置圆角,而后叠加在一块儿便可,这种方法绝对没问题,可是他使用了两个标签,那么使用一个标签能够实现吗?固然能够,动画
width: 400px;
height: 200px;
background: green;
outline: .5em solid red;
border-radius: .8em;
box-shadow: 0 0 0 .5em red;
复制代码
实现说明:咱们采用outline去进行外部描边,且为直角,内部采用border-radius设置圆角,且采用box-shadow去填充由于圆角而空出来的部分,从而实现边框内圆角的效果。(如下是没有设置box-shadow的效果)
1.首先看一下第一个效果:
width: 200px;
height: 200px;
border: 1px solid #aaa;
background: linear-gradient(green, red);
//等价于:linear-gradient(green 0, red 100%)//0表示从开始渐变的起始位置,100%表示渐变的结束位置。
复制代码
2.咱们在看看第二个效果
width: 200px;
height: 200px;
border: 1px solid #aaa;
background: linear-gradient(green 20%, red 80%);//表示从上到下,20%处开始渐变,80%处中止渐变
复制代码
3.如何采用linear-gradient实现条纹效果呢?即去除渐变的效果,效果以下:
width: 200px;
height: 200px;
border: 1px solid #aaa;
background: linear-gradient(green 50%, red 50%); // 此处,第二参数只要小于等于50%均可以。
复制代码
4.如何实现垂直条纹呢?
width: 200px;
height: 200px;
border: 1px solid #aaa;
background: linear-gradient(90deg, green 50%, red 50%);// 即旋转90度
//或者
background: linear-gradient(to right, green 50%, red 50%);//默认是to bottom,即等价于0deg。to right等价于90deg
复制代码
5.如何设置渐变背景的大小?即background-size也能够像控制图片的背景大小同样,控制渐变的背景大小。 以下效果:
width: 200px;
height: 200px;
border: 1px solid #aaa;
background: linear-gradient(to right, green 50%, red 50%) no-repeat;//设置背景是否重复。
background-size: 30px 100%;//设置背景大小
复制代码
6.如何倾斜条纹呢? 实现效果以下:
此刻,咱们可能想到的是,旋转一下不就能够了吗?
width: 200px;
height: 200px;
border: 1px solid #aaa;
background: linear-gradient(45deg, green 50%, red 50%);
background-size: 30px 30px;
复制代码
效果以下:
可是看到效果,哈哈哈,明显不是咱们想要的效果, 怎么办呢?固然是有其余属性支持喽,即repeating-linear-gradient, 顾名思义,就是能够不断重复。 实现代码以下:
width: 200px;
height: 200px;
border: 1px solid #aaa;
background: repeating-linear-gradient(45deg, green 0, red 30px);
复制代码
实现的效果以下:
width: 200px;
height: 200px;
border: 1px solid #aaa;
background: repeating-linear-gradient(45deg, green 0, green 30px, red 30px, red 60px, green 30px);
复制代码
啦啦啦,咱们最开始想要的效果就能够获得啦。
至此:条纹效果,不论是水平,垂直,仍是倾斜,咱们就能够均可以实现的,大体思路就是采用linear-gradient属性,而后经过设置起始位置和结束位置去掉渐变的效果,同时设置旋转的角度,配合repeating-linear-gradient便可实现咱们想要的各类条纹效果。
出了上面咱们第五节所讲到的条纹背景,还有网格,波点,棋盘等更复杂的背景,下面咱们就看看这些效果如何实现吧!
width: 200px;
height: 200px;
background: white;
background-image: linear-gradient(green 50%, transparent 0), linear-gradient(90deg, red 50%, transparent 0);
background-size: 40px 40px 40px 40px;
复制代码
上面代码实现的效果以下:
width: 200px;
height: 200px;
background: white;
background-image: linear-gradient(green 1px, transparent 0), linear-gradient(90deg, red 1px, transparent 0), linear-gradient(green 5px, transparent 0), linear-gradient(90deg, red 5px, transparent 0);
background-size: 20px 20px, 20px 20px, 80px 80px, 80px 80px;
复制代码
实现效果以下:
width: 200px;
height: 200px;
background: #ddd;
background-image: radial-gradient(tan 30%, transparent 0);
background-size: 30px 30px;
复制代码
首先说明一下:radial-gradient第一个参数设置渐变起始位置以及颜色,第二个参数设置渐变结束位置以及颜色(和linear-gradient相似,若是结束位置大于起始位置,则去掉渐变效果)
坦白说,上面的波点图并非真正的波点图,咱们来看看真正波点图的效果:
其实就是,又错位增长了一层圆形的显示,那咱们只须要将两种上面实现的效果,而且不一样的backgroud-position,而后叠加在一块儿便可, 代码以下:
width: 200px;
height: 200px;
background: #ddd;
background-image: radial-gradient(tan 30%, transparent 0), radial-gradient(tan 30%, transparent 0);
background-size: 30px 30px;
background-position: 0 0, 15px 15px;
复制代码
注意:上面的代码,咱们要知道背景定位的位置必须是贴片的宽高的一半,这就意味着,若是咱们要修改贴片的宽高,就要同时修改多个位置,那么听从咱们的dry原则,采用mixin解决(此处的代码是scss)
@mixin polka($size, $dot, $base, $accent) {
background: $base;
background-image:
radial-gradient($accent $dot, transparent 0),
radial-gradient($accent $dot, transparent 0); background-size: $size $size; background-position: 0 0, $size/2 $size/2;
}
//而后,咱们能够在建立波点的地方调用:
@include polka(30px, 30%, #655, tan);
复制代码
首先,咱们看一下以下效果:
width: 300px;
height: 200px;
backgroud-color: green;
border: 20px solid red;
复制代码
上面的方案是采用backgroud + border的方式,固然能够(该方案其实就是第一节案例,半透明边框的实现原理)
那咱们是否能够采用两层backgroud的方式去实现呢?
width: 300px;
height: 200px;
border: 20px solid transparent;
backgroud: linear-gradident(green, green), red;
backgroud-clip: padding-box, border-box;
复制代码
基于以上代码,咱们能够将边框颜色改成边框图片,这样也就实现了咱们所说的图案边框的效果
代码以下:
width: 300px;
height: 200px;
border: 20px solid transparent;
backgroud: linear-gradident(green, green), url('./icon.png');
backgroud-clip: padding-box, border-box;
复制代码
实现的效果以下:
以前,在用到content-box,padding-box,border-box等属性值的时候,可能更多的是用于box-sizing属性,用于改变盒模型,经过这一节的学习,咱们也知道了,这三个属性值一样适用于backgroud-clip,backgroud-origin等属性,
以上是咱们这节内容所涉及到的属性,同时咱们要结合所将的案例,才能够有一个深刻的了解,一块儿加油!!!