css3的新特性-css3实战总结(附源码)

这篇文章是上一篇文章的延续,也是我最后一篇介绍css3方法的文章css3的新特性,因为css的知识并没有那么难,更多的是熟悉css3的新特性和基础理论知识。

所以写这篇文章的目的一方面是总结自己工作中的一些中间CSS方法,另一方面希望能教给大家一些开发CSS的实用方法和高效方法,从而提高CSS开发的效率。工作效率。

我们将学习课文

1. box-shadow的中间应用

利用css3的新特性可以帮助我们实现各种意想不到的特效。 接下来的几个案例,我们将使用css3的box-shdow来实现。 让我们现在开始!

实现水波动画

知识点:box-shadow

想想如果不使用css3我们如何实现水波扩散的动画呢? 想必,写大量的js可以达到如下效果:

css3实现核心代码

<style>.wave {  margin-left: auto;  margin-right: auto;  width: 100px;  height: 100px;  border-radius: 100px;  border: 2px solid #fff;  text-align: center;  line-height: 100px;  color: #fff;  background: #06c url(http://p3g4ahmhh.bkt.clouddn.com/me.jpg) no-repeat center center;  background-size: 100%;  animation: wave 4s linear infinite;}@keyframes wave {    0% {        box-shadow: 0 0 0 0 rgba(245, 226, 226, 1), 0 0 0 0 rgba(250, 189, 189, 1);    }    50% {        box-shadow: 0 0 0 20px rgba(245, 226, 226, .5), 0 0 0 0 rgba(250, 189, 189, 1);    }    100% {        box-shadow: 0 0 0 40px rgba(245, 226, 226, 0), 0 0 0 20px rgba(245, 226, 226, 0);    }}</style><div class="wave"></div>

这里我们主要使用box-shadow的多级阴影来实现。 我们对动画部分使用@keyframes。 你觉得很好吗?

特性新绿_css3的新特性_特性新什么

实现加载动画

知识点:box-shadow多重阴影

您一定熟悉加载动画。 虽然可以使用很多方法来加载动画,例如使用伪元素、使用gif、使用js等,但我认为更高尚的实现方式是直接使用css:

核心代码如下:

<style>.loading {  margin-left: auto;  margin-right: auto;  width: 30px;  height: 30px;  border-radius: 30px;  background-color: transparent;  animation: load 3s linear infinite;}@keyframes load {    0% {        box-shadow: -40px 0 0 rgba(250, 189, 189, 0),                    inset 0 0 0 15px rgba(250, 189, 189, 0),                    40px 0 0 rgba(250, 189, 189, 0);    }    30% {        box-shadow: -40px 0 0 rgba(250, 189, 189, 1),                    inset 0 0 0 15px rgba(250, 189, 189, 0),                    40px 0 0 rgba(250, 189, 189, 0);    }    60% {        box-shadow: -40px 0 0 rgba(250, 189, 189, 0),                    inset 0 0 0 15px rgba(250, 189, 189, 1),                    40px 0 0 rgba(250, 189, 189, 0);    }    100% {        box-shadow: -40px 0 0 rgba(250, 189, 189, 0),                    inset 0 0 0 15px rgba(250, 189, 189, 0),                    40px 0 0 rgba(250, 189, 189, 1);    }}</style><div class="loading"></div>

我们这里也使用了box-shadow多背景,这也是我当时在思考的一个方向。 至于其他的css解决方案,欢迎大家与我交流。

实现对话框以及对话框的不规则投影

知识点:过滤器和伪元素

这就涉及到css过滤器的知识了,不过也很简单。 你看css3的官网就可以理解。 我们直接看疗效:

我们将使用滤镜的投影来实现不规则图形的阴影,然后使用伪元素和边框来实现肘部三角形:

<style>.odd-shadow{    margin-left: auto;    margin-right: auto;    width: 200px;    height: 80px;    border-radius: 8px;    color: #fff;    font-size: 24px;    text-align: center;    line-height: 80px;    background: #06c;    filter: drop-shadow(2px 2px 2px rgba(0,0,0,.8))}.odd-shadow::before{    content: '';    position: absolute;    display: block;    margin-left: -20px;    transform: translateY(20px);    width:0;    height: 0;    border: 10px solid transparent;    border-right-color: #06c;}</style>
<div class="odd-shadow">哎呦,猪先森</div>复制代码

模糊疗效

知识点:过滤器

这个比较简单,这里我直接上图和代码:

filter: blur(20px)

2.制作自适应椭圆

border-radius的出现为我们实现圆角的效果提供了很大的方便。 通过进一步研究Border-radius的特性,我们还可以实现各种图形效果。 接下来就让我们看看它的威力吧!

知识点:border-radius: a / b;//a,b分别是圆角的水平和垂直直径。 如果单位是%,则表示是相对于长度和高度来分析的

核心代码:

<style>.br-1{  width: 200px;  height: 100px;  border-radius: 50% /10%;  background: linear-gradient(45deg,#06f,#f6c,#06c);}.br-2{  width: 100px;  border-radius: 20% 50%;}.ani{  animation: skew 4s infinite;}.ani1{  animation: skew1 4s infinite 2s;}.ani2{  animation: skew2 4s infinite 3s;}@keyframes skew{  to{    border-radius: 50%;  }}@keyframes skew1{  to{    border-radius: 20px 20px 100%;  }}@keyframes skew2{  to{    transform: rotate(360deg);  }}</style><div class="br-1 black-theme"></div><div class="br-1 black-theme ani"></div><div class="br-1 black-theme ani1"></div><div class="br-1 br-2 black-theme ani2"></div>

这里我们主要使用背景渐变来实现华丽的背景,并使用border-radius来实现各种大小的椭圆形图案。

3.纯css3实现饼图进度动画

知识点:border-radius:abcd/efgh; 动画有多种动画属性;

效果如下:

核心代码:

特性新什么_css3的新特性_特性新绿

<style>.br-31{  width: 100px;  height: 100px;  border-radius: 50%;  background: linear-gradient(to right,#f6c 50%,#333 0);}.br-31::before{  content: '';  display: block;  margin-left: 50%;  height: 100%;  border-radius: 0 100% 100% 0 / 50%;  background-color: #f6c;  transform-origin: left;  animation: skin 4s linear infinite,             bg 8s step-end infinite;}@keyframes skin{  to{    transform: rotate(.5turn);  }}@keyframes bg{  50%{    background: #333;  }}.br-32::before{  animation-play-state: paused;  animation-delay: inherit;}</style><div class="br-31 black-theme"></div><div class="br-31 br-32 black-theme" style="animation-delay:-1s"></div>复制代码

这部分的实现我们主要使用渐变背景,这也是实现扇形进度的关键,包括代码中如何覆盖半圆,如何对半圆进行动画处理,如何改变原点的位置旋转等等,这些其实都是很技巧的,不过我们稍微介绍一下,也可以通过画图来实现。

4. css3伪元素实现自定义复选框

我们都知道,原生的复选框控件样式定制难度极大,这大大增加了工程师实现设计稿的难度。 css3的出现增加了:checked选择器,所以我们可以使用:checked和label来实现各种表单选择控件。 接下来我们就来看看如何实现吧!

让我们看看如何实现上面的自定义复选框:

<style>.check-wrap{    text-align: center;}.checkbox{    position: absolute;    clip: rect(0,0,0,0);}.checkbox[type="checkbox"]:focus + label::before{    box-shadow: 0 0 .6em #06c;}.checkbox[type="checkbox"] + label::before{    content: 'a0'; /* 不换行空格 */    display: inline-block;    margin-right: .3em;    width: 2em;    height: 2em;    border-radius: .3em;    vertical-align: middle;    line-height: 2em; /* 关键 */    font-size: 20px;    text-align: center;    color: #fff;    background: gray;}.checkbox[type="checkbox"]:checked + label::before{    content: '2713'; /* 对勾 */    background: black;}
label{ margin-right: 40px; font-size: 20px;}</style><div class="check-wrap"> <input type="checkbox" class="checkbox" id="check-1" /> <label for="check-1">生男孩</label> <input type="checkbox" class="checkbox" id="check-2" /> <label for="check-2">生女孩</label></div>

这里为了隐藏原来的checkbox控件,我们使用clip: rect(0,0,0,0)进行拦截,然后使用checkbox伪类:checked来实现交互。

接下来我们扩展一下,我们来实现一个自定义开关:

特性新什么_特性新绿_css3的新特性

这里原理是一样的,只是样式变了,直接上传代码:

<style>.check-wrap{    margin-bottom: 20px;    text-align: center;}.switch{    position: absolute;    clip: rect(0,0,0,0);}
.switch[type="checkbox"] + label{ width: 6em; height: 3em; padding: .3em; border-radius: .3em; border: 1px solid rgba(0,0,0,.2); vertical-align: middle; line-height: 2em; /* 关键 */ font-size: 20px; text-align: center; color: #fff; box-shadow: 0 1px white inset; background-color: #ccc; background-image: linear-gradient(#ddd,#bbb);}.switch[type="checkbox"]:checked + label{ box-shadow: 0.05em .1em .2em rgba(0,0,0,.6) inset; border-color: rgba(0,0,0,.3); background: #bbb;}
label{ margin-right: 40px; font-size: 14px;}
.switch-an{ position: absolute; clip: rect(0,0,0,0);}
.switch-an[type="checkbox"] + label{ position: relative; display: inline-block; width: 5em; height: 2em; border-radius: 1em; color: #fff; background: #06c; text-align: left;}
.switch-an[type="checkbox"] + label::before{ content: ''; width:2em; height: 2em; position: absolute; left: 0; border-radius: 100%; vertical-align: middle; background-color: #fff; transition: left .3s;}.switch-an[type="checkbox"] + label::after{ content: 'OFF'; margin-left: 2.6em;}.switch-an[type="checkbox"]:checked + label::before{ transition: left .3s; left: 3em;}.switch-an[type="checkbox"]:checked + label::after{ content: 'NO'; margin-left: .6em;}</style><div class="check-wrap"> <input type="checkbox" class="switch" id="switch-1" /> <label for="switch-1">生男孩</label> <input type="checkbox" class="switch" id="switch-2" /> <label for="switch-2">生女孩</label></div>
<div class="check-wrap"> <input type="checkbox" class="switch-an" id="switch-an-1" /> <label for="switch-an-1"></label></div>

你认为css3提供了更强大的动画和自定义功能吗? 事实上css3的新特性,我们还可以达到更酷更实用的疗效,等待你去尝试。

5.一款在线制作css3动画的神器

最后推荐一款在线制作各种贝塞尔曲线的工具,我做动画时经常使用:

三次贝塞尔曲线。

地址:#.17,.67,.83,.67

终于

作者将在2天内推出一个开源CMS系统,技术框架:

稍后将介绍系统的设计思想、架构和实现过程。 欢迎关注公众号“趣聊前端”查看更详细的介绍。

另外我们还建立了趣聊前端社区

欢迎您与来自不同公司的后端开发人员交流讨论后端开发场景、前端日常工作中遇到的问题及解决方案、后端职业发展的讲解。

欢迎大家互相学习,共同探索后端的边界。

本文介绍和总结CSS3(Transform)的新特性,主要内容包括总结CSS3(Transform)的新特性,旋转:,缩放:,倾斜:,平移:,总结:css3新特性,基本概念,基本应用,原理以及机制、注意事项等,并结合实例来分析其用法,希望本文能帮助您理解应用的内容。

总结一下CSS3新特性(Transform)的概述:

CSS3新添加的Transform可以改变可视区域中元素的坐标(这种改变不会引起文档的重新排列,只是重新排列),以及形状和一些3D变形。 与Animation结合(这里会有链接)可以拉风的动画;

旋转:

旋转支持一个参数,角度值0-360deg

#demo{
  transform: rotate(180deg);/*实现旋转,左上角的东西会在右下角显示*/
}

缩放(比例):

scale 支持两个参数(x,y)。 如果y不填,则取x的值; 1为正常,1为放大;

#demo{
  transform: scale(1.2);/*放大1.2倍*/
  transform: scale(.8);/*缩小为正常的0.8倍*/
}

scale提供了两个子方法scaleX和scaleY,分别用于设置x或y的缩放比例;

倾斜(歪斜):

skew支持两个参数(x,y),参数类型为角度(deg),如果不填y则默认为0(与zoom不同);

特性新绿_css3新特性_特性新什么

#demo{
  transform:skew(45deg);/*文本沿x轴向左倾斜45°*/
  transform:skew(0,45deg);/*文本沿y轴向下倾斜45°*/
}

如果只设置x或y,可以直接使用skewX和skewY两个子方法;

翻译(翻译):

translate 接收两个参数 (x, y) 作为平移距离。 如果不填写y值,则默认为0,并且支持CSS中所有有效的厚度单位(使用translate连接元素不会触发重排,只会重绘);

#demo{
  transform:translate(20px,5vh);/*向左移动二十像素,向下移动百分之五的视窗高度*/
}

还有两个子方法css3新特性,translateX、translateY;

做了一个简单的小反例,使用rotate;

总结:

用Transform可以做很多很酷的事情,(跳过matrix,matrix3d没说……)当然,别像我一样死了

相关参考文档:

MDN 的转变

通过 w3school 进行改造

W3文档