酷酷的 CSS3 三角形运用

概述

在早期的前端Web设计开发年代,完成一些页面元素时,我们必须要有专业的PS美工爸爸,由PS美工爸爸来切图,做一些圆角、阴影、锯齿或者一些小图标。

在CSS3出现后,借助一些具有魔力的CSS3属性,使得这些元素大多都可以由开发人员自己来完成。在开始阅读这篇文章前,我们先喊个口号:不想当艺术家的程序员不是好设计师!

图例

我们先来看一副设计图

这幅图复杂的元素不多,布局也较为简单,我们大致分析一下,需要PS美工爸爸帮忙做的只有一件事情,就是将上半部分的蓝色背景图给抠出来。
除此之外,出现在这幅设计图的一些特殊形状和小图标,都可以通过CSS3来实现。
我们将这些特殊形状和小图标分为两类:

1. 可以用Icon Font实现的

Icon Font是将一些图标作成字体文件,在CSS中指定font-face和font-family,然后为每个图标指定相应的class。
在网页中使用Icon Font就像使用普通的文字一样,比如font-size属性可以设定图标的大小,设定color属性可以设定图标的颜色。
更多内容,请参考阿里巴巴矢量图标管理网站:http://iconfont.cn/

2. 不能用IconFont实现的

为什么这些图形不用IconFont实现呢?因为通常Icon Font提供的都是一些正方形的矢量图标,也就是长等于宽的图标。
本篇要讲的就是如何通过CSS3来实现这4个图形。

三角形

不知大家注意到了没有,这4个图形都包含了一个特殊的元素——三角形。
这4个图形,都是由三角形、长方形,或者是一个被啃掉了一口的长方形组成的。

CSS3是如何实现三角形的呢?——答案是通过边框,也就是border属性。

长方形边框

HTML的块级元素都是长方形的,比如我们设定了以下样式:

  1. <style>
  2. .simple-retangle {
  3. margin: 50px auto;
  4. width: 200px;
  5. height: 200px;
  6. border: 40px solid salmon;
  7. }
  8. </style>
  9. <div class="simple-retangle"></div>
 
 
 

 
 
 
 
 
 
 

如大家所认知的,这只是一个简单的长方形,这个长方形在画面中是这样显式的:

这个长方形太单调了,再给它点颜色看看,咱们来个彩色边框吧。

  1. <style>
  2. .colored-border-retangle {
  3. margin: 50px auto;
  4. width: 200px;
  5. height: 200px;
  6. border-top: 40px solid coral;
  7. border-right: 40px solid lightblue;
  8. border-bottom: 40px solid lightgreen;
  9. border-left: 40px solid mediumpurple;
  10. }
  11. </style>
  12. <div class="colored-border-retangle"></div>

在画面中,每个边框都变成一个梯形了。

为什么它会变成梯形呢?

请注意长方形的4个角,以左上角为例,它到底是属于左边框还是上边框呢?
左上角,既属于左边框,又属于上边框,角落的归属成了一个问题,浏览器为了不让边框打架,就让二位各分一半吧。
于是乎左上角就被一分为二,变成了两个三角形,三角形靠近哪个边框,就显示那个边框的颜色。

三角形的实现

再看看文章开头的4个图案,你是不是又发现了这样一个规律?每个三角形都是“小家碧玉”的,它们没有内容
既然如此,我们把上面这个彩色边框的矩形内容拿掉,看看会发生什么。

  1. <style>
  2. .colored-border-empty-retangle {
  3. margin: 50px auto;
  4. border-top: 40px solid coral;
  5. border-right: 40px solid lightblue;
  6. border-bottom: 40px solid lightgreen;
  7. border-left: 40px solid mediumpurple;
  8. }
  9. </style>
  10. <div class="colored-border-empty-retangle"></div>
 
 

呜,cool!左边和右边都是三角形了 耶!

为什么上边和下边还是梯形呢?这是因为块级元素默认会在页面上水平平铺。

理解这一点,让上边和下边也变成三角形就简单了,将元素的width属性设为0:

  1. <style>
  2. .colored-border-empty-retangle {
  3. margin: 50px auto;
  4. width: ;
  5. height: ;
  6. border-top: 40px solid coral;
  7. border-right: 40px solid lightblue;
  8. border-bottom: 40px solid lightgreen;
  9. border-left: 40px solid mediumpurple;
  10. }
  11. </style>
  12. <div class="colored-border-empty-retangle"></div>
 
 
 
 
 

JavaScript

 
 

现在上下左右4个边框都是三角形了。

假设我们不要4个三角形,也不要让它们凑一块,我们就只要1个三角形,该如何做呢?
将其他3个边框的颜色设为透明色:

  1. <style>
  2. .triangle-top,
  3. .triangle-right,
  4. .triangle-bottom,
  5. .triangle-left {
  6. margin: 20px auto;
  7. width: ;
  8. height: ;
  9. border: 100px solid transparent;
  10. }
  11.  
  12. .triangle-top {
  13. border-top-color: coral;
  14. }
  15.  
  16. .triangle-right {
  17. border-right-color: lightblue;
  18. }
  19.  
  20. .triangle-bottom {
  21. border-bottom-color: lightgreen;
  22. }
  23.  
  24. .triangle-left {
  25. border-left-color: mediumpurple;
  26. }
  27. </style>
  28. <div class="triangle-top"></div>
  29. <div class="triangle-right"></div>
  30. <div class="triangle-bottom"></div>
  31. <div class="triangle-left"></div>
 
 
 
 
 
 
 
 
 
 
 

图案实现

知道了三角形的实现方法,那么下面4个图案实现起来就小Case了。

这4个图案分别是:旗帜,向右的双实心箭头,气泡和丝带。

View Demo

为了便于这几种图案的演示,我们先设定以下基础共通的样式

  1. * {
  2. font-family: simhei, sans-serif;
  3. box-sizing: border-box;
  4. }
  5.  
  6. html {
  7. font-size: 62.5%;
  8. }
  9.  
  10. body {
  11. background-color: lightblue;
  12. }
  13.  
  14. div {
  15. margin: 20px auto;
  16. }
 
 
 
 
 

CSS

 
 

实现旗帜

旗帜图案是下半部分被啃掉了一口的长方形,这一口是个三角形。


根据以上知识,我们很自然地就能想到实现方法,将border-bottom的颜色设置为透明的。

  1. .flag {
  2. width: ;
  3. height: ;
  4. border: 2rem solid #FF6600;
  5. border-top-width: 4rem;
  6. border-bottom-color: transparent;
  7. border-bottom-width: 2rem;
  8. }
 
 
 
 
 

CSS实现双实心箭头

双实心箭头则是由两个三角形组成的

为了减少页面的HTML元素,我们可以只提供一个元素实现第1个三角形,然后借助CSS3的伪类实现第2个三角形。
第1个三角形使用了相对定位,第2个三角形使用了绝对定位,使得第2个三角形能够紧挨着第1个三角形。

  1. .rds-arrow-wrapper {
  2. position: relative;
  3. width: 20em;
  4. text-align: center;
  5. }
  6.  
  7. .rds-arrow,
  8. .rds-arrow:after {
  9. display: inline-block;
  10. position: relative;
  11. width: ;
  12. height: ;
  13. border-top: 1rem solid transparent;
  14. border-left: 2rem solid #fff;
  15. border-bottom: 1rem solid transparent;
  16. border-right: 2rem solid transparent;
  17. }
  18.  
  19. .rds-arrow {
  20. margin-left: 1rem;
  21. }
  22.  
  23. .rds-arrow:after {
  24. content: "";
  25. position: absolute;
  26. left: %;
  27. top: -1rem;
  28. bottom: ;
  29. }
 
 
 
 
 

需要注意的是,箭头方向是向右的,但在CSS里面是通过border-left的颜色来控制的。

实现气泡

气泡是我们常见的一种图案,它是由一个三角形和一个长方形组成的。

由于三角形是放在长方形前面的,所以我们使用:before伪类,并设置绝对定位。

  1. .bubble {
  2. position: relative;
  3. background-color: #33AAEE;
  4. width: 10rem;
  5. height: 3rem;
  6. font-size: 2rem;
  7. line-height: 3rem;
  8. color: #FFF;
  9. text-align: center;
  10. }
  11.  
  12. .bubble:before {
  13. position: absolute;
  14. content: "";
  15. right: %;
  16. top: 1rem;
  17. width: ;
  18. height: ;
  19. border-top: .6rem solid transparent;
  20. border-right: .6rem solid #33AAEE;
  21. border-bottom: .6rem solid transparent;
  22. border-left: .6rem solid transparent;
  23. }
  24.  
  25. .bubble .text {
  26. display: inline-block;
  27. }
 
 
 
 
 

实现丝带

丝带的实现则稍微复杂一些,不过我们可以将它拆分成3个部分:

  1. 一个显示文字的长方形
  2. 左右两侧的耳朵(被啃了一口的长方形)
  3. 在下方用于显示阴影的两个小三角形

第1步:实现丝带主体长方形

  1. .ribbon {
  2. position: relative;
  3. width: 10rem;
  4. height: 3rem;
  5. padding: .7rem ;
  6. font-size: .6rem !important;
  7. color: #fff;
  8. text-align: center;
  9. background: #ff0066;
  10. }

第2步:实现丝带左右两侧的耳朵

:before伪类实现左耳朵,:after伪类实现右耳朵

  1. .ribbon:before,
  2. .ribbon:after {
  3. content: "";
  4. position: absolute;
  5. display: block;
  6. bottom: -.6rem;
  7. border: .5rem solid #ff0066;
  8. z-index: -;
  9. }
  10.  
  11. .ribbon:before {
  12. left: -.4rem;
  13. border-right-width: .5rem;
  14. border-left-color: transparent;
  15. box-shadow: 1px 1px rgba(, , , 0.8);
  16. }
  17.  
  18. .ribbon:after {
  19. right: -.4rem;
  20. border-left-width: .5rem;
  21. border-right-color: transparent;
  22. box-shadow: 1px rgba(, , , 0.8);
  23. }
 
 
 
 
 
 
 
 
 

第3步:实现阴影

  1. .ribbon .ribbon-content:before,
  2. .ribbon .ribbon-content:after {
  3. content: "";
  4. position: absolute;
  5. display: block;
  6. border-style: solid;
  7. border-color: #bf004c transparent transparent transparent;
  8. bottom: -.6rem;
  9. }
  10.  
  11. .ribbon .ribbon-content:before {
  12. left: ;
  13. border-width: .6rem .6rem;
  14. }
  15.  
  16. .ribbon .ribbon-content:after {
  17. right: ;
  18. border-width: .6rem .6rem ;
  19. }
 
 
 
 
 

HTML代码:

  1. <div class="ribbon">
  2. <span class="ribbon-content">金卡会员</span>
  3. </div>

最终效果:

页面实现

有以上的知识基础,实现本文开头的设计图就较为简单了。
由于代码较长,我就不贴出来了,请各位直接到GitHub上查看这个demo吧。

View Demo

总结

读完以上内容,是不是觉得实现这些图案变得很简单了?是不是感觉很酷?现在你可以叫自己为爸爸了。
三角形的运用场景非常之多,你尽可以发挥你的想象去实现它们!



CSS3 三角形运用的更多相关文章

  1. CSS3—三角形

    话不多说看效果:演示效果,runjs 1.加了宽高和border,边用不同颜色显示,每条边都是一个梯形 2.去掉宽高,每条边都是三角形 3.只显示其中一条边就是不同的三角形了,是不是很简单,改变bor ...

  2. 酷酷的CSS3三角形运用

    概述 在早期的前端Web设计开发年代,完成一些页面元素时,我们必须要有专业的PS美工爸爸,由PS美工爸爸来切图,做一些圆角.阴影.锯齿或者一些小图标. 在CSS3出现后,借助一些具有魔力的CSS3属性 ...

  3. 【转载】酷酷的CSS3三角形运用

    转载:http://www.cnblogs.com/keepfool/p/5616326.html 概述 在早期的前端Web设计开发年代,完成一些页面元素时,我们必须要有专业的PS美工爸爸,由PS美工 ...

  4. CSS中的一下小技巧1之CSS3三角形运用

    使用CSS3实现三角形: 在前端页面中有很多时候会遇到需要三角形图案的时候,以前不知道可以用CSS3实现三角形的时候,一般都是叫UI把三角形图案切出来. 后来知道原来可以用CSS3实现三角形,可是用过 ...

  5. css3三角形冒泡泡图形制作

    图一: 图二: <!DOCTYPE html> <html> <head> <title>css 三角形</title> <style ...

  6. css3 三角形

    https://jsbin.com/gexezo/edit?html,css,output https://jsbin.com/gexezo

  7. CSS3 画基本图形,圆形、椭圆形、三角形等

    CSS3圆角#css3-circle{ width: 150px; height: 150px; border-radius: 50%; }CSS3 椭圆形css3 radius#css3-elips ...

  8. CSS3 实现圆形、椭圆形、三角形等各种形状样式

    CSS3 圆形 #css3-circle{ width: 150px; height: 150px; border-radius: 50%; background-color: #232323;} C ...

  9. CSS3—六边形

    整理了2种方法,看完肯定觉得超简单~ 一.旋转型 话不多说先看下需要的样式: 1.transform:rotate(angle) 2.overflow 3.visibility 效果:演示效果,run ...

随机推荐

  1. Java学习笔记19---内部类之简介成员内部类、局部内部类及匿名内部类

    内部类,顾名思义,即定义在某个类内部的类,称包含该内部类的类为外部类. 从定义的位置来说,分为成员内部类和局部内部类:从类的特征来说,分为匿名内部类和静态内部类. 今天先简要介绍一下前三种内部类的定义 ...

  2. [笔记]《JavaScript高级程序设计》- JavaScript简介

    JavaScript实现 虽然JavaScript和ECMAScript通常都被人们用来表达相同的含义,但JavaScript的含义却比ECMA-262中规定的要多得多.一个完整的JavaScript ...

  3. Vim 在 windows 环境下的初步配置

    一..下载工具包 vim 程序:下载安装程序 vim-plug 插件: 下载插件管理文件 二. 安装 VIM 1.如果无特别要求,一路选择默认, 在类型选择时,选择 full 2. 配置 vim-pl ...

  4. Video Target Tracking Based on Online Learning—TLD单目标跟踪算法详解

    视频目标跟踪问题分析         视频跟踪技术的主要目的是从复杂多变的的背景环境中准确提取相关的目标特征,准确地识别出跟踪目标,并且对目标的位置和姿态等信息精确地定位,为后续目标物体行为分析提供足 ...

  5. 记录WEUI中滚动加载的一个BUG

    最近写微信公众号,用到的技术栈是jq+vue的混合开发,采用的UI是移动端比较火的WEUI,在微信开发中应该较广泛.个人看惯了elementUI文档,相对于饿了么组件文档的详细,WEUI的文档还是比较 ...

  6. HUST 1555 A Math Homework

    1555 - A Math Homework 时间限制:1秒 内存限制:128兆 338 次提交 131 次通过 题目描述     QKL is a poor and busy guy, and he ...

  7. HDU1465-装错信封-递推

    不容易系列之一 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  8. LightOJ DNA Prefix(字典树+dfs)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=121897#problem/F F - DNA Prefix Time Limit:200 ...

  9. Choose the best route(最短路)dijk

    http://acm.hdu.edu.cn/showproblem.php?pid=2680 Choose the best route Time Limit: 2000/1000 MS (Java/ ...

  10. Zabbix如何实现批量监控端口状态

    引言 ------------------------------------------------------------------------------------------------- ...