详解css3使用border属性实现各种三角形及其他复杂图形的原理

最近看到网上有很多用css3实现三角形及各种复杂图形的代码,看到代码的时候一头雾水,索性用半天的时间好好研究了一下背后的实现原理。话不多说,先上代码:

<html>
<head>
<style type="text/css">
p{
 float:left;
margin-right:20px;
}
#triangle-full {
    width:0px;
    height:0px;
    border-left: 50px solid pink;
    border-bottom: 50px solid gray;
    border-top: 50px solid green;
    border-right: 50px solid red;
}
#triangle-lack-left {
    width:0px;
    height:0px;
    border-bottom: 50px solid gray;
    border-top: 50px solid green;
    border-right: 50px solid red;
}
#triangle-lack-right{
    width:0px;
    height:0px;
    border-left: 50px solid pink;
    border-bottom: 50px solid gray;
    border-top: 50px solid green;
}
#triangle-lack-top{
    width:0px;
    height:0px;
    border-left: 50px solid pink;
    border-bottom: 50px solid gray;
    border-right: 50px solid red;
}
#triangle-lack-bottom{
    width:0px;
    height:0px;
    border-left: 50px solid pink;
    border-top: 50px solid green;
    border-right: 50px solid red;
}
#triangle-has-left{
    width:20px;
    height:20px;
border-top: 50px solid pink;
     border-left: 50px solid pink;
     border-bottom: 50px solid gray;
}
#triangle-has-right{
    width:20px;
    height:20px;
     border-right: 50px solid pink;
     border-bottom: 50px solid gray;
}
#triangle-has-top{
    width:20px;
    height:20px;
     border-left: 50px solid pink;
     border-top: 50px solid gray;
}
#triangle-has-bottom{
    width:20px;
    height:20px;
     border-right: 50px solid pink;
     border-top: 50px solid gray;
}
#triangle-has-topbottom{
    width:0px;
    height:10px;
     border-bottom: 50px solid pink;
     border-top: 50px solid gray;
}
#triangle-has-onlyleft{
    width:10px;
    height:10px;
     background:black;
     border-left: 50px solid pink;
}
</style>
</head>
 
<body>
<p id="triangle-full"></p>
<p id="triangle-lack-left"></p>
<p id="triangle-lack-right"></p>
<p id="triangle-lack-top"></p>
<p id="triangle-lack-bottom"></p>
<div style="clear:both"></div>
<p id="triangle-has-left"></p>
<p id="triangle-has-right"></p>
<p id="triangle-has-top"></p>
<p id="triangle-has-bottom"></p>
<p id="triangle-has-topbottom"></p>
<p id="triangle-has-onlyleft"></p>
</body>
</html>

 

上面的代码运行结束后,总的显示结果为:

图(1)

是不是看到这个结果感觉既酷炫,又一头雾水?好,下面就一点一点的详细解释一下吧

先上图:

 图二


如图二所示,从左到右分别为保留top、right、bottom、left四个border的显示;保留剩下的三个border,取消border-left、取消border-right、取消border-top、取消border-bottom其中一个方向border的显示


 

图三

如图三所示,从左往右依次为:

                                           border-left+border-bottom+content、

                                           border-right+border-bottom+content、

                                           border-left+border-top+content、

                                           border-right+border-top+content、

                                           border-left+content

从上面的显示结果可以总结出:其实在css里可以把border也看成具体的具有宽、高的元素,利用css3通过border进行三角形制作的基本原理是利用了border的叠加和均分的原理。即:同一方向上的叠加,不同方向上的均分。同一方向上,比如上下border的高度叠加得到左右boder的高,左右border的宽度叠加得到上下border的宽。不同方向上,在左下、左上、右上、右下重叠的部分进行均分,所以可以看到上图一种第一幅图在矩形对角线位置的两边有不同的颜色。

具体对应的不同方向的border的尺寸的计算为:

 

border-left-width = border-left-width; 

border-left-height = border-top-width+contentHeight+border-bottom-width;

 

border-right-width = border-right-width; 

border-right-height = border-top-width+contentHeight+border-bottom-width;

 

border-bottom-width = border-left-width+contentWidth+border-right-width;

 

border-bottom-height = border-bottom-height;

 

border-top-width = border-left-width+contentWidth+border-right-width;

 

border-top-height = border-top-height;

 

有了上面的计算公式,我们来看一下在不同情况下的结果:

 

1、只有两条平行的border,比如border-left和border-right

      此时会发现如果元素的内容区域的宽高为0的话【内容区域宽高不为0就可以显示啦】,border即使设置了width【假如为50px】属性也是不会显示的,为什么呢?

利用公式border-left-width = border-left-width = 50px;

             border-left-height = border-top-width+contentHeight+border-bottom-width = 0 + 0 + 0 = 0;

一个元素如果宽高任一值为0的话是不会显示的,border的显示也是如此哦。

 

2、元素只有一个方向border

 如果元素内容区域的宽高不为0,则border可以显示;反之则不能显示,道理利用上面的计算公式就可以明白了。

 

3、三个方向或三个方向以上border

当画出在两个方向有交叉的border时,根据上面的计算公式,即使内容区域为0,border的宽和高也不会为0,所以就在页面上呈现出来,具体的显示结果可以根据叠加拆分的原理来推断。

 

有没有明白呢?反正我是明白了

                                  

 

 

 

 

 


 

 

Qt (高仿Visio)流程图组件开发(一) 效果展示及基本开发框架构思 最近因为工作原因需要使用Qt开发一个类似于Visio的流程图组件,需满足基本的流程图功能,图元类型可自定义扩展,不同图元存有各类自定义数据,可以保存为xml文件,可以读取xml文件生成流程图等等。 阅读详情

相关推荐

SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析

在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高

weixin_28630185的博客 340

CSS3实现3D立体效果

CSS3实现3D效果 1. 涉及到的几个CSS3属性 首先大家需要了解transform属性,主要有平移(translate),缩放(scale),拉伸(skew),旋转(rotate)。 这里涉及到3d转换的主要介绍旋转。 下面通过一组rotate效果直观理解rotateX,rotateY,rotateZ区别。 代码: .box{ width: 200px;height: 200

wonderful_life_mrchi的博客 9万+

Zabbix 7.0 从入门到精通部署手册

zabbix 入门到精通

weixin_43806846的博客 1032

css3制作八棱锥_svg、canvas、css3d实现数据可视化(伪3D效果)

前言:这次如算上处定面一这我作问汇u应色会进灯样近项目用到了一些自定义的数据可视化组件,我把我做的部分抽出来几个典型功一新说讲为其年次供。发了架人据模制理个通似会业文告个了者到作会也转动和矿大一效做个汇总。分为如下:星球环绕旋转享。发概程间告屏会。一控近到都从述序也问图 -- 方法一: svg:animateMotion+ animateTransform 方法二:css3支器事的后功发久这含层请...

weixin_31368213的博客 1321

SAP-MM-采购过账接口(与WMS集成)-代码

1、判断传入值非空检验; 2、判断过账日期是否允许在当前期间; 3、判断是否为集采订单业务,是否审批完成; 4、判断是否发布标准成本发布(此业务场景与价格控制3+S有关) 5、保存日志表; 6、判断业务公司订单审批状态; 7、创建STO交货单、集采公司订单过账、STO公司间创建交货单、交货单过账(两步法)、过账失败回滚(冲销交货、删除交货单、冲销集采入库)

qq_32198063的博客 421

利用 IP 中的集成调试功能来调试 PCI Express 链接训练问题

JTAG Debugger”和“In-system IBERT”功能结合在一起即可提供即时信息,用于判断链接训练问题的可能原因。“test_rd.tcl”文件可读取 BRAM 中存储的调试数据,并输出 *.dat 文件,如下所示。同样,您可能看到某一箭头旁的数字较大,表明可能存在不稳定的链接。要采集 PCIe 链接眼图,请在 IP 配置 GUI 的“Add. Debug Options”选项卡中选择“启用 In-System IBERT (Enable In-System IBERT)”选项。

qq_43416206的博客 535

【翻译】基于web创建逼真的3D图形 | CSS技巧

在成为一名web开发者之前,我从事于视觉设计行业,创造屡获殊荣,电影和电视节目等高端3D效果,例如。为了能够创造这些效果我们需要使用高度复杂的动画软件,例如或者,包括使用数以百计的机器来做长时间的离线渲染。正因为我工作以来一直使用这些工具,以至于我对现在的web技术感到很惊讶。我们可以创造和显示高质量的3D内容在浏览器里面,实际上,就是使用webGL和Three.js。是使用这些技术创建的。在他们的网站里,你可以发现更多thress.js的项目。使用three.js的一些项目。

精选资讯文章 293

Qemu开发ARM篇-3、qemu运行uboot演示

在上一篇文章中,我们搭建了交叉编译工具链,并成功进行了uboot的交叉编译,在该篇中,我们将演示如何利用qemu运行上一篇中交叉编译的uboot程序。

sinat_33909696的博客 1212

h5 学习笔记:border-left 调整描边高度

最近要写很多的border-left 描边,这些描边要带上文字。在开始的时候,一般会直接使用border-left ,但发现这个描边会手div高度影响,比文字的高度还要高。今天,发现了使用before的一种写法可以调整描边的色的高度。 从图上可以看到左边色块高度和文本相差很多,导致不美观。 造成这样,我们看一下它的写法。从样式ui-top-view 可以看到,这个定义一个div 高度为 30px...

夏天的树人的专栏 8444

Web3:Ubuntu系统 使用Docker-compose方式部署blockscout浏览器&配置版本-v5.2.3-beta+charts图表

详细介绍了在Ubuntu 23.04系统上部署Blockscout浏览器的步骤,以及过程中遇到的问题进行一一解决。

鄙人kunzhi96,感恩遇见! 2万+

1.2 amdgpu_bo的设计分析 — gem层和ttm层

本文分析了AMD KFD的BO设计架构,重点介绍了DRM子系统中缓冲对象的多层继承关系。文章首先展示了核心继承层次图,包括DRM通用层(drm_gem_object)、TTM内存管理层(ttm_buffer_object)、AMD驱动层(amdgpu_bo)和KFD计算层(kgd_mem)。随后详细解析了drm_gem_object结构体的关键功能,包括用户空间接口管理、内存映射支持、引用计数机制以及DMA-BUF导入/导出功能。

图形/计算GPU的驱动与虚拟化技术分享园地 2548

border-left、border-right、border-top、border-bottom深入理解

一、有宽和高 1.一个矩形的4个边的组成部分 .box { border-right: 55px solid red; width: 200px; height: 200px; border-bottom: 55px solid blue; border-left: 55px solid yellow; border-top: 55px solid...

cotexarm7的专栏 1万+

YOLO11改进:轻量级改进 | 通用倒瓶颈(UIB)搜索块结合C3k2二次创新 | 轻量化之王MobileNetV4

通用倒瓶颈(UIB)搜索块替代YOLO11的C3k2

会AI的学姐 293

css:border样式制作几何图形(圆形&三角形)

前言 html中制作几何图形的方法有很多,canvas,SVG等等。 我们可以运用css的border样式来制作一些常见的几何图形,相对于canvas来说只使用css就能实现,相对于SVG来说便于理解,上手容易。 常见的几何图形总体可以分为两种,一种是有棱角的(多边形)和边为弧线的(圆),稍微复杂一点的类型像星星之类的也可以理解为是这两种类型的拼接而成的。 三角形-border css制作三角形其...

weixin_43856797的博客 1938

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

CSS深入了解border:利用border画三角形等图形

三角形实际上是border的产物 我们正常使用的border都是四边一个颜色,当我们把四边换上不同颜色 那么你就会发现,三角来了~! <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>css3三角形画法</title> <style> .content{ width

duguxueao的专栏 385

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

CSS中用border画三角形等图形

最近在做一个官网项目的时候,UI小姐姐设计了一些特殊图形,例如三角形,虽然element-ui是带有相应模板的,但是设计的和模版的不一样,因此研究了一下。三角形实际上是border的产物 我们正常使用的border都是四边一个颜色,当我们把四边换上不同颜色 那么你就会发现,三角来了。当然我们要的三角通常不是这样的,现在,我们只要让border-color和border-width搭配,就可以变换各种三角。至于正三角、不规则三角等,只要知道它的原理,都是可以画出来的。我们看到了三角,却拿不到三角?

浮游的博客 630

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

border属性 php,使用CSS的border属性构建变形边框的方法总结

border是最常用的用来制作各种各样p边框的CSS属性,这里我们整理了使用CSS的border属性构建变形边框的方法总结,最主要的还是基于三角形的一些图形变换:border基础回顾border 顾名思义就是边框的意思,在 CSS 中,你可以透过 border 的语法来对边框做许多样化的设计变化,例如设定边框的宽度、样式、颜色等等,也可以隐藏边框,原则上 CSS 对于 border 的设计不只局限...

weixin_33595317的博客 376

css生成各种图形详解

css面试题之生成各种常见图形 最近一直在看面试题,发现了一些有趣的东西,有很多东西以前不是很懂,都停留在使用的层次上,所以现在开始恶补基础。刚好了看到了一个面试题,感觉以前没有对这个知识点了解的深入,因此现在做个笔记,防止自己忘记。如果你是一名前端开发人员,那么你一定熟悉css吧!那你试一下用纯css实现一个三角形、五角星、平行四边形?用css生成的各种图形基本上都依赖于border、borde...

weixin_34106122的博客 570

十分钟搞懂CSS属性border相交画三角形的原理及规律

其实很早就了解到可以利用border属性来画三角形,但是当时没认真思考原理和总结规律,写下这篇博客记录下我的想法。 🤔两个结论 分界线原则:假如把有宽度的border靠外的一边叫做外边,靠内的一边叫做内边,则各个外边的交点与相对应各个内边交点的连线就是各border之间的分界线 内边的确定依赖于原div的各边 外边的确定依赖于原div的各边以及border的宽度 一刀切原则:某方向的border宽度如果为0,边框的样式会表现出一刀切的样子 🫣举例论证 <div></div>

newxc 991

前端小技巧:用CSS border画三角形实现3D圣诞树(含装饰球动画)

本文深入探讨了如何仅用CSS border属性绘制三角形,并以此为基础构建一棵具有3D立体感的动态圣诞树。文章详细解析了border绘制图形的核心原理,通过图层堆叠、颜色渐变和阴影技巧实现立体效果,并利用CSS Animation为装饰球添加了柔和的呼吸灯动画,最终打造出一个纯前端实现的、生动有趣的动态圣诞树项目。

oauth7security的博客 615

【前端帮帮忙】第3期 使用CSS的border属性绘制各种几何形状

前言 border边框属性可以说是我们在网页布局中最常用不过的一个属性之一。border它不只是边框,它还有很多非常有用的“黑魔法”哈,让我们一起来学习一下。 border绘制几何形状的原理 我们先来看一个简单的小例子: 在页面上写一个div <div class="border-test"><div> 复制代码给这个div加上以下样式 .border-test { w...

weixin_33889245的博客 304

css中border制作各种形状

css利用border制作各种形状的原理如图: 使用border绘制三角形是什么原理?事实上,宽度相等的border是以45度对接的,如下图: 没有了上border如图所示: 再设置border的宽度为0: 设置border的高度为0:如图 最后设置左右border的颜色为透明,如下图: 贴代码,做个小三角形 <style>...

aed77922的博客 507

CSS绘制三角形全解析:Border、Clip-path、渐变与伪元素四大方案实战

在网页开发与UI设计中,图形绘制是构建丰富视觉界面的基础能力。其核心原理在于利用CSS的盒模型、背景与裁剪等标准特性,通过组合与变形来生成特定形状。掌握多种图形生成技术,能显著提升界面的性能、灵活性与可维护性,避免对图片资源的依赖。这在构建下拉箭头、工具提示框、步骤指示器等高频UI组件时价值尤为突出。本文聚焦于实现三角形的四种主流方案:经典的Border边框法、灵活的Clip-path裁剪法、擅长色彩渐变的Linear-gradient法,以及与复杂动画深度集成的伪元素结合Transform法。文章将深入剖

weixin_30892763的博客 485

利用CSS画各种平面图形

欲利用CSS画各种平面图形,只需要利用到

u014158072的专栏 1025

CSS绘制三角形全解析:从border到clip-path的四种方案对比

在网页开发中,CSS盒模型是构建布局的基础,它定义了元素尺寸、内边距、边框和边距的计算方式。基于盒模型的边框交汇特性,开发者可以利用border属性绘制简单三角形,这是理解CSS视觉格式化的重要实践。随着CSS3的演进,linear-gradient背景渐变和clip-path路径裁剪等技术提供了更强大的图形绘制能力,能够创建边缘平滑、支持动画的复杂形状,极大提升了UI组件的视觉质量和交互体验。这些技术广泛应用于导航箭头、步骤指示器、数据图表标记等场景,其中clip-path凭借其矢量精度和动画支持,已成为

weixin_34417200的博客 413

利用css样式画各种图形

  利用css画图形,是个有利有弊的写法,好处是不用画图,且节省了一些流量,坏处是要写长串的css样式,而且有可能流量并没有减少,用与否视情况而定,个人选择。  其中用了css3.0的一些属性,所以这里声明:请用支持css3.0的浏览器看此文章!上面这几个相对比较简单,没什么可解释的,看下面源...

chepabei0455的博客 249
上一篇: js验证正则大全
下一篇: 微信2.0分享自定义标题、图片、摘要、链接
sfSam
博客等级 码龄16年 13粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值