css3深入了解之奇技淫巧
前言
自CSS3流行以来,虽然以前看过一遍所有的新增属性,但其实在实际项目中用到的少之又少。所以没有形成系统性的认识,以及看到效果立马就能想到解决方案的能力。然后最近正好遇到一个需要绘制大量动画的需求,所以决定趁此机会好好研究一下这个既熟悉又陌生的css3。
在正式开始css3之前,先来介绍一些比较经典的css3实例,让大家好好感受一下css3的魅力:
border-radius
相信这个属性,写过css的同学都知道,用来产生圆角,比如画一个圆形:
div {
width:100px;
height:100px;
background:red;
border-radius:100px; //border-radius:100%;
}

然后我们来看看它的语法:
border-radius: [左上] [右上] [右下] [左下],于是我们来画一个半圆div {
width: 100px;
height: 50px;
background: red;
border-radius: 50px 50px 0 0;
}

那如果要画一个椭圆该怎么办呢?你会发现上面的语法貌似做不到了,其实border-radius的值还有一种语法:
x半径/y半径:div {
width: 100px;
height: 50px;
background: red;
border-radius: 50px/25px;
}

如果我要画半个椭圆,又要咋办呢?
div {
width: 100px;
height: 50px;
background: red;
border-radius: 100% 0 0 100% /50%;
}

::after
这里拿个简单的例子来看,我们要画一个放大镜,如下图:

分析一下,这个放大镜可以由两个div组成,一个是黑色的圆环,一个是黑色把手(旋转45度)。所以我们就需要用两个div来实现吗?答案是NO,一个div也是可以的,我们可以借助::after来添加一个元素。同理如果需要三个div,我们还可以使用::before再添加一个元素。下面看一下代码:
div {
width: 50px;
height: 50px;
border-radius: 50%;
border: 5px solid #333;
position: relative;
}
div::after {
content: '';
display: block;
width: 8px;
height: 60px;
border-radius: 5px;
background: #333;
position: absolute;
right: -22px;
top: 38px;
transform: rotate(-45deg);
}
attr和content
比如我们要实现一个悬浮提示的功能。传统方法,使用title属性就能实现,但是现在我们要更美观,可以使用css3提供的attr:能够在css中获取到元素的某个属性值,然后插入到伪元素的content中去。
假如我们的html代码如下:
<div data-title="hello, world">hello...</div>
我们来看看实现这个插件的css代码:
div {
position: relative;
}
div:hover::after {
content: attr(data-title); //取到data-title属性的值
display: inline-block;
padding: 10px 14px;
border: 1px solid #ddd;
border-radius: 5px;
position: absolute;
top: -50px;
left: -30px;
}
当hover的时候,在元素尾部添加一个内容为data-title属性值的元素,所以就实现了hover显示的效果,如下图所示:

box-sizing
我们知道,在标准盒子模型中,元素的总宽=content + padding + border + margin。 css中的盒子模型大家可能都知道,但是这个盒子模型的属性可能没有那么多人知道,box-sizing属性就是用来重定义这个计算方式的,它有三个取值,分别是:content-box(默认)、border-box、padding-box
一般来说,假如我们需要有一个占宽200px、padding10px、border5px的div,经过计算,要这么定义样式。
div {
width: 170px; //这里的宽度要使用200-10*2-5*2 = 170得到。
height: 50px;
padding: 10px;
border: 5px solid red;
}
然后我们来使用一下box-sizing属性。
div {
box-sizing: border-box;
width: 200px; //这里的宽度就是元素所占总宽度,不需要计算
height: 50px;
padding: 10px;
border: 5px solid red;
}
linear-gradient
做活动页面的时候我们经常会遇到这样的需求:
顶部的中间一张大banner图片,然后整个区域的背景色要根据图片背景色渐变。就可以使用这个属性了。
div {
width: 200px;
height: 50px;
background: linear-gradient(to right, red, yellow, black, green);
}

是不是很有趣?其实,linear-gradient还有更多有趣的功能,你可以根据下面的动图去感受一下:

你以为这就完了?等等,还有更强大的呢!repeating-linear-gradient,来感受一下:

linear-gradient还有更加强大的功能,比如它可以给元素添加多个渐变,从而达到更NB的效果。
radial-gradient
上面的linear-gradient是线性渐变,这个属性是径向渐变。下面的代码实现了一个chrome的logo。

div.chrome {
width: 180px;
height: 180px;
border-radius: 50%;
box-shadow: 0 0 4px #999, 0 0 2px #ddd inset;
background: radial-gradient(circle, #4FACF5 0, #2196F3 28%, transparent 28%),
radial-gradient(circle, #fff 33%, transparent 33%),
linear-gradient(-50deg, #FFEB3B 34%, transparent 34%),
linear-gradient(60deg, #4CAF50 33%, transparent 33%),
linear-gradient(180deg, #FF756B 0, #F44336 30%, transparent 30%),
linear-gradient(-120deg, #FFEB3B 40%, transparent 40%),
linear-gradient(-60deg, #FFEB3B 30%, transparent 30%),
linear-gradient(0deg, #4CAF50 45%, transparent 45%),
linear-gradient(60deg, #4CAF50 30%, transparent 30%),
linear-gradient(120deg, #F44336 50%, transparent 50%),
linear-gradient(180deg, #F44336 30%, transparent 30%);
}
实现原理就是使用了多个渐变色放在div上,友协被遮住,视觉上就产生了想要的效果,是不是很强大!看了下图你就知道其实就是在div上加了很多个渐变。

box-shadow
上面的例子大都是对css3新属性的了解和认识,这个实例则是有关于解决方案的例子。
需求:我们要实现下面这个效果图(三个边框:黑色,绿色,红色):

解法一:假如没有css3知识,我们可以做这样做:用三个div,分别设置边框,然后分别控制宽高和位置来达到这个效果。显然,很复杂,这里就不贴代码了。
解法二:现在我们有css3的知识了,借助
box-shadow就可以轻松解决这个问题。先来看看它的语法:box-shadow: [x偏移] [y偏移] [阴影模糊宽度] [阴影宽度] [颜色],并且还能添加多个阴影,使用逗号隔开。
当然你还可以继续增加,四重边框,五重边框......都不再是问题啦。另外,还能加圆角,阴影会贴紧内层div。
使用这种方法,有一个缺点就是,不支持虚线边框。解法三: 使用outline(只能支持两重边框)

使用这种方法的缺点就是,只能支持两层的边框,而且还不能根据容器的border-radius自动贴合。
总结
通过这段时间对css3的深入了解,发现css3真的很强大,研究起来还是挺有趣的,只有想不到,感觉没有做不到。不过为了实现很酷炫的效果,可能需要编写大量的css代码,这个时候使用什么技术就需要我们自己来衡量了。
css3深入了解之奇技淫巧的更多相关文章
- 使用CSS3实现一个3D相册
CSS3系列我已经写过两篇文章,感兴趣的同学可以先看一下CSS3初体验之奇技淫巧,CSS3 3D立方体效果-transform也不过如此 第一篇主要列出了一些常用或经典的CSS3技巧和方法:第二篇是一 ...
- css3 奇技淫巧 - 如何给小汽车换个背景色谈起
css3 的魅力,不容小觑.曾经被她折服,再度回首,依旧拜倒在她的石榴裙下.相信在未来,她仍然魅力依旧. 站在巨人的肩上学习,不断提升自身实力. 用 CSS 和颜色选择工具更改图片中的颜色,即如何给小 ...
- CSS3 3D立方体效果-transform也不过如此
CSS3系列已经学习了一段时间了,第一篇文章写了一些css3的奇技淫巧,原文戳这里,还获得了较多网友的支持,在此谢过各位,你们的支持是我写文章最大的动力^_^. 那么这一篇文章呢,主要是通过一个3D立 ...
- 【CSS进阶】box-shadow 与 filter:drop-shadow 详解及奇技淫巧
box-shadow 在前端的 CSS 编写工作想必十分常见.但是 box-shadow 除去它的常规用法,其实还存在许多不为人知的奇技淫巧. 喜欢 markdown 版本的可以戳这里. box-sh ...
- CSS3中的网格
在这篇文章中,我们将来看一些CSS3新属性,从而用HTML和CSS处理网格的时候更容易.但首先让我们讨论一点HTML和CSS网格的历史,了解清楚为什么以前很困难. 网格简史 曾几何时,我们的布局是一团 ...
- box-shadow 与 filter:drop-shadow 详解及奇技淫巧
box-shadow 在前端的 CSS 编写工作想必十分常见.但是 box-shadow 除去它的常规用法,其实还存在许多不为人知的奇技淫巧. 喜欢 markdown 版本的可以戳这里. box-sh ...
- 关于CSS3中transform变换的小坑
2017年6月30日15:05:46 今天在写一个demo的时候,发现CSS3中transform变换的一个特性. 首先,我先描述一下我发现的情况(问题再现): <div class=" ...
- 10 个 GitHub 上超火的 CSS 奇技淫巧项目,找到写 CSS 的灵感!
大家好,我是你们的 超级猫,一个不喜欢吃鱼.又不喜欢喵 的超级猫 ~ 如果 CSS 是女孩子,肯定如上图那样吧
- 纯CSS3实现的一些酷炫效果
之前在网上看到一些用纯CSS3实现的酷炫效果,以为实现起来比较困难,于是想看看具体是怎么实现的. 一.笑脸猫动画 实现效果如下: 这个实现起来确实比较麻烦,很多地方需要花时间,有耐心地调整. 1.先看 ...
随机推荐
- 编写一个通用的Makefile文件
1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe ...
- Prometheus 系统监控方案 一
最近一直在折腾时序类型的数据库,经过一段时间项目应用,觉得十分不错.而Prometheus又是刚刚推出不久的开源方案,中文资料较少,所以打算写一系列应用的实践过程分享一下. Prometheus 是什 ...
- 一点公益商城开发系统模式Ring Buffer+
一个队列如果只生产不消费肯定不行的,那么如何及时消费Ring Buffer的数据呢?简单的方案就是当Ring Buffer"写满"的时候一次性将数据"消费"掉. ...
- BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]
4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...
- 让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。
写在前面 阅读目录: 娓娓道来 Install ASP.NET vNext Command Line Tools 安装 Homebrew 使用 Homebrew,安装 KVM Install Subl ...
- 更有效率的使用Visual Studio(二)
没想到上一篇文章有这么多人喜欢,多谢大家支持.继续- 很多比较通用的快捷键的默认设置其实是有一些缩写在里面的,这个估计也是MS帮助我们记忆.比如说注释代码的快捷键是Ctrl + E + C,我们如果知 ...
- Go语言实战 - 使用SendCloud群发邮件
山坡网需要能够每周给注册用户发送一封名为"本周最热书籍"的邮件,而之前一直使用的腾讯企业邮箱罢工了,提示说发送请求太多太密集. 一番寻找之后发现了大家口碑不错的搜狐SendClou ...
- ABP(现代ASP.NET样板开发框架)系列之8、ABP日志管理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之8.ABP日志管理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- [转载]:STM32为什么必须先配置时钟再配置GPIO
转载来源 :http://blog.csdn.net/fushiqianxun/article/details/7926442 [原创]:我来添两句,就是很多同学(包括我)之前搞低端单片机,到了stm ...
- [翻译]AKKA笔记 - ACTOR生命周期 - 基本 -5
原文地址:http://rerun.me/2014/10/21/akka-notes-actor-lifecycle-basic/ (请注意这了讨论的生命周期并不包括 preRestart 或者pos ...