使用css3绘制出各种几何图形


Posted in HTML / CSS onAugust 17, 2016

1、圆形

使用css3绘制出各种几何图形

示例:

 
思路:给任何正方形元素设置一个足够大的 border-radius ,就可以把它变成一个圆形.代码如下:

html:

复制代码
代码如下:

<div class="size example1"></div>

css:

复制代码
代码如下:

.size{
width:200px;
height: 200px;
background: #8BC34A;
}
.example1{
border-radius:100px;
}

 2、自适应椭圆

使用css3绘制出各种几何图形
思路:border-radius 这个属性还有另外一个鲜为人知的真相,它不仅可以接受长度值,还可以接受百分比值。这个百分比值会基于元素的尺寸进行解析.这意味着相同的百分比可能会计算出不同的水平和垂直半径。

代码如下:

html:

复制代码
代码如下:

<div class="example3"></div>

css:

复制代码
代码如下:

.example3{
width:200px;
height: 150px;
border-radius:50%;
background: #8BC34A;
}
[/code}</p> <p><strong><font color="#ff0000">3、自适应的半椭圆:沿横轴劈开的半椭圆</font></strong></p> <p><img border="0" alt="" src="//img.jbzj.com/file_images/article/201608/2016081516050814.jpg" />
思路:border-radius 的语法比我们想像中灵活得多。你可能会惊讶地发现 border-radius 原来是一个简写属性。</p> <p>第一种方法就是使用它所对应的各个展开式属性:
[code]
„ border-top-left-radius
„ border-top-right-radius
„ border-bottom-right-radius
„ border-bottom-left-radius

我们甚至可以为所有四个角提供完全不同的水平和垂直半径,方法是在斜杠前指定 1~4 个值,在斜杠后指定另外 1~4 个值。举例来说,当 border-radius 的值为10px / 5px 20px 时,其效果相当于 10px 10px 10px 10px / 5px 20px 5px 20px 。

为 border-radius 属性分别指定4、3、2、1 个由空格分隔的值时,这些值是以这样的规律分配到四个角上的(请注意,对椭圆半径来说,斜杠前和斜杠后最多可以各有四个参数,这两组值是以同样的方法分配到各个角的)

使用css3绘制出各种几何图形
代码如下:自适应的半椭圆:沿横轴劈开的半椭圆

html:

复制代码
代码如下:

<div class="example4"></div>

css:

复制代码
代码如下:

.example4{
width:200px;
height: 150px;
border-radius: 50% / 100% 100% 0 0;
background: #8BC34A;
}

4、自适应的半椭圆:沿纵轴劈开的半椭圆

使用css3绘制出各种几何图形
思路:自适应的半椭圆:沿纵轴劈开的半椭圆

代码如下:
html:

复制代码
代码如下:

<div class="example5"></div>

css:

复制代码
代码如下:

.example5{
width:200px;
height: 150px;
border-radius: 100% 0 0 100% / 50%;
background: #8BC34A;
}

5、四分之一椭圆

使用css3绘制出各种几何图形
思路:其中一个角的水平和垂直半径值都需要是100%,而其他三个角都不能设为圆角。

代码如下:
html:

复制代码
代码如下:

<div class="example6"></div>

css:

复制代码
代码如下:

.example6{
width:160px;
height: 100px;
border-radius: 100% 0 0 0;
background: #8BC34A;
}

 6、用椭圆绘制opera浏览器的logo

使用css3绘制出各种几何图形
思路:绘制opera浏览器的logo,分析起来不难,就只有两个图层,一个是最底部的椭圆,一个是最上面那层的椭圆。先确定一下最底层的椭圆宽高,量了一下,水平宽度为258px,垂直高度为275px,因为其是一个对称的椭圆,没有倾斜度,故4个角均为水平半径为258px,垂直半径为275px的4个相等椭圆,用同样的办法确定最里面的椭圆的半径,因此,四个角均为水平半径120px,垂直半径为229px的椭圆,代码如下:

html:

复制代码
代码如下:

<div class="opera">
<div class="opera-top"></div>
</div>

css:

复制代码
代码如下:

.opera{
width:258px;
height: 275px;
background: #F22629;
border-radius:258px 258px 258px 258px /275px 275px 275px 275px;
position: relative;
}
.opera-top{
width: 112px;
height: 231px;
background: #FFFFFF;
border-radius: 112px 112px 112px 112px/231px 231px 231px 231px;
position: absolute;
left: 50%;
right: 50%;
top: 50%;
bottom: 50%;
margin-left: -56px;
margin-top: -115px;
}

 7、平行四边形

使用css3绘制出各种几何图形
思路:伪元素方案:是把所有样式(背景、边框等)应用到伪元素上,然后再对 伪元素进行变形。因为我们的内容并不是包含在伪元素里的,所以内容并不会受到变形的影响。代码如下:

html:

复制代码
代码如下:

<div class="button">transform:skew()</div>

css:

复制代码
代码如下:

.button {
width:200px;
height: 100px;
position: relative;
left: 100px;
line-height: 100px;
text-align: center;
font-weight: bolder;
}
.button::before {
content: ''; /* 用伪元素来生成一个矩形 */

position: absolute;

top: 0; right: 0; bottom: 0; left: 0;

z-index: -1;

transform: skew(45deg);

background: #8BC34A;
}


技巧总结:这个技巧不仅对 skew() 变形来说很有用,还适用于其他任何变形样式,当我们想变形一个元素而不想变形它的内容时就可以用到它。

8、菱形

使用css3绘制出各种几何图形
思路:我们把这个技巧针对 rotate() 变形样式稍稍调整一下,再用到一个正方形元素上,就可以很容易地得到一个菱形。代码如下:

html:

复制代码
代码如下:

<div class="example1">transform:rotate()</div>

css:

复制代码
代码如下:

.example1 {
width:140px;
height: 140px;
position: relative;
left: 100px;
line-height: 100px;
text-align: center;
font-weight: bolder;
}
.example1::before {
content: '';
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
z-index: -1;
transform: rotate(45deg);
background: #8BC34A;
}

技巧总结:这个技巧的关键在于,我们利用伪元素以及定位属性产生了一个方块, 然后对伪元素设置样式,并将其放置在其宿主元素的下层。这种思路同样可 以运用在其他场景中,从而得到各种各样的效果。

9、菱形图片

使用css3绘制出各种几何图形
思路:基于变形的方案,
我们想让图片的宽度与容器的对角线相等,而不是与边长相等。需要用到勾股定理,这个定理告诉我们,一个正方形的对角线长度等于它的边长乘以根号2,约等于1.414 213 562  。因此,把 max-width 的值设置为根号2乘以100%约等于 414.421 356 2% 是很合理的,或者把这个值向上取整为 142% ,因为我们不希望因为计算的舍入问题导致图片在实际显示时稍小(但稍大是没问题的,反正我们都是在裁切图片嘛)

代码如下:
html:

复制代码
代码如下:

<div class="picture">
<img src="./imgs/7.jpg">
</div>

css:

复制代码
代码如下:

.picture {
width: 200px;
transform: rotate(45deg);
overflow: hidden;
margin: 50px;
}
.picture img {
max-width: 100%;
transform: rotate(-45deg) scale(1.42);
z-index: -1;
position: relative;
}

技巧总结:我们希望图片的尺寸属性保留 100% 这个值,这样当浏览器不支持变 形样式时仍然可以得到一个合理的布局。 „ 通过 scale() 变形样式来缩放图片时,是以它的中心点进行缩放的 (除非我们额外指定了 transform-origin 样式) 。通过 width 属性 来放大图片时,只会以它的左上角为原点进行缩放,从而迫使我们 动用额外的负外边距来把图片的位置调整回来.

10、切角效果

使用css3绘制出各种几何图形
思路:基于background:linear-gradient()的方案:把四个角都做出切角效果了。你需要四层渐变图案,代码如 下所示:

html:

复制代码
代码如下:

<div class="example2">Hey, focus! You’re supposed to be looking at my corners, not reading my text. The text is just placeholder!</div>

css:

复制代码
代码如下:

.example2{
background: #8BC34A;
background: linear-gradient(135deg, transparent 15px, #8BC34A 0) top left,
linear-gradient(-135deg, transparent 15px, #8BC34A 0) top right,
linear-gradient(-45deg, transparent 15px, #8BC34A 0) bottom right,
linear-gradient(45deg, transparent 15px, #8BC34A 0) bottom left;
background-size: 50% 50%;
background-repeat: no-repeat;

padding: 1em 1.2em;
max-width: 12em;
line-height: 1.5em;
}

11、弧形切角

使用css3绘制出各种几何图形
思路:上述渐变技巧还有一个变种,可以用来创建弧形切角(很多人也把这种 效果称为“内凹圆角” ,因为它看起来就像是圆角的反向版本) 。唯一的区别 在于,我们会用径向渐变来替代上述线性渐变,代码如下:

html:

复制代码
代码如下:

<div class="example3">Hey, focus! You’re supposed to be looking at my corners, not reading my text. The text is just placeholder!</div>

css:

复制代码
代码如下:

.example3{
background: #8BC34A;
background: radial-gradient(circle at top left, transparent 15px, #8BC34A 0) top left,
radial-gradient(circle at top right, transparent 15px, #8BC34A 0) top right,
radial-gradient(circle at bottom right, transparent 15px, #8BC34A 0) bottom right,
radial-gradient(circle at bottom left, transparent 15px, #8BC34A 0) bottom left;
background-size: 50% 50%;
background-repeat: no-repeat;

padding: 1em 1.2em;
max-width: 12em;
}

 12、简单的饼图

使用css3绘制出各种几何图形
思路:基于 transform 的解决方案:我们现在可以通过一个 rotate() 变形属性来让这个伪元素转起来。 如果我们要显示出 20% 的比率,我们可以指定旋转的值为 72deg (0.2 × 360 = 72) ,写成 .2turn 会更加直观一些。你还可以看到其 他一些旋转值的情况。

代码如下:
html:

复制代码
代码如下:

<div class="pie"></div>

css:

复制代码
代码如下:

.pie{
width:140px;
height: 140px;
background: #8BC34A;
border-radius: 50%;
background-image: linear-gradient(to right,transparent 50%,#655 0);
}
.pie::before{
content: '';
display: block;
margin-left: 50%;
height: 100%;
border-radius: 0 100% 100% 0 / 50%;
background-color: inherit;
transform-origin: left;
transform: rotate(.1turn);/*10%*/
transform: rotate(.2turn);/*20%*/
transform: rotate(.3turn);/*30%*/
}

提示:在参数中规定角度。turn是圈,1turn = 360deg;另外还有弧度rad,2nrad = 1turn = 360deg。如,transform:rotate(2turn); //旋转两圈

使用css3绘制出各种几何图形
此方法显示 0 到 50% 的比率时运作良好,但如果我们尝试显示 60% 的比率时(比如指定旋转值为 .6turn 时),会出现问题。解决方法:使 用上述技巧的一个反向版本来实现这个范围内的比率:设置一个棕色的伪 元素,让它在 0 至 .5turn 的范围内旋转。因此,要得到一个 60% 比率的饼 图,

伪元素的代码可能是这样的:
html:

复制代码
代码如下:

<div class="pie2"></div>

css:

复制代码
代码如下:

.pie2{
width:140px;
height: 140px;
background: #8BC34A;
border-radius: 50%;
background-image: linear-gradient(to right,transparent 50%,#655 0);
}
.pie2::before{
content: '';
display: block;
margin-left: 50%;
height: 100%;
border-radius: 0 100% 100% 0 / 50%;
background: #655;/*当范围大于50%时,需要改变伪元素的背景颜色为#655;*/
transform-origin: left;
transform: rotate(.1turn);
}

用 CSS 动画来实现一个饼图从 0 变化到 100% 的动画,从而得到一个炫酷的进度指示器:

使用css3绘制出各种几何图形

代码如下:
html:

复制代码
代码如下:

<div class="pie3"></div>

css:

复制代码
代码如下:

.pie3 {
width:140px;
height: 140px;
border-radius: 50%;
background: yellowgreen;
background-image: linear-gradient(to right, transparent 50%, currentColor 0);
color: #655;
}</p> <p>.pie3::before {
content: '';
display: block;
margin-left: 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;
}</p> <p>@keyframes spin {
to { transform: rotate(.5turn); }
}
@keyframes bg {
50% { background: currentColor; }
}

总结
以上就是本文的全部内容,希望对大家学习Css3能有所帮助。

HTML / CSS 相关文章推荐
让IE6、IE7、IE8支持CSS3的脚本
Jul 20 HTML / CSS
CSS3制作ajax loader icon实现思路及代码
Aug 25 HTML / CSS
纯css3实现走马灯效果
Dec 26 HTML / CSS
HTML5的hidden属性兼容老浏览器的方法
Apr 23 HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
Jun 23 HTML / CSS
借助HTML5 Canvas API制作一个简单的猜字游戏
Mar 25 HTML / CSS
HTML5中原生的右键菜单创建方法
Jun 28 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
Feb 05 HTML / CSS
浅析图片上传及canvas压缩的流程
Jun 10 HTML / CSS
HTML5中在title标题标签里设置小图标的方法
Jun 23 HTML / CSS
详解CSS不定宽溢出文本适配滚动
May 24 HTML / CSS
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
Dec 06 HTML / CSS
利用CSS3实现自定义滚动条代码分享
Aug 18 #HTML / CSS
纯CSS3实现图片无间断轮播效果
Aug 25 #HTML / CSS
纯CSS3代码实现switch滑动开关按钮效果
Aug 30 #HTML / CSS
CSS3实现跳动的动画效果
Sep 12 #HTML / CSS
利用CSS3的flexbox实现水平垂直居中与三列等高布局
Sep 12 #HTML / CSS
对CSS3选择器的研究(详解)
Sep 16 #HTML / CSS
利用CSS3实现炫酷的飞机起飞动画
Sep 17 #HTML / CSS
You might like
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
详解JavaScript for循环中发送AJAX请求问题
2020/06/23 Javascript
深入理解js中this的用法
2016/05/28 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
微信小程序网络请求实现过程解析
2019/11/06 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
Python实现购物程序思路及代码
2017/07/24 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
python多进程重复加载的解决方式
2019/12/13 Python
Python colormap库的安装和使用详情
2020/10/06 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
中国最大的团购网站:聚划算
2016/09/21 全球购物
软件缺陷的分类都有哪些
2014/08/22 面试题
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
大学生毕业自我鉴定范文
2013/09/19 职场文书
秋季运动会稿件
2014/01/30 职场文书
迟到检讨书300字
2014/02/14 职场文书
2014年人事部工作总结
2014/12/03 职场文书
周一问候语大全
2015/11/10 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书