CSS画三角形及其原理

CSS画三角形及其原理本文转自https://blog.csdn.net/pengjunlee/article/details/53002553搜索网络之后发现三角形可以通过以下CSS代码实现:#triangle_bottom{height:0px;width:0px;border-left:20pxsolidtransparent;border-right:20pxsolidtransparent…

大家好,又见面了,我是你们的朋友全栈君。

搜索网络之后发现三角形可以通过以下CSS代码实现:

#triangle_bottom{
height:0px;
width:0px;
border-left:20px solid transparent;
border-right:20px solid transparent ;
border-bottom:20px solid #9E9E9E ;
}

那么,其内部到底是如何实现的呢?接下来是我学习CSS画三角形原理的一点小总结。

其实使用CSS代码绘制三角形,只是对盒子模型中的”border”属性的简单应用。盒子模型将HTML元素划分为内容(Content)、填充(Padding)、边框(Border)和边界(Margin)四部分,参照下图。
在这里插入图片描述

1、为了能更好的看清Border的四条边界的真实形状,我们为Border的四条边设置上不同的颜色。

border-left:red;
border-top:blue;
border-right:green;
border-bottom:yellow;

在这里插入图片描述
不难看出,当Border的四条边宽度相同时,每条边均为等腰梯形。

2、为四条边设置各不相同的宽度,其各边的形状改变为如下图所示。

border-left:20px red;
border-top:10px blue;
border-right:30px green;
border-bottom:40px yellow;

在这里插入图片描述

3、删除底部一条边后,其相邻边界的形状改变如下。

border-bottom:0px;

在这里插入图片描述

4、由此我们不难得出CSS画三角形所需的第一条结论:每条边(以黄色边为例)与其邻边所成夹角A,tanA=n/m(n,m分别为自己和邻边的宽度),当邻边宽度为0px时,A角大小为90°。
在这里插入图片描述

5、接下来我们将盒子模型中的内容(Content)和填充(Padding)都设置为0px,四条边的宽度相同时如下图所示。
在这里插入图片描述

6、四条边宽度不同时,各边形状如下图。
在这里插入图片描述

7、当border-top宽度为0px时,其它三边形状如下图。
在这里插入图片描述

8、再将上图中的左侧红色和右侧绿色三角形的颜色设置为透明(transparent),其最终形状如下图。
在这里插入图片描述
由此我们可以得出CSS画三角形所需的第二条结论:当盒子模型中的内容(Content)+填充(Padding)的大小为0px时,Border边的形状将由梯形变为三角形。

9、有了以上两条结论,我们就可以通过控制Border各条边的宽度和设置透明色来轻松画出各种角度的三角形了。以画向上的底角45°的等腰三角形为例,由于tan(45°)=1,我们需将border-bottom、border-left、border-right三者设置为相等的宽度,并将border-left和border-right设置为透明色,代码如下:

#triangle_bottom{
height:0px;
width:0px;
border-left:20px solid transparent;
border-right:20px solid transparent ;
border-bottom:20px solid #FF9800;
}

其画出的三角形效果如下:
在这里插入图片描述

10、其它三个朝向的三角形画法依此类推,四个朝向的三角形的完整代码如下:

<!DOCTYPE HTML>
<HTML>
<head>
<style type="text/css">
.triangle_left{
    width: 0;
    height: 0;
    border-left: 50px solid red;
    border-top: 50px solid transparent;
    border-bottom: 50px solid transparent;
 
}
.triangle_top{
    width: 0;
    height: 0;
    border-top: 50px solid blue;
    border-right: 50px solid transparent;
    border-left: 50px solid transparent;
}
.triangle_right{
    width: 0;
    height: 0;
    border-right: 50px solid green;
    border-top: 50px solid transparent;
    border-bottom: 50px solid transparent;
}
.triangle_bottom{
    width: 0;
    height: 0;
    border-bottom: 50px solid yellow;
    border-right: 50px solid transparent;
    border-left: 50px solid transparent;
}
</style>
</head>
<body>
<div class="triangle_left"></div>
<div class="triangle_top"></div>
<div class="triangle_right"></div>
<div class="triangle_bottom"></div>
</body>
</HTML>

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149668.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月23日 下午11:16
下一篇 2022年6月23日 下午11:16


相关推荐

  • 【kafka运维】Kafka全网最全最详细运维命令合集(精品强烈建议保存)

    【kafka运维】Kafka全网最全最详细运维命令合集(精品强烈建议保存)本文所有命令,博主均全部操作验证过,保证准确性;非复制粘贴拼凑文章;如果想了解更多工具命令,可在评论区留下评论,博主会择期加上;kafka-topics.sh、kafka-configs.sh、kafka-reassign-partitionskafka-console-producer.sh、kafka-console-consumer.sh、kafka-leader-election、kafka-verifiable-producer.sh、kafka-verifiable-consumer、

    2022年7月18日
    29
  • DotNetTextBox V3.0 所见即所得编辑器控件Ver3.2.3 Stable(稳定版)

    DotNetTextBox V3.0 所见即所得编辑器控件Ver3.2.3 Stable(稳定版)英文名 DotNetTextBo 0WYSWYGWebCo Net2 0 中文名 DotNetTextBo 0 所见即所得编辑器控件 ForAsp Net2 0 类型 个人及非盈利性网站免费使用作者 小宝 NET2 0 TerryDeng 主页 http www aspxcn com cn 控件演示页面 http w

    2026年3月26日
    1
  • 设置窗体透明 隐藏任务栏 与全屏显示

    设置窗体透明 隐藏任务栏 与全屏显示

    2021年8月6日
    61
  • vm虚拟机安装win11_虚拟机15.5安装教程win7

    vm虚拟机安装win11_虚拟机15.5安装教程win7首先下载好虚拟机以及系统,并且把iso镜像解压好!打开虚拟机! 首先,选择创建虚拟机,然后选择典型.点击下一步! 选择你刚才下载的iso镜像文件.点击下一步! 选择XP版本,点击下一步,下一步是系统的存放位置,和系统名字,看自己怎么样方便吧!在点击下一步,是磁盘空间,这个随便选都可以,如果安装的系统系统用多少内存,就会消耗本机硬盘多少内存,没关系…

    2022年8月16日
    7
  • TASKLIST命令操作[通俗易懂]

    TASKLIST命令操作[通俗易懂]        Tasklist与Taskkill是xp下很强大的命令工具。之所以强大,并不完全因为我们所熟悉的Taskkill/f/im或是Taskkill/f/pid的用法,而是因为它们的筛选器。我们先来看一下Tasklist与Taskkill的基本语法及使用:  显示运行在本地或远程计算机上的所有任务的应用程序和服务列表,带有过程ID

    2022年5月8日
    271
  • SpringBoot异步调用

    SpringBoot异步调用除了异步请求,一般上我们用的比较多的应该是异步调用。通常在开发过程中,会遇到一个方法是和实际业务无关的,没有紧密性的。比如记录日志信息等业务。这个时候正常就是启一个新线程去做一些业务处理,让主线程异步的执行其他业务。何为异步调用说异步调用前,我们说说它对应的同步调用。通常开发过程中,一般上我们都是同步调用,即:程序按定义的顺序依次执行的过程,每一行代码执行过程必须等待上一行代码执行完毕后才…

    2022年7月11日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号