CSS 如何进行单一div的正多边形变换

本文是纯粹利用css,让“单一个”div,从正三角形变换为正八边形(单一div最多只能做到正八边形),最后再搭配动画的效果,变成正多边形的变换动画,也由于正多边形需要用到不少的三角函数计算,为了方便起见,这里将正多边形的边统一都设为100px。

正三角形

正三角形不需要用到伪元素,只需要设定p本身的边框宽度即可产生,先来看一下正三角形的边长与中线,若边长为100px,则中线四舍五入就是87px(100 x sin(60)= 87)。

1.jpg

因此我们要将p的长宽都设为0,接着把底部border的宽度设为87px,左右的border宽度设为50px(颜色设为透明transparent),就可以做出一个漂亮的三角形。

width:0;height:0;border-width:0 50px 87px ;border-style:solid;border-color:transparent transparent #095;

2.jpg

正方形

正方形应该是最简单的,只要设定长宽设定为同样数值就可以了,不过其实还有另外两种方法,第一种你可以把长宽设为0,把上下左右的border设为50px也可以,第二种则是高度设为0,宽度设为100px,然后某个边宽也设为100,都是可以的。

.a{width:100px;height:100px;background:#c00;}.b{width:0;height:0;border-width:50px;border-style:solid;border-color:#095;}.c{width:100px;height:0;border-width:0 0 100px;border-style:solid;border-color:#069;}

3.jpg

正五边形

正五边形就需要进入基本的三角函数领域了,让我们先把正五边形分解,用原本的p作为上方的三角形,然后用一个伪元素制作下方的梯形,因为正五边形每边的夹角为108度,所以可以藉由三角函数计算出上方三角形的高度为59px(100 x cos(54)),宽度为192px(100x sin(54)x 2),下方梯形的高度为95px(100 x sin(72)),长边的宽度跟上面的三角形一样都是192px。

立即学习“前端免费学习笔记(深入)”;

4.jpg

了解原理之后,就可以利用伪元素来搭配制作啰!

.a{      position:relative;  width:0;  height:0;  border-width:0 81px 59px;      border-style:solid;  border-color:transparent transparent #069;}.a:before{  position:absolute;  content:"";  top:59px;  left:-81px;  width:100px;  height:0;  background:none;  border-width:95px 31px 0;  border-style:solid;      border-color:#069 transparent transparent;    }

5.jpg

正六边形

正六边形的每个夹角是120度,如果以纯CSS的方向来看的话,就是把正五边形上面的三角形改变一下,就可以做出正六边形,也就是变成上下两个梯形的组合而已,梯形的长边为200px(100 x cos(60)x 2 + 100),梯形的高度为87px(100 x sin(60))。

6.jpg

所以只要把正五边形的CSS稍作修改就可以做出正六边形了。

.a{      position:relative;    width:100px;    height:0;    border-width:0 50px 87px;      border-style:solid;    border-color:transparent transparent #f80;}.a:before{  position:absolute;  content:"";    top:87px;    left:-50px;    width:100px;    height:0;  background:none;    border-width:87px 50px 0;  border-style:solid;        border-color:#f80 transparent transparent;    }

7.jpg

正七边形

正七边形开始就必须再使用after这个伪元素了,因为正七边形必须要拆解为三个内存块,分别是用原本的p作为上面的三角形,一个伪元素作为中间的梯形,然后另一个伪元素作为底部的梯形,正七边形的夹角比较特别不是整数,而是128又4/7度,大概取到小数第二位是128.57,所以计算起来结果就如下图所示,重点就是必须要清楚地知道长宽是多少。

8.jpg

有了长宽之后,就开始用CSS来写啰!

.a{      position:relative;    width:0;    height:0;    border-width:0 90px 43px;      border-style:solid;    border-color:transparent transparent #09c;}.a:before{  position:absolute;  content:"";    top:140px;    left:-112px;    width:100px;    height:0;    border-width:78px 62px 0;  border-style:solid;        border-color:#09c transparent transparent;    }  .a:after{    position:absolute;    content:"";    top:43px;    left:-112px;    width:180px;    height:0;    border-width:0 22px 97px;    background:none;    border-style:solid;    border-color:transparent transparent #09c;  }

9.jpg

正八边形

正八边形其实就是把正七边形上面的三角形变成梯形,然后中间的梯形变成矩形就搞定了,正八边形的夹角为135度,计算出来的各个区域长宽如下图。

10.jpg

同样的了解原理,CSS做起来就简单多啰!

.a{      position:relative;    width:100px;      height:0;      border-width:0 71px 71px;      border-style:solid;    border-color:transparent transparent  #f69;}.a:before{  position:absolute;  content:"";    top:171px;      left:-71px;      width:100px;      height:0;      border-width:71px 71px 0;  border-style:solid;          border-color: #f69 transparent transparent;    }  .a:after{      position:absolute;      content:"";      top:71px;      left:-71px;      width:242px;      height:0;      border-width:0 0 100px;      background:none;      border-style:solid;      border-color:transparent transparent #f69;  }

11.jpg

小结

以上就是纯粹利用CSS做出来的单一div的正多边形变换,如果熟练的话,其实加上动画效果,就可以做出像下面示例这个样子的变换动画啰!

12.gif

相关教程:css视频教程

以上就是CSS 如何进行单一div的正多边形变换的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1614345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 04:13:48
下一篇 2025年12月24日 04:13:59

相关推荐

  • css里上下居中怎么弄?

    css上下居中的实现方法:1、将单行的行内元素设置行高等于盒子高;2、将多行的行内元素使用给父元素设置“display:table-cell;和vertical-align: middle;”即可。 css里上下居中也就是垂直居中,css中按元素可以分为三种垂直居中方式,分别是单行的行内元素,多行的…

    2025年12月24日 好文分享
    000
  • CSS实现3D切换功能的代码示例

    本篇文章给大家带来的内容是关于css实现3d切换功能的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Demo #app{ width: 100px; height: 35px; background-color: #006600; text-align: center; …

    好文分享 2025年12月24日
    000
  • CSS3实现的11种基本图形代码

    本篇文章给大家带来的内容是关于css3实现的11种基本图形代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 CSS3圆角 #css3-circle{ width: 150px; height: 150px; border-radius: 50%; } CSS3 椭圆形css3 r…

    好文分享 2025年12月24日
    000
  • CSS如何去除inline-block元素间的间距?(多种方法)

    本篇文章给大家带来的内容是关于css如何去除inline-block元素间的间距?(多种方法),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、现象描述 真正意义上的inline-block水平呈现的元素间,换行显示或者空格隔开的情况下会有间距,这是因为浏览器在解析时,会将换行等…

    好文分享 2025年12月24日
    000
  • CSS控制ul和li的样式的分析(代码)

    本篇文章给大家带来的内容是关于css控制ul和li的样式的分析(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 代码如下: 首页 博客 设计 相册 论坛 关于 CSS:  代码如下: #menu ul {list-style:none;margin:0px;} #menu u…

    好文分享 2025年12月24日
    000
  • 如何在css上让图片居中、图片适应

    移动端基本上都是需要做图片适应处理的,比如轮播图,商品封面图等等;用户发布的图片都不是尺寸规格的图。那么在做移动开发的小伙伴是否遇到图片适应的困难呢?告诉大家,其实css有一个object-fit属性,可以很方便我们来调整图片,本文是小编整理的在css上调整图片的方法。 那么有什么办法处理呢?刚好c…

    2025年12月24日 好文分享
    000
  • css direction属性怎么用?

    css direction属性用于指定文本方向或书写方向是从左到右,还是从右到左。语法为direction:ltr|rtl;设置属性值为ltr,则从左到右;为rtl,则从右到左。 CSS  direction 属性 作用:direction 属性规定文本的方向 / 书写方向。 说明:该directi…

    2025年12月24日
    000
  • 清除浮动和闭合浮动的介绍

    本篇文章给大家带来的内容是关于清除浮动和闭合浮动的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 为什么要清除浮动 子元素 float:left; 脱离文档流,会造成父元素塌陷(撑不起来) 父元素 靠子元素撑起来 清除浮动  clear:both 清除浮动 // 伪元素 :af…

    好文分享 2025年12月24日
    000
  • css3新特性有哪些

    CSS3的新特征有:1、圆角效果;2、图形化边界;3、块阴影与文字阴影;4、使用RGBA实现透明效果;5、渐变效果;6、使用“@Font-Face”实现定制字体;7、多背景图;8、文字或图像的变形处理;9、多栏布局;10、媒体查询等。 本文操作环境:Windows7系统,css3版,Dell G3电…

    2025年12月24日
    000
  • css的基本语法是什么

    css的基本语法是:1、css规则由选择器和一条或多条声明两个部分构成;2、选择器通常是需要改变样式的HTML元素;3、每条声明由一个属性和一个值组成;4、属性和属性值被冒号分隔开。 CSS 语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明。【推荐阅读:CSS教程】 selecto…

    2025年12月24日
    000
  • flex作用于box容器上的属性介绍

    本篇文章给大家带来的内容是关于flex作用于box容器上的属性介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1. flex-direction 用于指定flex主轴的方向,继而决定flex子项在flex容器中的位置 row,默认值,表示水平方向从左到右排列,此时水平方向为主轴…

    好文分享 2025年12月24日
    000
  • 有趣的CSS魔法和布局(代码)

    本篇文章给大家带来的内容是关于有趣的CSS魔法和布局(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 前言:布局和样式,是每个前端的必修课。在日常的工作中,也会碰到一些特定场景的布局需求,配合上样式,就能实现一些神奇的效果。我搜罗了一些日常开发中遇到的布局,以及浏览各大网站时…

    2025年12月24日
    000
  • 选择器(picker)插件的实现方法介绍(代码)

    本篇文章给大家带来的内容是关于选择器(picker)插件的实现方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一个正常的选择器插件是非常细致的,一步一步来描述就是。手指滑动内容跟随手指滚动,当内容到底或触顶的时候就不能在滚动并且内容要一直保持在正确的位置上。 第一步…

    2025年12月24日
    000
  • CSS实现基于用户滚动应用(代码)

    本篇文章给大家带来的内容是关于css实现基于用户滚动应用(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 通过将当前滚动偏移映射到html元素上的属性,我们可以根据当前滚动位置设置页面上的元素样式。我们可以使用它来构建一个浮动导航组件。 这是我们将使用的HTML, 当我们向下…

    好文分享 2025年12月24日
    000
  • react中使用css的七种方法介绍(附代码)

    本篇文章给大家带来的内容是关于react中使用css的七种方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 第一种: 在组件中直接使用style 不需要组件从外部引入css文件,直接在组件中书写。 import React, { Component } from “…

    2025年12月24日
    000
  • CSS的工作过程介绍(图文)

    本篇文章给大家带来的内容是关于css的工作过程介绍(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 在平时的工作中,可能都是再用一些框架或者是简单的CSS来修饰我们的HTML页面,那么仔细想想一个资深的前端从业者,是否需要知道他的工作原理和过程呢,技术这种东西,当然是我们了解…

    2025年12月24日
    000
  • CSS中margin重叠及防止的方法介绍(代码示例)

    本篇文章给大家带来的内容是关于CSS中margin重叠及防止的方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 边距重叠解决方案(BFC) 首先要明确BFC是什么意思,其全英文拼写为 Block Formatting Context 直译为“块级格式化上下文” 两…

    2025年12月24日 好文分享
    000
  • CSS3中box-sizing属性的解析(附代码)

    本篇文章给大家带来的内容是关于css3中box-sizing属性的解析(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 盒模型的组成大家肯定都懂,由里向外content,padding,border,margin. 盒模型是有两种标准的,一个是标准模型,一个是IE模型。 立…

    2025年12月24日 好文分享
    000
  • css background-color属性怎么用?

    css  background-color属性 作用:设置元素的背景颜色。 background-color:颜色值; 说明:background-color 属性为元素设置一种纯色背景。这种颜色会填充元素的内容、内边距和边框区域,扩展到元素边框的外边界(但不包括外边距)。如果边框有透明部分(如虚线…

    2025年12月24日
    000
  • background-position属性怎么用

    background-position属性是用于设置背景图像的起始位置的,该属性的使用语法是“background-position: x y;”,其中参数x表示水平位置,y表示垂直位置。 本文操作环境:Windows7系统、Dell G3电脑、HTML5&&CSS3版。 backg…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信