CSS技巧-CSS的形状有很多不同的CSS形状,我特别困惑于三角形:

#三角形向上{宽度:0;高度:0;左边框:50px实心透明;右边框:50px实心透明;边框底部:100px纯红色;}<div id=“triangle up”></div>

它是如何以及为什么工作的?


当前回答

我知道这是一个旧的方法,但我想在讨论中补充一点,单独使用HTML和CSS创建三角形至少有5种不同的方法。

使用边框使用线性梯度使用圆锥梯度使用转换和溢出使用剪辑路径

我认为,除了方法3(使用圆锥曲线梯度)之外,这里已经介绍了所有内容,所以我将在这里分享:

.三角形{宽度:40px;高度:40px;背景:圆锥形梯度(50%50%,透明135度,绿色0,绿色225度,透明0);}<div class=“triangle”></div>

其他回答

边框在相交处使用有角度的边(与等宽边框成45°角,但更改边框宽度可能会扭曲角度)。

第二部分{宽度:60px;边框宽度:30px;边框颜色:红蓝绿黄;边框样式:实心;}<div></div>

看看jsFiddle。

通过隐藏某些边界,您可以获得三角形效果(正如您在上面看到的,通过使不同部分的颜色不同)。透明经常被用作边缘颜色以获得三角形形状。

假设我们有以下div:

<div id="triangle" />

现在逐步编辑CSS,这样您就可以清楚地了解周围发生了什么

步骤1:JSfiddle链接:

 #triangle {
        background: purple;
        width :150px;
        height:150PX;
        border-left: 50px solid black ;
        border-right: 50px solid black;
        border-bottom: 50px solid black;
        border-top: 50px solid black;
    }

这是一个简单的div,带有非常简单的CSS。所以外行人可以理解。Div的尺寸为150 x 150像素,边框为50像素。图像附于:

步骤2:JSfiddle链接:

#triangle {
    background: purple;
    width :150px;
    height:150PX;
    border-left: 50px solid yellow ;
    border-right: 50px solid green;
    border-bottom: 50px solid red;
    border-top: 50px solid blue;
}

现在我刚刚更改了所有4个边的边框颜色。图像已附加。

步骤:3 JSfiddle链接:

#triangle {
    background: purple;
    width :0;
    height:0;
    border-left: 50px solid yellow ;
    border-right: 50px solid green;
    border-bottom: 50px solid red;
    border-top: 50px solid blue;
}

现在我刚刚将div的高度和宽度从150像素更改为零。图像已附加

第4步:JSfiddle:

#triangle {
    background: purple;
    width :0px;
    height:0px;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 50px solid red;
    border-top: 50px solid transparent;
}

现在,我已经使所有边界都透明,除了底部边界。图像附在下面。

第5步:JSfiddle链接:

#triangle {
    background: white;
    width :0px;
    height:0px;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 50px solid red;
    border-top: 50px solid transparent;
}

现在我把背景色改成了白色。图像已附加。

因此,我们得到了所需的三角形。

CSS剪辑路径

这是我觉得这个问题错过了的;剪辑路径

简单地剪辑路径具有剪切路径属性的剪切类似于从矩形纸张上剪切形状(如圆形或五边形)。该属性属于“CSS屏蔽模块级别1”规范。规范指出,“CSS屏蔽提供了两种方法来部分或完全隐藏视觉元素的部分:屏蔽和剪切”。粉碎杂志摘录


剪辑路径将使用元素本身而不是其边界来剪切您在其参数中指定的形状。它使用了一个超简单的基于百分比的坐标系统,这使得编辑非常容易,意味着你可以在几分钟内拿起它并创建奇怪而奇妙的形状。


三角形形状示例

第二部分{-webkit剪辑路径:多边形(50%0%,0%100%,100%100%);剪辑路径:多边形(50%0%、0%100%、100%100%);背景:红色;宽度:100px;高度:100px;}<div></div>


缺点

目前它确实有一个主要的缺点,一个是它主要缺乏支持,只在-webkit浏览器中得到了真正的覆盖,在IE上没有支持,在FireFox中只有很部分。


资源

这里有一些有用的资源和材料,可以帮助您更好地了解剪辑路径,并开始创建自己的剪辑路径。

Clippy-剪辑路径生成器W3C候选推荐文件MDN剪辑路径文档剪辑路径浏览器支持

使用剪辑路径:多边形(50%0%,100%100%,0%100%);用于创建简单的三角形

<div class="triangle"></div>

.triangle{width:200px; height:200px;background:#000;clip-path: polygon(50% 0%, 100% 100%, 0% 100%);}

这是另一把小提琴:

.container:after {
    position: absolute;
    right: 0;
    content: "";
    margin-right:-50px;
    margin-bottom: -8px;
    border-width: 25px;
    border-style: solid;
    border-color: transparent transparent transparent #000;
    width: 0;
    height: 0;
    z-index: 10;
    -webkit-transition: visibility 50ms ease-in-out,opacity 50ms ease-in-out;
    transition: visibility 50ms ease-in-out,opacity 50ms ease-in-out;
    bottom: 21px;
}
.container {
    float: left;
    margin-top: 100px;
    position: relative;
    width: 150px;
    height: 80px;
    background-color: #000;
}

.containerRed {
    float: left;
    margin-top: 100px;
    position: relative;
    width: 100px;
    height: 80px;
    background-color: red;
}

https://jsfiddle.net/qdhvdb17/