css三角形原理讲解

admin 轻心小站 关注 LV.19 运营
发表于前端技术学习版块 css,教程

.triangle{ width: 0; height: 0; border-style: solid; border-width: 20px 0 20px 45px; border-color: t

.triangle{ width: 0; height: 0; border-style: solid; border-width: 20px 0 20px 45px; border-color: transparent transparent transparent #007bff; }

CSS三角形是CSS设计中经常用到的一种形式,其实质就是通过CSS样式来让元素产生三角形的效果。常见的应用场景有:

  • 作为箭头指向性提示,如菜单箭头、下拉框箭头等
  • 作为边框风格,如页面上的角标、标签等

下面介绍三种实现CSS三角形的原理和方法。

用伪元素绑定border样式

利用伪元素(before,after)设置绝对定位与尺寸,给其绑定三角形样式。具体如下:

 .triangle{
     position: relative;
     width: 45px;
     height: 40px;
     background-color: #007bff;
 }
 .triangle::before{
     content: "";
     width: 0;
     height: 0;
     border-style: solid;
     border-width: 20px 0 20px 45px;
     border-color: transparent transparent transparent #007bff;
     position: absolute;
     top: 0;
     content: "";
     left: -45px;
 } 

其中,父级元素定义了宽度和高度,伪元素的样式继承自定义样式,并添加前缀后缀选择器:white-space:。伪元素通过绝对定位,将三角形放到其父级元素的一侧。三角形的样式通过绑定border的各个边框实现。具体效果如下:

用伪元素绑定transform旋转样式

使用此种方法,先用伪元素创造一个正方形,然后旋转45°,利用样式剪切上下两个角,从而形成三角形的效果。具体代码如下:

.triangle{
    width: 40px;
    height: 40px;
    position: relative;
    background-color: #007bff;
}
.triangle::before{
    content: "";
    width: 100%;
    height: 100%;
    position: absolute;
    top: -20%;
    left: -20%;
    background-color: #ffffff;
    transform: rotate(45deg);
    transform-origin: 0 0;
    clip-path: polygon(0% 0%, 100% 0%, 100% 75%, 0% 100%);
} 

其中,父级元素定义宽度和高度,子级伪元素利用绝对定位,将其挂在父级元素上,align-self: center,展现为居中对齐的效果。三角形的样式通过transform和clip-path的组合来实现。

用border宽度与外框样式

通过设置宽度为0,给border某一边添加边框样式,从而形成三角形的样式效果。具体代码如下:

.triangle{
    width: 0px;
    height: 0px;
    border-width: 20px 20px 0 20px;
    border-style: solid;
    border-color: #007bff transparent transparent transparent;
} 

通过调整三角形border各个边框宽度与颜色,可以实现不同样式的三角形。

以上就是三种实现CSS三角形的原理和方法,通过对CSS样式的边框、伪元素、旋转、clip-path等属性的灵活应用,可以实现形形色色的三角形样式效果。

文章说明:

本文原创发布于探乎站长论坛,未经许可,禁止转载。

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,探乎站长论坛平台仅提供信息存储空间服务。

评论列表 评论
发布评论

评论: css三角形原理讲解

粉丝

0

关注

0

收藏

0

已有0次打赏