简单图形

矩形

div{
width: 100px;
height: 100px;
background-color: red;
}

圆形

div{
width: 100px;
height: 100px;
background-color: red;
border-radius: %;
}

椭圆

【整个椭圆】

div{
width: 100px;
height: 50px;
background-color: red;
border-radius: %;
}

【半椭圆或半圆】

div{
width: 100px;
height: 100px;
background:red;
border-radius:50% /100% 100% 0 0 ;
}

【四分之一椭圆】

div{
width: 100px;
height: 100px;
background:red;
border-radius:100% 0 0 0 ;
}

三角形

【直角三角形】

div{
width: ;
height: ;
border: 50px solid transparent;
border-bottom-color: red;
}

【正三角形】

div{
width: ;
height: ;
border: 50px solid transparent;
border-width: 86.6px 50px;
border-bottom-color: red;
}

平行四边形

【基本图形】

div{
margin-left: 50px;
width: 100px;
height: 100px;
background-color: red;
transform: skew(30deg);
}

【改进版本】

  上面的代码中,不仅形状发生了变形,内容也发生了变形。有两种方法改进

  1、元素嵌套

.outer{
margin-left:20px;
width: 100px;
height: 100px;
background:red;
transform:skewX(-30deg);
}
.inner{
transform:skewX(30deg);
}
</style>
<div class="outer">
<div class="inner">小火柴</div>
</div>

  2、伪元素

  把所有样式都应用到伪元素上,然后再对伪元素进行变形

div{
position:relative;
margin-left:20px;
width: 100px;
height: 100px;
text-indent: 30px;
}
div::before{
content:'';
position:absolute;
top: 0;right: 0;left: 0;bottom: 0;
transform:skewX(-30deg);
background:red;
z-index:-1;
}

梯形

【基本版本】

div{
width: 50px;
border: 50px solid transparent;
border-bottom-color: red;
}

【增强版本】

  上面的代码虽然简单且巧妙,但无法在图形内容填充文本。下面是比较复杂的增强版本

div{
height: 100px;
width: 200px;
line-height: 100px;
position:relative;
display:inline-block;
text-align: center;
color:white;
padding: .5em 1em .35em;
}
div:before{
content:'';
position:absolute;
top: 0;right: 0;bottom: 0;left: 0;
z-index:-1;
background:#58a;
transform:scaleY(1.3) perspective(.5em) rotateX(5deg);
transform-origin: bottom;
}

【梯形选项卡】

<style>
a{
width: 120px;
text-align: center;
text-decoration: none;
color:inherit;
font-size: 20px
}
nav > a{
position:relative;
display:inline-block;
padding:.3em .1em 0;
}
nav > a:before{
content:'';
position:absolute;
top: 0;right: 0;left: 0;bottom: 0;
z-index:-1;
background:#ccc;
border:1px solid black;
border-radius: .5em .5em 0 0 ;
box-shadow: 0 .15em white inset; transform:scaleY(1.3) perspective(.5em) rotateX(5deg);
transform-origin: bottom;
}
</style>
<nav>
<a href="#">HTML</a>
<a href="#">CSS</a>
<a href="#">Javascript</a>
</nav>

复杂图形

多角星

【五角星】

  一个大三角形底部掏掉一个小三角形;两个前面的相同图形叠压

  经计算,五角星的夹角为36度,若小三角形的侧边为a,则大三角形的侧边为2a(1+sin18),两个三角形共同的底边为2a(sin54)

<div class="box">
  <div class="in"></div>
  <div class="in"></div>
</div>

.box{
position: relative;
}
.in{
margin-left: 100px;
position: relative;
width: 0px;
border: 10px solid transparent;
border-width: 249px 81px;
border-bottom-color: red;
position: absolute;
}
.in:after{
content: "";
position:absolute;
border: 10px solid transparent;
border-width: 59px 81px;
border-bottom-color: white;
top: 133px;
left: -81px;
}
.in:last-child{
top: 100px;
left: -134px;
transform: rotate(-73deg);
}

【六角星】

  两个三角形叠压

div{
position: relative;
width: ;
border: 50px solid transparent;
border-width: 50px .4px;
border-bottom-color: red;
}
div:after{
position: absolute;
content:"";
width: ;
border: 50px solid transparent;
border-width: 50px .4px;
border-top-color: red;
top: 16px;
left: -42px;
}

多边形

【六边形】

  两个梯形拼接

div{
position: relative;
width: 50px;
border: 50px solid transparent;
border-bottom-color: red;
}
div:after{
position: absolute;
content:"";
width: 50px;
border: 50px solid transparent;
border-top-color: red;
top:50px;
left: -50px;
}

【八边形】

.outer{
width:100px;
height: 100px;
transform:rotate(45deg);
overflow: hidden;
}
.inner{
width:100%;
height: 100%;
transform:rotate(-45deg);
background:red;
}

【菱形】

<style>
.outer{
margin:50px 0 0 50px;
width:100px;
height: 100px;
transform:rotate(45deg);
overflow: hidden;
}
.inner{
width:100%;
height: 100%;
transform:rotate(-45deg) scale(1.42);
background:red;
}
</style>

桃心

  创建一个方形div,分别用css控制div的两个伪元素平移到正方形相邻两边,圆形与边中点重合。最后将总的div旋转45度

<style>
div{
display:inline-block;
margin:50px;
height: 100px;
width: 100px;
background-color: red;
transform: rotate(-45deg);
}
div:before,div:after{
display:block;
content:"";
width: 100px;
height: 100px;
background-color: red;
border-radius: 50%;
margin-top:-50%;
}
div:after{
margin-left:50%;
}
</style>
<div></div>

切角效果

【单角】

background: linear-gradient(-45deg,transparent 5%,#58a 0);

【双角】

  background: linear-gradient(-45deg,transparent 5%,#58a 0) right,linear-gradient(45deg,transparent 5%,#58a 0) left;
background-size:50% 100%;
background-repeat:no-repeat;

【四角】

  background: linear-gradient(-135deg,transparent 5%,#58a 0) top right,linear-gradient(135deg,transparent 5%,#58a 0) top left,linear-gradient(-45deg,transparent 5%,#58a 0) bottom right,linear-gradient(45deg,transparent 5%,#58a 0) bottom left;
background-size:50% 50%;
background-repeat:no-repeat;

【弧形切角】

  background: radial-gradient(circle at top right,transparent 5%,#58a 0) top right,radial-gradient(circle at top left,transparent 5%,#58a 0) top left,radial-gradient(circle at bottom right,transparent 5%,#58a 0) bottom right,radial-gradient(circle at bottom left,transparent 5%,#58a 0) bottom left;
background-size:50% 50%;
background-repeat:no-repeat;

折角效果

background:linear-gradient(to left bottom,transparent 50%,rgba(0,0,0,0.4) 0) no-repeat 100% 0 /2em 2em,linear-gradient(-135deg,transparent 1.414em ,#58a 0);

饼图效果

  饼图在网页中的运用极为普遍,比如简单的统计图表、进度指示器、定时器等

【静态效果】

<style>
@keyframes spin{
to{transform: rotate(.5turn);}
}
@keyframes bg{50%{background:#655;}}
.pie{
width: 100px;line-height: 100px;
position:relative;
background-color: yellowgreen;
border-radius: 50%;
color:transparent;
text-align:center;
background-image: linear-gradient(to right, transparent 50%,#655 0);
}
.pie:before{
content:'';
position:absolute;
top: 0;left: 50%;
width: 50%;height: 100%;
border-radius: 0 100% 100% 0 /50%;
background-color: inherit;
transform-origin: left;
animation: spin 50s linear infinite,bg 100s step-end infinite;
animation-play-state:paused;
animation-delay:inherit;
}
</style>
<div class="pie" style="animation-delay:-20s">20%</div>
<div class="pie" style="animation-delay:-90s">90%</div>

【动态效果】

<style>
@keyframes spin{
to{transform: rotate(.5turn);}
}
@keyframes bg{50%{background:#655;}} .pie{
width: 100px;height: 100px;
position:relative;
background-color: yellowgreen;
border-radius: 50%;
background-image: linear-gradient(to right, transparent 50%,#655 0);
}
.pie:before{
content:'';
position:absolute;
top: 0;left: 50%;
width: 50%;height: 100%;
border-radius: 0 100% 100% 0 /50%;
background-color: inherit;
transform-origin: left;
animation: spin 3s linear infinite,bg 6s step-end infinite;
animation-play-state: paused;
}
.pie:hover:before{
animation-play-state: running;
}
</style>
<div class="pie"></div>

  鼠标移入时,饼图发生移动

【SVG实现】

  让圆形的周长接近于100,方便计算。r = 100/(2*PI) = 16

<style>
@keyframes fillup{to{stroke-dasharray:100 100;}}
svg{
width: 100px;
height: 100px;
transform: rotate(-90deg);
background: yellowgreen;
border-radius: 50%;
}
circle{
fill:yellowgreen;
stroke:#655;
stroke-width:32;
stroke-dasharray: 0 100;
animation: fillup 5s linear infinite;
}
</style>
<svg viewbox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
<circle r=16 cx=16 cy=16></circle>
</svg>

最后

  除了使用CSS画图之后,实现各种形状更简单的方法是使用clip-path路径裁剪样式

  欢迎交流

CSS画出的图的更多相关文章

  1. 用css画出三角形

    看到有面试题里会有问到如何用css画出三角形 众所周知好多图形都可以拆分成三角形,所以说会了画三角形就可以画出很多有意思的形状 画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及 ...

  2. 如何用css画出三角形

    看到有面试题里会有问到如何用css画出三角形 众所周知好多图形都可以拆分成三角形,所以说会了画三角形就可以画出很多有意思的形状 画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及 ...

  3. 用css画出三角形【转】

    看到有面试题里会有问到如何用css画出三角形 众所周知好多图形都可以拆分成三角形,所以说会了画三角形就可以画出很多有意思的形状 画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及 ...

  4. css 画出三角形

    技术分享不一定行文累赘 这里说说最简洁的 css 画出三角形 display: inline-block; border: 10px dashed transparent; border-left: ...

  5. 用HTML+CSS画出一个同心圆

    参加web前端校招的同学们经常会遇到这样的面试题:用HTML+CSS画出一个同心圆. 例如: 这道题主要考验的是基础盒模型布局能力和倒圆角属性的巧用. 1.html代码 <body> &l ...

  6. CSS画出的各种形状图

    利用CSS可以画出各种需要的图形目录[1]矩形[2]圆形[3]椭圆[4]直角三角形[5]正三角形[6]平行四边形[7]梯形[8]六角星[9]六边形[10]五角星简单图形 矩形div{ width: 1 ...

  7. 情人节,教大家使用css画出一朵玫瑰花。

    情人节到了,给大家来一朵高端的玫瑰花. 在网上看到的一个canvas实现的玫瑰花,效果很好,但是代码被压缩过,也没有注释,看的云里雾里的. 今天我教大脚用CSS来实现一朵玫瑰花. 先看效果 首先我们画 ...

  8. 灵悟礼品网上专卖店——画出E-R图

    一.小组成员: 洪雪意(产品负责人) 陈淑筠(Master) 二.组内人员任务情况 计划完成的任务的第三个模块:分析并建立数据库 已完成的任务: 任务的第三个模块: 陈淑筠(完成任务1):画出商品资料 ...

  9. 用css画出对话框

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAa4AAAFSCAYAAACqpTv4AAAgAElEQVR4nO3deZBU5b3GcUIlVTG3bi

随机推荐

  1. MFC 关于如何实现浏览文件

    在做界面的时候,如果涉及到文件,就要输入文件的地址 第一种方法是直接输入,嗯...╮( ̄▽ ̄)╭ 第二种方法就是常见的浏览,然后选择文件<( ̄︶ ̄)/ 其代码如下: CString filena ...

  2. 结对开发训练(郭林林&胡潇丹)

    此次编程题为:求一个整数数组最大子数组之和,要求时间复杂度为O(n). 首先,我们对题目做出分析,做出第一种预行方案,即定义一个数组,当数组中元素大于等于0时,进行累加:若小于0,则与后面的数作比较, ...

  3. json排序 摘自百度

    var sortBy = function (filed, rev, primer) {    rev = (rev) ? -1 : 1;    return function (a, b) {    ...

  4. 'MAMapKit/MAMapKit.h' file not found

    1.应该是derived data没清导致的.在Window -> Organizer -> Projects,找到你这个项目,然后点下右边derived data后边的delete按钮. ...

  5. 【转】Wince中文乱码解决方法

    http://www.cnblogs.com/we-hjb/archive/2008/11/27/1342651.html 如果WinCE的默认语言是英语,也没有支持MUI的话,很多中文的应用程序就不 ...

  6. LNMP编译安装基于centos7.2

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止fir ...

  7. Java构建工具Ant小记(一)

    Ant简介 Ant是基于java的构建工具.理论上来说它类似与make工具,但是却克服了make的一些固有的缺陷. 传统的Make是基于操作系统shell的构建工具,虽然也可以基于工作的os对make ...

  8. Silverlight中异步调用WCF服务,传入回调函数

    以前学的ASP.NET,调用的都是同步方法,同步方法的好处就是,一步一步走,完成这步才会走下一步.然而,WCF使用的都是异步方法,调用之后不管有没有获得结果就直接往下走,最可恶的是异步函数都是Void ...

  9. hadoop 学习笔记:mapreduce框架详解

    开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...

  10. 用于主题检测的临时日志(431b1c14-8b75-4f42-994f-cfda72208c10 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

    这是一个未删除的临时日志.请手动删除它.(3bf68152-fcac-4628-92d6-3f8f4d5e0ee4 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)