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

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

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


当前回答

如果你想改变边框大小、宽度和高度,看看它们如何创建不同的形状,请尝试以下操作:

常量大小=[32,32,32,32];const triangle=document.getElementById('triangle');函数更新({target}){让索引=空;if(目标){index=parseInt(target.id);if(!isNaN(索引)){sizes[index]=目标值;}}window.requestAnimationFrame(()=>{triangle.style.borderWidth=sizes.map(size=>`${size}px`).join(“”);if(isNaN(索引)){triangle.style[target.id]=`${target.value}px`;}});}document.querySelectorAll('input').forEach(input=>{input.oninput=更新;});更新({});正文{边距:0;最小高度:100vh;显示:柔性;对齐内容:中心;对齐项目:居中;溢出:隐藏;}#三角形{边框样式:实心;边框颜色:黄-品红-蓝-黑;背景:青色;高度:0px;宽度:0px;}#控件{位置:固定;底部:0;左:0;右:0;背景:白色;显示:柔性;方框阴影:0 0 32px rgba(0,0,0、.125);}#控件>div{位置:相对;宽度:25%;填充:8px;框大小调整:边框框;显示:柔性;}输入{边距:0;宽度:100%;位置:相对;}<div id=“triangle”style=“border width:32px 32px 32px;”></div><div id=“controls”><div><input-type=“range”min=“0”max=“128”value=“32”id=“0”/></div><div><input-type=“range”min=“0”max=“128”value=“32”id=“1”/></div><div><input-type=“range”min=“0”max=“128”value=“32”id=“2”/></div><div><input-type=“range”min=“0”max=“128”value=“32”id=“3”/></div><div><input-type=“range”min=“0”max=“128”value=“0“id=“width”/></div><div><input-type=“range”min=“0”max=“128”value=“0“id=“height”/></div></div>

其他回答

如果你想改变边框大小、宽度和高度,看看它们如何创建不同的形状,请尝试以下操作:

常量大小=[32,32,32,32];const triangle=document.getElementById('triangle');函数更新({target}){让索引=空;if(目标){index=parseInt(target.id);if(!isNaN(索引)){sizes[index]=目标值;}}window.requestAnimationFrame(()=>{triangle.style.borderWidth=sizes.map(size=>`${size}px`).join(“”);if(isNaN(索引)){triangle.style[target.id]=`${target.value}px`;}});}document.querySelectorAll('input').forEach(input=>{input.oninput=更新;});更新({});正文{边距:0;最小高度:100vh;显示:柔性;对齐内容:中心;对齐项目:居中;溢出:隐藏;}#三角形{边框样式:实心;边框颜色:黄-品红-蓝-黑;背景:青色;高度:0px;宽度:0px;}#控件{位置:固定;底部:0;左:0;右:0;背景:白色;显示:柔性;方框阴影:0 0 32px rgba(0,0,0、.125);}#控件>div{位置:相对;宽度:25%;填充:8px;框大小调整:边框框;显示:柔性;}输入{边距:0;宽度:100%;位置:相对;}<div id=“triangle”style=“border width:32px 32px 32px;”></div><div id=“controls”><div><input-type=“range”min=“0”max=“128”value=“32”id=“0”/></div><div><input-type=“range”min=“0”max=“128”value=“32”id=“1”/></div><div><input-type=“range”min=“0”max=“128”value=“32”id=“2”/></div><div><input-type=“range”min=“0”max=“128”value=“32”id=“3”/></div><div><input-type=“range”min=“0”max=“128”value=“0“id=“width”/></div><div><input-type=“range”min=“0”max=“128”value=“0“id=“height”/></div></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;
}

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

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

SASS(SCSS)三角形混合

我写这篇文章是为了让自动生成CSS三角形变得更容易(也更干燥):

// Triangle helper mixin (by Yair Even-Or)
// @param {Direction} $direction - either `top`, `right`, `bottom` or `left`
// @param {Color} $color [currentcolor] - Triangle color
// @param {Length} $size [1em] - Triangle size
@mixin triangle($direction, $color: currentcolor, $size: 1em) {
  $size: $size/2;
  $transparent: rgba($color, 0);
  $opposite: (top:bottom, right:left, left:right, bottom:top);

  content: '';
  display: inline-block;
  width: 0;
  height: 0;
  border: $size solid $transparent;
  border-#{map-get($opposite, $direction)}-color: $color;
  margin-#{$direction}: -$size;
}

用例示例:

span {
  @include triangle(bottom, red, 10px);
}

游乐场页面


重要提示:如果三角形在某些浏览器中显示为像素化,请尝试此处描述的方法之一。

好的,这个三角形将被创建,因为元素的边框在HTML和CSS中一起工作的方式。。。

由于我们通常使用1或2px边框,我们从未注意到边框以相同的宽度彼此成45°角,如果宽度发生变化,角度也会发生变化,请运行我在下面创建的CSS代码:

.三角形{宽度:100px;高度:100px;左边框:50px实心黑色;右边框:50px实心黑色;边框底部:100px纯红色;}<div class=“triangle”></div>

然后在下一步中,我们没有任何宽度或高度,如下所示:

.三角形{宽度:0;高度:0;左边框:50px实心黑色;右边框:50px实心黑色;边框底部:100px纯红色;}<div class=“triangle”></div>

现在,我们使左边界和右边界不可见,以使理想的三角形如下所示:

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

如果您不愿意运行代码片段来查看步骤,我创建了一个图像序列,以查看一个图像中的所有步骤: