css绘制三角形原理

1、新建一个元素,将它的宽高都设置为0;然后通过设置border属性来实现三角形效果,下面是css绘制三角形的原理:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
      .caret{
  height:0;/*将宽高都设置为0*/
  width:0;
  border:100px solid #000;
  border-color:red green yellow blue;
}
p{color:red;}
    </style>
</head>
<body>
<div class="caret"></div>
<p>
 将宽高都设置为0<br/>
 border-color:red green yellow blue;将变宽四个方向颜色设置成不同的颜色以便观察
</p>
</body>
</html>

效果:(为了jsfiddle防止被屏蔽,上面已插入了源代码)

style="height: 300px; width: 100%;" src=" https://jsfiddle.net/4gsyyjkz/embedded/result,css,html,js/" width="320" height="240">

从上面的效果可以看到,四个三角形拼成了一个正方形,我们只要把其中一个想要的三角形保留下来,其他的设置为透明的,就可以达到想要的效果了;

如border-color:red transparent transparent transparent;就能看到一个红色三角形

效果:

style="height: 300px; width: 100%;" src=" https://jsfiddle.net/4gsyyjkz/1/embedded/result,css,html,js/" width="320" height="240">

但是ie6不支持transparent,所以没有透明效果,这就需要把border-style:solid dashed dashed dashed;实现了透明效果;

2、如果要实现直角对着45度斜线方向的三角形,可以将两个三角形拼在一起来实现;

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
      .caret{
  height:0;/*将宽高都设置为0*/
  width:0;
  border:100px solid #000;
  border-color:red green transparent transparent;
  border-style:solid solid dashed dashed;
}
p{color:red;}
    </style>
</head>
<body>
<div class="caret"></div>
<p>
 border-color:red green transparent transparent transparent;
 border-style:solid solid dashed dashed;
</p>
</body>
</html>

效果:

style="height: 300px; width: 100%;" src=" https://jsfiddle.net/4gsyyjkz/3/embedded/result,css,html,js/" width="320" height="240">

注意:此方法在ie6中,会有个行高撑开了,需要把行高设置为0,line-heiht:0;

 

下面用css绘制三角形的原理来绘制一个三角形气泡

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>除去列表最后一个li的底边框</title>
    <style>
        body,p{margin:0;padding:0;}
        #container{
            margin:0 auto;
            position:relative;
            width:400px;
            height:100px;
            border:10px solid #81A7FF;
        }
        #caret{
            position:absolute;
            width:50px;
            height:50px;
            left:100px;
            bottom:-50px;
        }
        .triangle1,.triangle2{

            display:block;
            height:0;/*将宽高都设置为0*/
            width:0;
            line-height:0;
            border-style:solid dashed dashed dashed;
        }
        .triangle1{
            border-width:50px;
            border-color:#81A7FF transparent transparent transparent;
        }
        .triangle2{
            position: absolute;
            top:-14px;/*这个数据三角函数是计算出来的*/
            border-width:50px;
            border-color:#fff transparent transparent transparent;
        }
        p{color:#81A7FF;text-align: center;line-height: 100px;}
    </style>
</head>
<body>
<div id="container">
    <div id="caret">
        <span class="triangle1"></span>
        <span class="triangle2"></span>
    </div>
    <p>
        css绘制三角形气泡
    </p>
</div>
</body>
</html>

效果:

style="height: 300px; width: 100%;" src=" https://jsfiddle.net/wowq3mf0/6/embedded/result,css,html,js/" width="320" height="240">

.triangle2的top值不能直接是10px,不然显示的三角形边框会小于10,会导致气泡部分小于容器div元素的边框(border-width);top值的计算:(border-width)*(border-width)/((border-width)*sin45)

<think>好的,用户想学习如何使用CSS绘制三角形。首先,我需要回忆一下常见的实现方法。记得最常用的是利用边框(border)属性来创建三角形,因为当元素的宽度高度为零时,边框会交汇形成尖角效果。另外,还有其他方法比如使用线性渐变(linear-gradient),但可能如边框法直观。 首先,我应该详细解释边框法的原理。当设置元素的宽度高度为0,然后给同方向的边框设置同的颜色宽度,交汇处会形成三角形。例如,想要一个向上的三角形,可以设置下边框为有颜色,左右边框为透明,上边框去掉或者设置为透明。这时候下边框的宽度决定了三角形的高度,左右边框的宽度影响三角形的底边长度。 接下来,需要给出具体的代码示例。比如,创建一个向上的红色三角形,代码应该是设置widthheight为0,border-style为solid,然后border-width设置为0 50px 50px(上、左右、下),border-color设置为transparent transparent red。这样下边框会显示为红色,左右边框透明,形成向上的三角形。 然后,可能需要提到如何调整方向。通过改变border-width的顺序,可以控制同方向的边框大小,从而生成同方向的三角形。比如,向右的三角形可能设置左边框为有颜色,其他边框为透明,并调整宽度值。 另外,用户可能还想知道如何实现带边框的三角形或者更复杂的形状。这时候可以用伪元素叠加的方法。比如,主元素生成一个大三角形,伪元素生成一个稍小的同颜色的三角形,覆盖在大的上面,形成边框效果。例如,使用::after伪元素,设置其位置稍微偏移,颜色与背景相同,这样看起来就像是有边框的三角形了。 还需要提到其他方法,比如使用线性渐变。通过设置背景为线性渐变,调整角度颜色断点,可以形成三角形。但这种方法可能兼容性稍差,或者代码更复杂,如边框法常用。 在引用资料时,要注意用户提供的引用链接。比如引用[1]、[4]、[5]提到了边框方法,引用[2][3]提到了线性渐变方法。需要将这些引用自然地融入到回答中,确保每个关键点都有对应的引用支持。 用户可能还会有后续问题,比如如何调整三角形的大小、颜色,或者如何实现同方向的三角形。在相关问题部分,可以预设这些问题,引导用户进一步学习。 最后,确保回答结构清晰,分步骤解释,代码示例正确,并且引用正确来源。检查是否有遗漏的方法或常见错误,比如忘记设置宽度高度为零,或者边框颜色设置错误导致三角形方向对。</think>### 如何用CSS实现三角形效果? #### 方法一:利用边框(border)属性 **原理**:将元素的宽高设为0,通过设置同方向的边框颜色宽度,利用边框交汇处的尖角形成三角形[^1][^4][^5]。 **步骤**: 1. 设置元素宽高为0:`width: 0; height: 0;` 2. 通过`border-style`定义边框类型(通常为`solid`) 3. 调整`border-width`控制三角形大小,通过`border-color`设置颜色透明方向。 **示例代码**(向上红色三角形): ```css .triangle-up { width: 0; height: 0; border-style: solid; border-width: 0 50px 50px; /* 上 右 下 左 */ border-color: transparent transparent #ff0000; } ``` **方向调整**: - 向下:`border-width: 50px 50px 0 50px;` - 向左:`border-width: 50px 50px 50px 0;` - 向右:`border-width: 50px 0 50px 50px;` --- #### 方法二:使用伪元素实现带边框的三角形(对话框效果) 通过叠加主元素伪元素的三角形,形成边框效果: ```css .bubble { width: 0; height: 0; border-style: solid; border-width: 0 50px 50px; border-color: transparent transparent #d9534f; position: relative; } .bubble::after { content: ''; position: absolute; border-style: solid; border-width: 0 47px 47px; /* 比外层小2px */ border-color: transparent transparent white; top: 2px; left: -47px; } ``` --- #### 方法三:线性渐变(linear-gradient) 通过背景渐变生成斜边效果[^2][^3]: ```css .triangle-gradient { width: 100px; height: 100px; background: linear-gradient(45deg, #ff0000 50%, transparent 50%); } ``` --- #### 方法对比 | 方法 | 优点 | 缺点 | |-----------|-------------------------|---------------------| | 边框法 | 兼容性好、实现简单 | 无法实现圆角或复杂形状 | | 线性渐变 | 支持倾斜角度、可组合其他背景效果 | 代码复杂度高、部分浏览器支持 | | 伪元素叠加法 | 可实现边框、对话框等复杂效果 | 需精确定位 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值