壹 ❀ 引

这两天因为项目工作较少,闲下来去看了GitHub上关于面试题日更收录的文章,毕竟明年有新的打算。在CSS收录中有一题是 用css创建一个三角形,并简述原理 。当然对于我来说画一个三角形是没难度的,简述原理?我突然一愣,虽然我知道通过边框可以做到,那为什么这么设置边框可以实现呢,抱着这个疑问于是有了这篇文章,那么本文开始。

 贰 ❀ CSS画一个三角形

1.不同理解的边框

写CSS样式的同学与边框border打交道就像每天早上起来拥抱太阳,吃泡面加根肠一样平常,一直以来在我印象里,边框就像一条细线,如果用形状去形容应该是一个长方形。

<div class="border"></div>
.border {
width: 50px;
height: 50px;
border: 2px solid;
border-color: #96ceb4 #ffeead #d9534f #ffad60;
}

比如这个例子中,在我看来就是四个宽2px高50px且颜色不同的长方形拼凑成了一个正方形。现在我们将border设置大一点,稍微调修改下:

.border {
width: 50px;
height: 50px;
border: 50px solid;
border-color: #96ceb4 #ffeead #d9534f #ffad60;
}

当border足够宽,这才反应过来border就像我们在生活中见过的相框,它是由四个梯形拼凑而成。中间白色区域就是元素的宽高,现在我们将元素宽高去除掉:

.border {
width:;
height:;
border: 50px solid;
border-color: #96ceb4 #ffeead #d9534f #ffad60;
}

那么现在你想要什么颜色的三角形呢?比如我要中国红,那就将上,左右边框颜色设置为透明,这样就得到了一个红色有角三倍速(高达梗)。
.border {
width:;
height:;
border: 50px solid;
border-color: transparent transparent #d9534f;
}

当然这样还不够完美,我们可以看到虽然上方没颜色,还是占据了部分高度,对于强迫症来说真的不舒服,我们再将上边框高度去除掉。

.border {
width:;
height:;
border-style:solid;
border-width: 0 50px 50px;
border-color: transparent transparent #d9534f;
}

这样就是一个比较完美的三角形了:

3.CSS画一个空心三角形(只有边框)

那么现在我们想画一个只有边框的空心三角形怎么做呢,首先三角形本身就是由border实现,所以没法在border上添加border了,最直接的办法就是再新建一个小一点的三角形定位上去。

这里我使用伪类再定义一个小一点三角形,可以看到是这样:

.border {
width:;
height:;
border-style:solid;
border-width: 0 50px 50px;
border-color: transparent transparent #d9534f;
position: relative;
}
.border:after{
content: '';
border-style:solid;
border-width: 0 40px 40px;
border-color: transparent transparent #96ceb4;
position: absolute;
top:;
left:;
}

可以看到小三角顶端与大三角形对齐,且小三角形左侧恰好与大三角形中心部分对齐。这是因为伪类元素定位参照对象的内容区域没有任何东西,在我们没隐藏其它三个三角形之前,四个三角形的中心就是父级元素。

那么进行简单定位微调,可以看到效果变成这样:

.border:after {
content: '';
border-style: solid;
border-width: 0 40px 40px;
border-color: transparent transparent #96ceb4;
position: absolute;
top: 6px;
left: -40px;
}

最后我们将小三角形的边框颜色换成白色,那么一个只有边框的空心三角形就诞生了:

4.实现一个箭头

实现一个箭头就更好说了,我们将定位的三角形设置的与之前的三角形一样大,简单定位,比如这样:

再将背景色改成白色即可:

当然我们甚至还可以在通过伪类before添加一条直线,让它看起来更像一个箭头:

 叁 ❀ 总

那么到这里,我们介绍了通过CSS边框的做法实现一个三角形,同时还介绍了利用小三角定位的模式来画一个只有边框的空心三角形,最后还介绍了如何制作一个箭头,如果在日后工作中遇到这样的需求,当然也能够轻松解决了,那么本文就介绍到这里。

 参考

CSS绘制三角形—border法

[css] 第6天 用css创建一个三角形,并简述原理

CSS画一个三角形,CSS绘制空心三角形,CSS实现箭头的更多相关文章

  1. Effective前端3:用CSS画一个三角形

    p { text-indent: 2em } .triangle-container p { text-indent: 0 } img { margin: 15px 0 } 三角形的场景很常见,打开一 ...

  2. Effective前端(3)用CSS画一个三角形

    来源:https://zhuanlan.zhihu.com/p/26160325 三角形的场景很常见,打开一个页面可以看到各种各样的三角形: 由于div一般是四边形,要画个三角形并不是那么直观.你可以 ...

  3. 使用css画一个箭头

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  4. css画一个提示框

    用css画一个如下图的提示框: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  5. 【前端切图】用css画一个卡通形象-小猪佩奇

    最近在腾讯云技术社区遇到了一位奇才,用css画出了一个社会人小猪佩奇,不得不服.研究了一下他的文章https://segmentfault.com/a/1190000014909658,感觉甚是有趣, ...

  6. div+css画一个小猪佩奇

    用DIV+CSS画一个小猪佩奇,挺可爱的,嘻嘻. HTML部分(全是DIV) <!-- 小猪佩奇整体容器 --> <div class="pig_container&quo ...

  7. 用CSS画一个带阴影的三角形的示例代码

    1. 思路 怎么用CSS3画一个带阴影的三角形呢 ? 有童鞋说, 这还不简单吗 网上有很多解决方案, 但其实大多都是实现不太完美的, 存在一些问题 假设我们做一个向下的三角形箭头 常见的方法大致有两种 ...

  8. Effective前端1---chapter 2 用CSS画一个三角形

    1.CSS画三角形的画法 第一步:三角形可以用border画出来,首先一个有四个border的div长这样: <div class="triangle"></di ...

  9. css实战#用css画一个中国结

    大家好!今天跟大家分享一个用 css 画中国结的教程.最终效果如下: 大家如果感兴趣可以参考我的源码:gitHub地址 首先,我们定义好画中国结需要的结构: <div class="k ...

随机推荐

  1. java发送邮件基础方法(另附部分主流邮箱服务器地址、端口及设置方法)

    java发送邮件基础方法,可通过重载简化参数 import java.io.File; import java.io.UnsupportedEncodingException; import java ...

  2. django----csrf跨站请求伪造 auth组件 settings源码 importlib模块

    目录 importlib模块 csrf跨站请求伪造 form表单发送 ajax发送 csrf装饰器 auth模块 如何创建超级用户(root) 创建用户 校验用户名和密码是否正确 保存用户登录状态 判 ...

  3. 从头实现一个WPF条形图

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  4. Redis来啦~~

    一. 先聊点别的 1. sql & nosql sql指关系型数据库,如Oracle,MySQL等,nosql泛指非关系型数据库,如MongoDB,Redis等:SQL数据存在特定结构的表中, ...

  5. ElasticSearch 7.4.2 Root mapping definition has unsupported parameters

    新建索引 PUT people { "settings":{ "number_of_shards":3, "number_of_replicas&qu ...

  6. C# ling to sql 左表连接

    var begin_daily = from a in _postgreDbContext.tab1 join b in _postgreDbContext.tab2 on a.id equals b ...

  7. iOS:bugly符号表上传

    https://blog.csdn.net/weixin_38633659/article/details/81667721 这个篇文章已经讲得足够清楚 而且官方的文档也写得很好(注意官方网站上的文档 ...

  8. Java 密码加盐

    只对密码进行md5加密很容易反推出来,另外两个用户的密码相同时,数据库保存相同的密码,知道一个用户的密码就知道另一个.解决方法是在用户的短密码后面加上一段长字符,再计算 md5,这样反推出原始密码就变 ...

  9. Gitlab + Jenkins 的 CI 实践

    0x00 事件 为了开发人员更高效的更新应用而采取的 CI 方式实践. 0x01 过程记录 1.Jenkins 设置 安装插件 Gitlab Hook Plugin Build Authorizati ...

  10. Java面试题_第四阶段

    1.1 电商行业特点 1.分布式 垂直拆分:根据功能模块进行拆分 水平拆分:根据业务层级进行拆分 2.高并发 用户单位时间内访问服务器数量,是电商行业中面临的主要问题 3.集群 抗击高兵发的有效手段, ...