利用css画图形,是个有利有弊的写法,好处是不用画图,且节省了一些流量,坏处是要写长串的css样式,而且有可能流量并没有减少,用与否视情况而定,个人选择。
其中用了css3.0的一些属性,所以这里声明:请用支持css3.0的浏览器看此文章!
上面这几个相对比较简单,没什么可解释的,看下面源码:
/*正方形*/ .Square { width: 100px; height: 100px; background: #669; } /*矩形*/ .rectangle { width: 200px; height: 100px; background: #669; } /*梯形*/ .trapezoid { border - bottom: 100px solid#669; border - left: 50px solid transparent; border - right: 50px solid transparent; height: 0; width: 100px; } /*平行四边形*/ .parallelogram { width: 150px; height: 100px; - webkit - transform: skew( - 20deg); - moz - transform: skew( - 20deg); - o - transform: skew( - 20deg); background: #669; margin - left: 20px; }
上面这些三角,其实也很常见,主要原理是利用了相邻两个边框的接壤处分配原则,如果没有宽度和高度的话,其实应该是四个三角形接成的矩形,下面是上面图形的源码:
/*三角形*/ .triangle - up { width: 0; height: 0; border - left: 50px solid transparent; border - right: 50px solid transparent; border - bottom: 100px solid#669; }.triangle - down { width: 0; height: 0; border - left: 50px solid transparent; border - right: 50px solid transparent; border - top: 100px solid#669; }.triangle - left { width: 0; height: 0; border - top: 50px solid transparent; border - right: 100px solid#669; border - bottom: 50px solid transparent; }.triangle - right { width: 0; height: 0; border - top: 50px solid transparent; border - left: 100px solid#669; border - bottom: 50px solid transparent; }.triangle - updown { width: 0; height: 0; border - left: 50px solid transparent; border - right: 50px solid transparent; border - bottom: 100px solid#669; position: relative; margin - bottom: 50px }.triangle - updown: after { content: " "; width: 0; height: 0; border - left: 50px solid transparent; border - right: 50px solid transparent; border - top: 100px solid#669; position: absolute; top: 50px; left: -50px; }.triangle - topleft { width: 0; height: 0; border - top: 100px solid#669; border - right: 100px solid transparent; }.triangle - topright { width: 0; height: 0; border - top: 100px solid#669; border - left: 100px solid transparent; }.triangle - bottomleft { width: 0; height: 0; border - bottom: 100px solid#669; border - right: 100px solid transparent; }.triangle - bottomright { width: 0; height: 0; border - bottom: 100px solid#669; border - left: 100px solid transparent; }
看下面例子,清楚的标明了,四个边的情况,上面的三角形都是利用了这个原理,让不想显示的边框透明transparent:
其实这个跟上面画三角形的原理很相似,都是利用相邻边框接壤的配原则。另还主要利用了css3.0的圆角属性 border-radius 适当的调整大小会有不同的效果!结合border-width调整,可以得到不同的图形。
当然适当的调整角度和组合,可以得到更多的图形.
/*圆形 主要利用了css3.0的圆角属性 border-radius 适当的调整大小会有不同的效果*/ .circle { width: 100px; height: 100px; background: #669; - moz - border - radius: 50px; - webkit - border - radius: 50px; border - radius: 50px; }.circle - circle { width: 100px; height: 100px; border: 20px solid#669; background: #fff; - moz - border - radius: 100px; - webkit - border - radius: 100px; border - radius: 100px; }.circle - up { width: 100px; height: 0px; border: 0 solid transparent; border - top: 100px solid#669; border - right: 100px solid#669; - moz - border - radius: 100px 100px 0 0; - webkit - border - radius: 100px 100px 0 0; border - radius: 100px 100px 0 0; }.circle - down { width: 100px; height: 0px; border: 0 solid transparent; border - bottom: 100px solid#669; border - right: 100px solid#669; - moz - border - radius: 0 0 100px 100px; - webkit - border - radius: 0 0 100px 100px; border - radius: 0 0 100px 100px; }.circle - left { width: 100px; height: 0px; border: 0 solid transparent; border - bottom: 100px solid#669; border - top: 100px solid#669; - moz - border - radius: 100px 0 0 100px; - webkit - border - radius: 100px 0 0 100px; border - radius: 100px 0 0 100px; }.circle - right { width: 100px; height: 0px; border: 0 solid transparent; border - bottom: 100px solid#669; border - top: 100px solid#669; - moz - border - radius: 0 100px 100px 0; - webkit - border - radius: 0 100px 100px 0; border - radius: 0 100px 100px 0; }.circle - lefttop { width: 100px; height: 0px; border: 0 solid transparent; border - top: 100px solid#669; - moz - border - radius: 0 100px 100px 0; - webkit - border - radius: 0 100px 100px 0; border - radius: 100px 0 0 0; }.circle - righttop { width: 100px; height: 0px; border: 0 solid transparent; border - top: 100px solid#669; - moz - border - radius: 0 100px 0 0; - webkit - border - radius: 0 100px 0 0; border - radius: 0 100px 0 0; }.circle - rightbottom { width: 100px; height: 0px; border: 0 solid transparent; border - bottom: 100px solid#669; - moz - border - radius: 0 0 100px 0; - webkit - border - radius: 0 0 100px 0; border - radius: 0 0 100px 0; }.circle - leftbottom { width: 100px; height: 0px; border: 0 solid transparent; border - bottom: 100px solid#669; - moz - border - radius: 0 0 0 100px; - webkit - border - radius: 0 0 0 100px; border - radius: 0 0 0 100px; }
下面是适当的调整边框宽度和圆角得到的效果:
/*适当的调整边框宽度和圆角得到的效果*/ .tail - lefttop { border: 0 solid transparent; border - top: 30px solid#669; - moz - border - radius: 100px 0 0 0; - webkit - border - radius: 100px 0 0 0; border - radius: 100px 0 0 0; width: 100px; height: 100px; }.tail - righttop { border: 0 solid transparent; border - top: 30px solid#669; - moz - border - radius: 0 100px 0 0; - webkit - border - radius: 0 100px 0 0; border - radius: 0 100px 0 0; width: 100px; height: 100px; }.tail - rightbottom { border: 0 solid transparent; border - bottom: 30px solid#669; - moz - border - radius: 0 0 100px 0; - webkit - border - radius: 0 0 100px 0; border - radius: 0 0 100px 0; width: 100px; height: 100px;; }.tail - leftbottom { border: 0 solid transparent; border - bottom: 30px solid#669; - moz - border - radius: 0 0 0 100px; - webkit - border - radius: 0 0 0 100px; border - radius: 0 0 0 100px; width: 100px; height: 100px; }
当然可以通过上面延伸画出更多的效果比如:提示泡
.pop { width: 200px; height: 100px; - moz - border - radius: 20px; - webkit - border - radius: 20px; border - radius: 20px; background: #669; margin - top: 20px; position: relative }.pop: after { content: ""; border: 0 solid transparent; border - bottom: 30px solid#669; - moz - border - radius: 0 0 0 200px; - webkit - border - radius: 0 0 0 200px; border - radius: 0 0 0 200px; width: 50px; height: 50px; position: relative; margin - top: 20px; - webkit - transform: rotate( - 90deg); - moz - transform: rotate( - 90deg); - ms - transform: rotate( - 90deg); - o - transform: rotate( - 90deg); position: absolute; top: 50px; }
上面是css实现代码,基本原理又多了一项,就是利用了:after伪类,小尾巴上面已经介绍过了,这里又利用了一个css3.0的属性transform:rotate旋转了一个角度,同时还实现了另外的一个图形--圆角矩形,这是最基本radius的用法,没什么可讲的。当然这里也可以延伸出另一个伪类:before画出第二个小尾巴,当然也不仅限于小尾巴,上面的圆角矩形也可以换成椭圆。
下面给出实现代码:
.oval - pop { width: 200px; height: 100px; background: #669; - moz - border - radius: 100px / 50px; - webkit - border - radius: 100px / 50px; border - radius: 100px / 50px; margin - bottom: 50px; position: relative }.oval - pop: after { content: ""; border: 0 solid transparent; border - bottom: 30px solid#669; - moz - border - radius: 0 0 0 200px; - webkit - border - radius: 0 0 0 200px; border - radius: 0 0 0 200px; width: 50px; height: 50px; position: relative; margin - top: 20px; - webkit - transform: rotate( - 90deg); - moz - transform: rotate( - 90deg); - ms - transform: rotate( - 90deg); - o - transform: rotate( - 90deg); position: absolute; top: 50px; left: 20px }
效果如下:
同时,也给出了椭圆的实现代码。 其中 border-radius: 100px / 50px; 中有一个“/” 这个符号是很少出现在css样式中的。因为,圆角有水平方向也有垂直方向,所以"/"前面代表水平方向,后面代表垂直方向。
于是我们又多了一个属性,又多了一个发挥的方向。突然间我们发现css画图形其实就是对属性的组合创造。多试几次,相信每个人都很好的掌握这个技能!
下面再看一个属性,其实是对上面讲过的属性的一个扩展。
可以说是画圆的扩展也可以说是对圆角矩形的扩展---胶囊形:
下面是实现代码,基本属性上面我们都利用过,只是稍做调整:
.capsule { border: 0 solid transparent; - moz - border - radius: 100px; - webkit - border - radius: 100px; border - radius: 100px; width: 200px; height: 70px; background: #669; }.v - capsule { border: 0 solid transparent; - moz - border - radius: 100px; - webkit - border - radius: 100px; border - radius: 100px; width: 80px; height: 200px; background: #669 }.up - capsule { border: 0 solid transparent; - moz - border - radius: 100px; - webkit - border - radius: 100px; border - radius: 100px 100px 0 0; width: 70px; height: 120px; background: #669; }.r45 - capsule { border: 0 solid transparent; - moz - border - radius: 100px; - webkit - border - radius: 100px; border - radius: 100px 100px 0 0; width: 70px; height: 120px; background: #669; - moz - transform: rotate(45deg); - ms - transform: rotate(45deg); - o - transform: rotate(45deg); - webkit - transform: rotate(45deg); margin - left: 20px; }.l45 - capsule { border: 0 solid transparent; - moz - border - radius: 100px; - webkit - border - radius: 100px; border - radius: 100px 100px 0 0; width: 70px; height: 120px; background: #669; - moz - transform: rotate( - 45deg); - ms - transform: rotate( - 45deg); - o - transform: rotate( - 45deg); - webkit - transform: rotate( - 45deg); margin - left: 20px; }.lr45 - capsule { width: 160px; height: 130px; position: relative }.lr45 - capsule: before { content: " "; border: 0 solid transparent; - moz - border - radius: 100px; - webkit - border - radius: 100px; border - radius: 100px 100px 0 0; width: 80px; height: 120px; background: #669; - moz - transform: rotate( - 45deg); - ms - transform: rotate( - 45deg); - o - transform: rotate( - 45deg); - webkit - transform: rotate( - 45deg); position: absolute; left: 20px; }.lr45 - capsule: after { content: " "; border: 0 solid transparent; - moz - border - radius: 100px; - webkit - border - radius: 100px; border - radius: 100px 100px 0 0; width: 80px; height: 120px; background: #669; - moz - transform: rotate(45deg); - ms - transform: rotate(45deg); - o - transform: rotate(45deg); - webkit - transform: rotate(45deg); position: absolute; left: 160px; top: 00px; }
细观察一下最后两个图形如果合在一起好像能组成一个心形,其实就是一个心形:
.heart { width: 160px; height: 200px; position: relative }.heart: before { content: " "; border: 0 solid transparent; - moz - border - radius: 100px; - webkit - border - radius: 100px; border - radius: 100px 100px 0 0; width: 80px; height: 120px; background: #669; - moz - transform: rotate( - 45deg); - ms - transform: rotate( - 45deg); - o - transform: rotate( - 45deg); - webkit - transform: rotate( - 45deg); position: absolute; left: 20px; }.heart: after { content: " "; border: 0 solid transparent; - moz - border - radius: 100px; - webkit - border - radius: 100px; border - radius: 100px 100px 0 0; width: 80px; height: 120px; background: #669; - moz - transform: rotate(45deg); - ms - transform: rotate(45deg); - o - transform: rotate(45deg); - webkit - transform: rotate(45deg); position: absolute; left: 48px; top: 0px; }