通过CSS绘制五星红旗

任务要求:
1、创建一个div作为红旗旗面,用CSS控制其比例宽高比为3:2,背景为红色。
2、再创建五个小的div,用CSS控制其大小和位置。
3、用CSS同时控制每个小div的大小、边框和位置,同时配合旋转,使其与父元素组成五角星。
4、分别用CSS控制每个五角星的平移、旋转和缩放,直到五角星的大小、位置和方向均正确为止。
相关五角星大小和位置比例参见百度百科五星红旗国旗制法说明(墨线法):

重点:(1)CSS绘制指定大小的五角星;(2)如何由五角星几何中心点位置获取元素div的大小以及相关元素旋转角度。(3)五角星几何中心(其外接圆圆心)满足墨线法绘制的位置要求。
tan18°=(√5-1)/√(10+2√5)≈0.32491969623291
0.5*tan18°=0.1624598481
绘制思路:
在进行相关代码书写前,先构建一个完整的数学模型,并计算相关尺寸数值。先设定旗面1/4中每格为10x10大小(px),那么旗面尺寸为300x200(px)。
大五角星外接圆半径R=30px,小五角星外接圆半径r=10px。根据CSS绘制五角星原理相关数学模型,可以计算出构成五角星的基础三角形中相关边框宽度的尺寸:
大五角星数据:
大五角星中构成三角形的边框宽度值:20.73px、28.53px、28.53px;
转换源基点数据:28.53px、9.27px;
外接圆圆心O坐标(50px,50px)转换为五角星的相对父元素上、左边距距离:垂直方向为40.73px,水平方向为21.47px。
小五角星数据:
小五角星中构成三角形的边框宽度值:6.91px、9.51px、9.51px;
转换源基点数据:9.51px、3.09px;
四个小五角星外接圆圆心转换为五角星的相对父元素上、左边距距离:
由于采用绝对定位方式,即外接圆圆心O(转换源基点)的坐标与初始三角形左上角点之间的距离差。
(1)(100px,20px)→(90.49px,16.91px)
(2)(120px,40px)→(110.49px,36.91px)
(3)(120px,70px)→(110.49px,66.91px)
(4)(100px,90px)→(90.49px,86.91px)
从上到下,小五角星转换为相对父元素上、下边距距离的数据值以及偏转角度(根据墨线法的方格和三角函数计算,前面值为计算经过小五角星的圆心与大五角星圆心的直线角度,后者为转换的偏转角度)依次为:
(1)arctan3/5≈30.96°→-48.96°
(计算过程:30.96+18=48.96,18°为五角星外部角的一半值)
(2)arctan1/7≈8.13°→-26.13°
(3)arctan2/7≈15.94°→-2.06°
(4)arctan4/5≈38.66°→20.66°
完整代码:
HTML结构
<div class='flag'>
<div class='pentagramMain'></div>
<div class='pentagram one'></div>
<div class='pentagram two'></div>
<div class='pentagram three'></div>
<div class='pentagram four'></div>
</div>
CSS代码
        * {
            border-width: 0;
        }
        .flag {
            width:300px;
            height:200px;
            background:red;
            position:relative;
        }
        .pentagramMain{
            margin-top:40.73px;
            margin-left:21.47px;
            width: 0;
            height: 0;
            border-top-color: yellow;
            border-left-color: transparent;
            border-right-color: transparent;
            border-top-width: 20.73px;
            border-left-width: 28.53px;
            border-right-width: 28.53px;
            border-style: solid;
            position: absolute;
        }
        .pentagramMain::before {
            border-width:0;
            content: '';
            display: block;
            width: 0;
            height: 0;
            border-top-color: yellow;
            border-left-color: transparent;
            border-right-color: transparent;
            border-top-width: 20.73px;
            border-left-width: 28.53px;
            border-right-width: 28.53px;
            border-style: solid;
            position:absolute;
            top:-20.73px;
            left:-28.53px;
            transform:rotate(72deg);
            transform-origin:28.53px  9.27px;
        }
        .pentagramMain::after{
            border-width:0;
            content: '';
            display: block;
            width: 0;
            height: 0;
            border-top-color:yellow;
            border-left-color: transparent;
            border-right-color: transparent;
            border-top-width: 20.73px;
            border-left-width: 28.53px;
            border-right-width: 28.53px;
            border-style: solid;
            position:absolute;
            top:-20.73px;
            left:-28.53px;
            transform:rotate(-72deg);
            transform-origin:28.53px  9.27px;
        }
        /* 小五角星 */
        .pentagram{
            width:0;
            height:0;
            position:absolute;
            border-top:6.91px solid yellow;
            border-left:9.51px solid transparent;
            border-right:9.51px solid transparent;
        }
        .pentagram::before{
            position:absolute;
            width:0;
            height:0;
            content: '';
            display: block;
            border-top:6.91px solid yellow;
            border-left:9.51px solid transparent;
            border-right:9.51px solid transparent;
            top:-6.91px;
            left:-9.51px;
            transform:rotate(72deg);
            transform-origin:9.51px、3.09px; 
        }
        .pentagram::after{
            border-width:0;
            content: '';
            display: block;
            width: 0;
            height: 0;
            border-top-color:yellow;
            border-left-color: transparent;
            border-right-color: transparent;
            border-top:6.91px solid yellow;
            border-left:9.51px solid transparent;
            border-right:9.51px solid transparent;
            border-style: solid;
            position:absolute;
            top:-6.91px;
            left:-9.51px;
            transform:rotate(-72deg);
            transform-origin:9.51px、3.09px;
        }
        .one{
            top:16.91px;
            left:90.49px;
            transform:rotate(-48.96deg);
        }
        .two{
            top:36.91px;
            left:110.49px;
            transform:rotate(-26.13deg);
        }
        .three{
            top:66.91px;
            left:110.49px;
            transform:rotate(-2.06deg);
        }
        .four{
            top:86.91px;
            left:90.49px;
            transform:rotate(20.66deg);
        }
通过CSS绘制五星红旗的更多相关文章
- Html5 绘制五星红旗
		Html5+JavaScript 在Canvas上绘制五星红旗,具体思路如下图所示: 绘制思路在上图中已有说明,具体代码如下: <script type="text/javascrip ... 
- CSS 魔法系列:纯 CSS 绘制三角形(各种角度)
		我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ... 
- 摘记  史上最强大的40多个纯CSS绘制的图形(一)
		今天在国外的网站上看到了很多看似简单却又非常强大的纯CSS绘制的图形,里面有最简单的矩形.圆形和三角形,也有各种常见的多边形,甚至是阴阳太极和网站小图标,真的非常强大,分享给大家. Square(正方 ... 
- 史上最强大的40多个纯CSS绘制的图形
		Square(正方形) #square { width: 100px; height: 100px; background: red; } Rectangle(矩形) #rectangle { wid ... 
- 40多个纯CSS绘制的图形
		本文由码农网 – 陈少华原创,转载请看清文末的转载要求. 今天在国外的网站上看到了很多看似简单却又非常强大的纯CSS绘制的图形,里面有最简单的矩形.圆形和三角形,也有各种常见的多边形,甚至是阴阳太极和 ... 
- css绘制三角形原理
		1.新建一个元素,将它的宽高都设置为0:然后通过设置border属性来实现三角形效果,下面是css绘制三角形的原理: <!DOCTYPE html> <html> <he ... 
- 碉堡了! 纯 CSS 绘制《辛普森一家》人物头像
		这篇文章给大家分享一组纯 CSS 绘制的<辛普森一家>人物头像.<辛普森一家>(The Simpsons)是马特·格勒宁为美国福克斯广播公司创作的一部动画情景喜剧.该剧通过对霍 ... 
- CSS 魔法系列:纯 CSS 绘制各种图形《系列六》
		我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ... 
- CSS 魔法系列:纯 CSS 绘制各种图形《系列五》
		我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ... 
随机推荐
- nginx&http 第三章 惊群
			惊群:概念就不解释了. 直接说正题:惊群问题一般出现在那些web服务器上,Linux系统有个经典的accept惊群问题,这个问题现在已经在内核曾经得以解决,具体来讲就是当有新的连接进入到accept队 ... 
- MySQL索引结构之B+树索引(面)
			首先要明白索引(index)是在存储引擎(storage engine)层面实现的,而不是server层面.不是所有的存储引擎都支持所有的索引类型.即使多个存储引擎支持某一索引类型,它们的实现和行为也 ... 
- 如何测量Ceph OSD内存占用
			前言 这个工具我第一次看到是在填坑群里面看到,是由研发-北京-蓝星同学分享的,看到比较有趣,就写一篇相关的记录下用法 火焰图里面也可以定位内存方面的问题,那个是通过一段时间的统计,以一个汇总的方式来查 ... 
- Flink处理函数实战之二:ProcessFunction类
			欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ... 
- Python _PyQt5对话框
			Python 调用PyQt5 制作对话框,退出时候有二次确认(注:默认是直接退出) 1 # -*- ytf-8 -*- 2 """ 3 用PyQt建一个对话框,退出时提示 ... 
- python分类
			python是一种动态解释性的强类型语言. python下分几个类别,分别是cpython,jypython,ironpython,pypy等等,这些属于不同的解释器,但编写规范只有一个就是pytho ... 
- openstack常用命令-nova篇
			1.查看openstack版本 nova-manage version 2.查看节点 nova host-list 3.查看计算节点 nova hypervisor-list 4.查看计算节点上有哪些 ... 
- JUC锁种类总结
			在并发编程中有各种各样的锁,有的锁对象一个就身兼多种锁身份,所以初学者常常对这些锁造成混淆,所以这里来总结一下这些锁的特点和实现. 乐观锁.悲观锁 悲观锁 悲观锁是最常见的锁,我们常说的加锁指的也就是 ... 
- IMX8移植cpufreq子系统
			一.简介 CPUFreq子系统位于 drivers/cpufreq目录下,负责进行运行过程中CPU频率和电压的动态调整,即DvFS( Dynamic Voltage Frequency ... 
- Python学习系列之列表(十一)
			一.为什么需要列表 变量可以存储一个元素,而列表是一个"大容器"可以存储N多个元素,程序可以方便地对这些数据进行整体操作 列表相当于其它语言中的数组 二.列表的创建1.列表需要使用 ... 
