`
JavaSam
  • 浏览: 951667 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

详解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时,根据上面的计算公式,即使内容区域为0border的宽和高也不会为0,所以就在页面上呈现出来,具体的显示结果可以根据叠加拆分的原理来推断。

 

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

                                  

 

 

 

 

 


 

 

  • 大小: 3.7 KB
  • 大小: 3.7 KB
  • 大小: 2.1 KB
  • 大小: 1.3 KB
分享到:
评论

相关推荐

    详解CSS3 用border写 空心三角箭头 (两种写法)

    本篇文章将详细介绍如何利用border属性来实现这一效果,包括两种不同的方法。 ### 第一种写法:利用伪元素 `::before` 或 `::after` 在第一种方法中,我们使用了`::after`伪元素来创建空心三角箭头。首先,我们...

    CSS border三角、圆角图形生成技术详解

    通过灵活使用`border-width`、`border-style`和`border-color`属性,我们可以实现纯CSS的三角形和圆角图形,无需依赖额外的图片或JavaScript。这些技术不仅提高了网页加载速度,还使得网页的维护变得更加简单。随着...

    纯CSS绘制三角形(各种角度)

    3. **CSS3**:CSS3 引入了许多新的特性和功能,比如圆角、阴影、动画等,这些特性使得我们可以使用CSS创建更复杂和丰富的图形。 #### 三、绘制基本三角形 为了绘制一个基本的三角形,我们可以通过设置三个边框为...

    详解CSS中左上朝向三角形(Top-Left Triangle)的几种制作方式

    此外,除了这些基本方法,还可以通过其他CSS属性,如伪元素(`::before` 和 `::after`)、渐变等来创建更复杂的形状。如果你对CSS图形设计感兴趣,可以访问推荐的网站——[CSS Tricks]...

    CSS3教程:边框属性border的极致应用

    **CSS3边框属性border详解与极致应用** 在网页设计中,CSS3的边框属性`border`是一个不可或缺的部分,它允许我们对元素的边框进行细致的控制,包括颜色、宽度、样式以及透明度等。这篇教程将深入探讨`border`属性的...

    详解css如何利用 :before :after 写小三角形

    小三角形的创建关键在于理解边框的折叠原理和CSS盒模型的`border`属性。通过调整伪元素的`border-width`、`border-color`和`top`(或`left`、`right`、`bottom`)属性,可以创建不同方向和样式的三角形。这种方法...

    浪漫的CSS3文字组合成心形动画特效

    这个CSS3特效展示了其在网页设计中的强大潜力,不仅可以制作出各种复杂的图形,还能通过动画赋予页面生命力。同时,这也是一种高效且轻量级的实现方式,无需依赖JavaScript或其他外部库,对性能影响较小。 总之,...

    css写的三角形欣赏

    3. **边框**:使用`border`属性来定义三角形的大小和颜色。 ##### 通用样式 ```css .top, .left, .right, .down { width: 0; height: 0; line-height: 0; /* 解决IE下梯形问题 */ border: 15px solid ...

    3.5CSS 内容总结(五)高级技巧.md

    ### CSS 高级技巧知识点详解 #### 1. 精灵图(Sprites) ##### 定义与原理 精灵图是一种提高网站性能的技术,通过将多个小图像合并成一个单一的大图像来减少HTTP请求的数量。这有助于提升网页加载速度及整体性能...

    CSS中clip-path属性的使用详解

    【CSS中的clip-path属性详解】 `clip-path`属性在CSS中是一个非常强大的工具,用于剪裁元素的内容区域,展示特定形状的部分。它允许开发者通过指定的几何形状来裁剪元素,创造出富有创意的布局和设计效果。在本篇...

    CSS3 SVG消息提示框样式特效

    **CSS3 SVG消息提示框样式特效详解** 在网页设计中,消息提示框是不可或缺的元素,用于向用户显示各种信息,如警告、错误、成功提示等。随着技术的发展,CSS3和SVG(可缩放矢量图形)的结合使得创建美观、动态且...

    DIV+CSS

    通过`float`(浮动)、`display`(显示模式)和`position`(定位)属性,可以实现各种复杂的页面布局效果。 3. **类与ID**:为了区分不同的`div`元素,我们通常会为其添加`class`或`id`属性。`class`用于归类相似的...

    css实现气泡框效果(实例加图解)

    【CSS实现气泡框效果详解】 在网页设计中,气泡框或提示框是一种常见的元素,用于显示消息、提示或指示。通常,这些效果可以通过多种方式实现,包括使用JavaScript框架。然而,为了深入理解并掌握这种效果,我们...

    CSS中三角形的绘制与巧妙应用实例详解

    网页中常见的一些三角形,无需制作成图片或者字体图标,使用CSS就可以直接画出来。如小米官网中: 以及京东网页中的: 那么这些三角通过是CSS怎么实现的呢? 三角的实现 我们可以通过将一个div容器的宽和高都设置...

    纯CSS实现的小三角

    本文介绍了如何使用纯CSS来创建一个简单的小三角形,并详细解释了实现原理及步骤。这种技术不仅适用于简单的三角形,还可以通过扩展来创建更加复杂多样的图形。对于Web前端开发者来说,熟练掌握这种方法不仅可以提高...

    css高频笔试题目精讲

    #### 一、CSS长度单位详解 1. **rpx(Responsive Pixel)** - **定义**:相对于屏幕宽度的单位,常用于微信小程序等移动开发中。 - **计算公式**:1rpx = 750 / 设计稿宽度 px。 - **应用场景**:适配不同分辨率...

Global site tag (gtag.js) - Google Analytics