使用CSS3制图

参考资料:http://blog.csdn.net/fense_520/article/details/37892507

本文非转载。为个人原创,转载请先联系博主,谢谢~

准备:

<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>- UED - </title>
<style type="text/css" src="css/style.css"></style>
<script type="text/javascript" src="js/ext.js"></script>
</head>

<div class="xxx"></div>

xxx按需更改

div { background:black;}

好。我们開始绘图吧!

1. 矩形

.rectangle { width:100px; height:100px;}

2. 圆形

.circle { width:100px; height:100px; border-radius:50px;}



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHpoX2xvb3A=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

图 1

3. 圆柱形

.cylinder {width:100px; height:100px; border-radius:100px/50px;}



watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHpoX2xvb3A=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHpoX2xvb3A=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

图 2-1 图2-2 图2-3

橙色为border-radius:100px/50px时的情况,紫色为border-radius:50px/100px的情况。值各自是水平半径和垂直半径。在正方形内圈出了一个圆柱形。能够发现,border-radius总保持它的圆心在中心了。

为什么不会是图2-2的样子呢<待解决1>?当我们设置border-radius:100px/100px的时候,你会惊奇地发现,它又变回一个圆形了。你会以为它是图2-3的样子的,但实际上不是。它跟图1的圆形一样大小,这又是为什么呢<待解决2>?

4. 椭圆形

.oval {width:200px; height:100px; border-radius:100px/50px;}

跟圆柱形差点儿相同,把正方形的宽扩张到200px,它正好容纳了那个椭圆。椭圆就是画出来的椭圆啦!

5. 三角形

[class^=triangle-] { width:0px; height:0px;}

先以上三角形为例:

.triangle-up { border-left:50px solid transparent; border-right:50px solid transparent; border-bottom:100px solid red;}

这个三角形是怎么来的呢?我细细研究了一下。发现border之间有一条分界,而这条分界是45度倾斜的,如图-3,两border间有明显分界,这就是我们画三角形所要利用到的原理,上面已经设置width和height为0,这时两border交汇处就有一个由两个三角形组成的矩形啦,设置当中一个border为透明,就剩下一个三角形了。对,就是这么简单。那这个上三角形该怎么画?设置左右border和border-bottom,让左右border变透明。这时你们看到的上三角形事实上是由两个三角形组成的,如图-4。

其它种类的三角形类似,你看着哪几个border能组成这个三角形顺便调整一下border-width即可了。以前有一道笔试题——画出一条丝带,如今想想挺简单的,不就是一个黄色左三角形+黄色矩形+白色左三角形定位做成的嘛。例如以下:

div { float:left;}
#test { border-top:100px solid transparent; border-bottom:100px solid transparent; border-right:100px solid yellow;}
#test2 { width:800px; height:200px; background:yellow;}
#test3 { border-top:100px solid transparent; border-bottom:100px solid transparent; border-right:100px solid white; margin-left:-100px;}

图-3

图-4

6. 平行四边形——现成的属性——transform:skew(20deg) 左倾斜的意思

7. 梯形

事实上跟上面说的上三角形一个道理,只是设置它的width为100px,height为0,也就是两个三角形加一个width为100px,height为border-bottom宽度的矩形画成的。

8.六角星

.star-six { width:0; height:0; border-left:50px solid transparent; border-right:50px solid transparent; border-bottom:100px solid red; position:relative;}
.star-six:after { width:0; height:0; border-left:50px solid transparent; border-right:50px solid transparent; border-top:100px solid red; position:absolute; content:""; top:30px; left:-50px;}

第一行:建立一个上三角形,粉色部分(中间被遮挡了)。position为relative。

第二行:伪类的位置为absolute。因star-six类的宽高均为0。伪类的起始位置在图-5所看到的的圆圈中,要明确一个原理,若star-six宽高不为0,伪类块是在star-six内部的,由于分别设置了position为relative和absolute,这时两三角形组成了个平行四边形,这也算是画平行四边形的一种方法吧。当我尝试去掉position:absolute,发现伪类元素仅仅剩下左边的一半了,并且位于star-six元素的右上方。这是为什么<待解决3>?(before是在后面,而after是在前面的?真奇怪) 答:看走眼了。:after确实是在后面了。

接下来就是定位了top:30px; left:-50px; 将原三角形移动到绿色三角形所看到的位置,这时他们组成了一个六角形。

其它:content:"",这个一定要有。若没有就是normal了,网上看到有篇文章写到”content:normal将 :before 和 :after 伪元素计算成‘none’”,而content:none的伪元素是不会被生成的,关于content属性,我也不太懂,各位自行查找资料。

图-5

9. 五角星

.star-five { margin:50px 0; position:relative; width:0px; height:0px; border-left:100px solid transparent; border-right:100px solid transparent; border-bottom:70px solid red;
    -webkit-transform:rotate(35deg);
       -moz-transform:rotate(35deg);
        -ms-transform:rotate(35deg);
         -o-transform:rotate(35deg); }
.star-five:before { border-bottom:80px solid orange; border-left:30px solid transparent; border-right:30px solid transparent; position:absolute; height:0; width:0; top:-45px; left:-65px; display:block; content:'';
    -webkit-transform:rotate(-35deg);
       -moz-transform:rotate(-35deg);
        -ms-transform:rotate(-35deg);
         -o-transform:rotate(-35deg); }
.star-five:after { border-bottom:70px solid green; border-left:100px solid transparent; border-right:100px solid transparent; position:absolute; display:block; color:red; top:3px; left:-105px; width:0px; height:0px; content:'';
    -webkit-transform:rotate(-70deg);
       -moz-transform:rotate(-70deg);
        -ms-transform:rotate(-70deg);
         -o-transform:rotate(-70deg); }

使用前面的提到的方法,分别绘制三角形再旋转和定位而成。代码所看到的,:before伪类元素画出的是五角星顶部的小三角形。我们也能够把:before画成跟star-five和:after一样大小的三角形再旋转定位。

10. 五角大楼(或者说是五边形)——由两个梯形组成(或者你用各种奇形怪状拼凑),没什么好说的了。

11. 六边形 = 上三角形 + 矩形 + 下三角形

12. 八边形 = 上梯形 + 矩形 + 下梯形

13. 爱心 = 两个拥有两圆角的矩形,如图-6。(transform-oritin定义旋转的基准点,对rotate属性起作用)

图-6

14. 无穷符号 = 两个矩形(分别拥有3个圆角和一个直角)

15. 鸡蛋 =  一个带圆角的矩形

16. 药丸

.pill { width:0px; height:0px; border-right:60px solid transparent; border-top:60px solid red; border-bottom:60px solid red; border-radius:60px;}

图-7

这个我也不知道是怎么形成的。照理说。它仅仅有上边、下边和右边的相交部分,border-xxx-left应该没作用才是,但他又确实起作用了,对这个变化有点纳闷。如图-7后两步<待解决4>。

17. 对话框 = 圆角矩形 + 左三角形

18. 钻石 = 梯形 + 下三角形

我认为用css3绘图形在实际应用中没什么大的用处,纯属用来练手好了(也许还能够应付几道笔试题呢)。

最后,谢谢你认真看完了。不足之处,欢迎指出。顺便帮我解答几个待解决这个问题。

完整代码:

div { background:black;}
/*矩形*/
.rectangle { width:100px; height:100px;}
/*圆形*/
.circle { width:100px; height:100px; border-radius:50px;}
/*图柱形*/
.cylinder {width:100px; height:100px; border-radius:100px/50px;}
/*椭圆形*/
.oval {width:200px; height:100px; border-radius:100px/50px;}

/*各种三角形*/
[class^=triangle-] { width:0px; height:0px;}
.triangle-up { border-left:50px solid transparent; border-right:50px solid transparent; border-bottom:100px solid red;}
.triangle-down { border-left:50px solid transparent; border-right:50px solid transparent; border-top:100px solid red;}
.triangle-equal { border-left:50px solid transparent; border-right:50px solid transparent; border-bottom:50px solid red;}
.triangle-left { border-top:50px solid transparent; border-right:100px solid red; border-bottom:50px solid transparent;}
.triangle-right { border-top:50px solid transparent; border-left:100px solid red; border-bottom:50px solid transparent;}
.triangle-left-up { border-top:100px solid red; border-right:200px solid transparent;}
.triangle-right-up { border-top:100px solid red; border-left:200px solid transparent;}
.triangle-left-down { border-bottom:100px solid red; border-right:200px solid transparent;}
.triangle-right-down { border-bottom:100px solid red; border-left:200px solid transparent;}

/*平行四边形*/
.parallelogram { width:150px; height:100px; margin-left:20px;
    -webkit-transform: skew(20deg);
       -moz-transform: skew(20deg);
         -o-transform: skew(20deg); }
/*梯形*/
.trapezoid { width:100px; height:0px; border-bottom:100px solid red; border-left:50px solid transparent; border-right:50px solid transparent;}
/*六角星*/
.star-six { width:0; height:0; border-left:50px solid transparent; border-right:50px solid transparent; border-bottom:100px solid red; position:relative;}
.star-six:after { width:0; height:0; border-left:50px solid transparent; border-right:50px solid transparent; border-top:100px solid red; position:absolute; content:""; top:30px; left:-50px;}
/*五角星*/
.star-five { margin:50px 0; position:relative; width:0px; height:0px; border-left:100px solid transparent; border-right:100px solid transparent; border-bottom:70px solid red;
    -webkit-transform:rotate(35deg);
       -moz-transform:rotate(35deg);
        -ms-transform:rotate(35deg);
         -o-transform:rotate(35deg); }
.star-five:before { border-bottom:80px solid orange; border-left:30px solid transparent; border-right:30px solid transparent; position:absolute; height:0; width:0; top:-45px; left:-65px; display:block; content:'';
    -webkit-transform:rotate(-35deg);
       -moz-transform:rotate(-35deg);
        -ms-transform:rotate(-35deg);
         -o-transform:rotate(-35deg); }
.star-five:after { border-bottom:70px solid green; border-left:100px solid transparent; border-right:100px solid transparent; position:absolute; display:block; color:red; top:3px; left:-105px; width:0px; height:0px; content:'';
    -webkit-transform:rotate(-70deg);
       -moz-transform:rotate(-70deg);
        -ms-transform:rotate(-70deg);
         -o-transform:rotate(-70deg); }
/*五角大楼*/
.pentagon { position:relative; width:54px; border-width:50px 18px 0; border-style:solid; border-color:red transparent;}
.pentagon:before { content:""; position:absolute; height:0; width:0; top:-85px; left:-18px; border-width:0 45px 35px; border-style:solid; border-color:transparent transparent red;}
/*六边形*/
.hexagon { width:100px; height:55px; background:red; position:relative;}
.hexagon:before { content:""; position:absolute; top:-25px; left:0; width:0; height:0; border-left:50px solid transparent; border-right:50px solid transparent; border-bottom:25px solid red;}
.hexagon:after { content:""; position:absolute; bottom:-25px; left:0; width:0; height:0; border-left:50px solid transparent; border-right:50px solid transparent; border-top:25px solid red;}
/*八边形*/
.octagon { width:100px; height:100px; background:red; position:relative;}
.octagon:before { content:""; position:absolute; top:0; left:0; border-bottom:29px solid red; border-left:29px solid #eee; border-right:29px solid #eee; width:42px; height:0;}
.octagon:after { content:""; position:absolute; bottom:0; left:0; border-top:29px solid red; border-left:29px solid #eee; border-right:29px solid #eee; width:42px; height:0;}
/*爱心*/
.heart { position:relative; width:100px; height:90px;}
.heart:before { position:absolute; content:""; left:50px; top:0; width:50px; height:80px; background:red;
    -moz-border-radius:50px 50px 0 0;
         border-radius:50px 50px 0 0;
    -webkit-transform: rotate(-45deg);
       -moz-transform: rotate(-45deg);
        -ms-transform: rotate(-45deg);
         -o-transform: rotate(-45deg);
            transform: rotate(-45deg);
    -webkit-transform-origin:0 100%;
       -moz-transform-origin:0 100%;
        -ms-transform-origin:0 100%;
         -o-transform-origin:0 100%;
            transform-origin:0 100%; }
.heart:after { left:0; content:""; position:absolute; width:50px; height:80px;
    background:red;
    -moz-border-radius:50px 50px 0 0;
         border-radius:50px 50px 0 0;
    -webkit-transform: rotate(45deg);
       -moz-transform: rotate(45deg);
        -ms-transform: rotate(45deg);
         -o-transform: rotate(45deg);
            transform: rotate(45deg);
    -webkit-transform-origin:100% 100%;
       -moz-transform-origin:100% 100%;
        -ms-transform-origin:100% 100%;
         -o-transform-origin:100% 100%;
            transform-origin :100% 100%; }
/*无穷大符号*/
.infinity { position:relative; width:212px; height:100px; }
.infinity:before { width:60px; height:60px; border:20px solid red; content:""; position:absolute;
    -moz-border-radius:50px 50px 0 50px;
         border-radius:50px 50px 0 50px;
    -webkit-transform: rotate(-45deg);
       -moz-transform: rotate(-45deg);
        -ms-transform: rotate(-45deg);
         -o-transform: rotate(-45deg);
            transform: rotate(-45deg); }
.infinity:after { right:auto; width:60px; height:60px; border:20px solid red; content:""; position:absolute;
    -moz-border-radius:50px 50px 50px 0;
         border-radius:50px 50px 50px 0;
    -webkit-transform: rotate(45deg);
       -moz-transform: rotate(45deg);
        -ms-transform: rotate(45deg);
         -o-transform: rotate(45deg);
            transform: rotate(45deg); }
/*鸡蛋*/
.egg { width:126px; height:180px; background-color:red;
    -webkit-border-radius:63px 63px 63px 63px/108px 108px 72px72px;
            border-radius:50% 50% 50% 50%/60% 60% 40% 40%; }
/*药丸*/
.pill { width:0px; height:0px; border-right:60px solid transparent; border-top:60px solid red; border-bottom:60px solid red;
    border-top-left-radius:60px;
    border-top-right-radius:60px;
    border-bottom-left-radius:60px;
    border-bottom-right-radius:60px; }
/*对话框*/
.talkbubble { width:120px; height:80px; background:red; position:relative;
    -webkit-border-radius:10px;
       -moz-border-radius:10px;
            border-radius:10px;}
.talkbubble:before { content:""; position:absolute; right:100%; top:26px; width:0; height:0; border-top:13px solid transparent; border-right:26px solid red; border-bottom:13px solid transparent;}
/*钻石*/
.cut-diamond { border-style:solid; border-color:transparent transparent red transparent; border-width:0 25px 25px 25px; height:0; width:50px; position:relative; margin:20px 0 50px 0;}
.cut-diamond:after { content:""; position:absolute; top:25px; left:-25px; width:0; height:0; border-style:solid; border-color:red transparent transparent transparent; border-width:70px 50px 0 50px;}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-23 08:01:55

使用CSS3制图的相关文章

CSS3 chart

利用CSS3技术生成统计图. 原理:利用元素的百分比算出旋转度数.类似于斗地主时,手拿扑克牌的形状. 程序源码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" Content="text/html; charset=utf-8;"> 5 <title> CSS3 chart </title> 6 <

CSS Sprites+CSS3 Icon Font

CSS Sprites+CSS3 Icon Font 先马上等有空一定看看转载于http://www.cnblogs.com/jingwhale/p/4280073.html CSS Sprites在国内很多人叫CSS精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了.根据具体图标在大图上的位置,给背景定位. CSS Sprites加速的关键,不是降低质量,而是减少个数. 做成

CSS3 2D Transform

在 一个二维或三维空间,元素可以被扭曲.移位或旋转.只不过2D变形工作在X轴和Y轴,也就是大家常说的水平轴和垂直轴:而3D变形工作在X轴和Y轴之外, 还有一个Z轴.这些3D变换不仅可以定义元素的长度和宽度,还有深度.我们将首先讨论元素在2D平面如何变换,然后我们在进入3D变换的讨论. CSS3 2D变换让Web设计师有了更多的自由来装饰和变形HTML组件.同时让设计师有更多的功能装饰文本和更多动画选项来装饰Div元素.在CSS3 2D变形中主要包含的一些基本功能如下. 位移translate()

纯CSS3加载Loading动画图 12款创意设计

我们经常使用GIF图片来实现Loading加载动画,确实利用GIF图片来实现也非常方便,但需要我们一定的制图功底,我们作为程序员很多对制图一窍不通,那么今天就让我们用CSS3代码来实现漂亮的Loading加载动画吧,下面的12款非常有创意的CSS3 Loading加载动画肯定会让你喜欢上CSS3,喜欢上HTML5. 原文阅读地址:http://www.xuecss3.com/htmlcss-8-554-1.html 更多css3特效欢迎查看学css3网

7款纯CSS3实现的炫酷动画应用

1.纯CSS3实现人物摇头动画 这次我们要来分享一款超级可爱的纯CSS3人物摇头动画,初始化的时候人物的各个部位是利用CSS3动画效果拼接而成,接下来就是人物听音乐的场景,一边听音乐一边摇着脑袋,十分陶醉的样子,周围还会出现跳动的音符动画. 在线演示 源码下载 2.CSS3 Loading进度条加载动画特效 3款绚丽风格 今天我要分享一款更加炫酷的CSS3进度条加载动画特效,该动画特效有3个不同的风格,注意,IE6,7,8是不支持该进度条动画的. 在线演示 源码下载 3.纯CSS3实现云雾缭绕动

再说CSS3渐变——线性渐变

渐变背景一直以来在Web页面中都是一种常见的视觉元素.但一直以来,Web设计师都是通过图形软件设计这些渐变效果,然后以图片形式或者背景图片的形式运用到页面中.Web页面上实现的效果,仅从页面的视觉效果上来看,与设计并无任何差异. 事实上这种方法是比较麻烦的,因为首先需要设计师进行设计,然后进行切图,在通过样式应用到页面中.另外,在实际应用中可扩展性差,还直接影响页面性能. 值得庆幸的是,W3C组织将渐变设计收入到CSS3标准中,让广大的前端设计师直接受益,可以直接通过CSS3的渐变属性制作类似渐

CSS3渐变——线性渐变

渐变背景一直以来在Web页面中都是一种常见的视觉元素.但一直以来,Web设计师都是通过图形软件设计这些渐变效果,然后以图片形式或者背景图片的形式运用到页面中.Web页面上实现的效果,仅从页面的视觉效果上来看,与设计并无任何差异. 事实上这种方法是比较麻烦的,因为首先需要设计师进行设计,然后进行切图,在通过样式应用到页面中.另外,在实际应用中可扩展性差,还直接影响页面性能. 值得庆幸的是,W3C组织将渐变设计收入到CSS3标准中,让广大的前端设计师直接受益,可以直接通过CSS3的渐变属性制作类似渐

CSS3各个模块详解

一, CSS3 盒子 阴影 属性 box- shadow 也是 CSS3 新增 的 一个 重要 属性, 用来 定义 元素 的 盒子 阴影. inset: 阴影 类型, 可选 值. 如果不 设置, 其 默认 的 投影 方式 是 外 阴影: 如果 取其 唯一 值" inset", 就是 给 元素 设置 内 阴影. x- offset: 阴影水平偏移量, 其值可以是正负值. 如果取正值, 则 阴影 在 元素 的 右边, 反之 取 负值, 阴影 在 元素 的 左边. y- offset: 阴影

CSS3变形属性

CSS3变形CSS2.1中的页面都是静态的,网页设计师也习惯把它作为页面效果的设计工具.多年来,Web设计师依赖于图片.Flash或 JavaScript才能完成修改页面的外观. CSS3将改变设计师这种思维,借助CSS3可以轻松倾斜.缩放.移动以及翻转元素.2012年9月,W3C组织发布了CSS3变形工作草案.允许CSS把元素转变为2D或3D空间,这个草案包括了CSS32D变形和CSS33D变形.CSS3变形是一些效果的集合, 比如平移.旋转.缩放和倾斜效果,每个效果都称为变形函数( Tran