利用CSS3画三角形(另附百度笔试题)

一、原理

CSS3画三角形的原理十分简单,利用到的属性无非几种:width、height、content、border。
拿一个矩形举例:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		#pentagon {
			width: 0;
			height: 0;
			content: '';
			border: 50px solid red;
		}
	</style>
</head>
<body>
	<div id='pentagon'></div>
</body>
</html>
显示效果:

问题来了:为什么我已经将矩形的宽高和内容都置空了,仍然会有矩形出现呢?
答案是:你所看到的矩形是由四个实心边框组合起来的。
不信你看下面:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		#pentagon {
			width: 0;
			height: 0;
			content: '';
			border: 50px solid red;
			border-top: 50px solid transparent;
		}
	</style>
</head>
<body>
	<div id='pentagon'></div>
</body>
</html>
显示效果:

我所做的修改是:加了顶部边框的样式,将顶部边框设置为透明。
看到这里,大家应该明白了吧,在矩形的宽高都是0的时候,矩形的实心边框都挤在了一起,在每两条边相接的部分二者等分,这样就造成了四个三角形组合为一个矩形的效果,自热而然,如果将其它三个三角形设置为透明色,那么剩下的一个就是被人眼所看见的三角形了。

二、百度笔试题


题目不用描述了,就是去让你用CSS去搞定这样一个图案。不多说,先上菜:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		#ghostlpx{  
		    width: 100px;  
		    height: 100px;  
		    border:2px solid #000;  
		    position: relative;  
		    margin-right: 10px;  
		}  
		#ghostlpx:before,#ghostlpx:after{  
		    content: ' ';  
		    position: absolute;  
		    left: 100%;  
		    border: solid transparent;    
		}  
		#ghostlpx:after{  
		    width: 0px;  
		    height: 0px;  
		    top:20px;  
		    border-width: 10px;  
		    border-left: 10px solid  #fff;   
		}  
		#ghostlpx:before{  
		    width: 0px;  
		    height: 0px;  
		    top:18px;  
		    border-width: 12px;  
		    border-left: 12px solid #000; 
		}  
	</style>
</head>
<body>
	<div id='ghostlpx'></div>
</body>
</html>
那个凸出来的三角框其实是用两个三角形叠加出来的,用before伪类去实现底部的黑色不透明三角形,用after伪类去实现before上部的透明三角形,利用after去遮盖before,未遮盖的部分即为你所看到的三角形边框。

三、利用三角形实现箭头

了解了三角形的实现原理,那么五角星、六边形...n边形你依然不会实现,自行百度去吧,一搜一大堆。我想给大家贴一个我项目里实现过的一个箭头形状,很简单,也很常用。代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
	    #pentagon {
	        position: relative;
	        width: 100px;
	        height: 4px;
	        margin: 10px 0;
	        background: rgb(204,204,204);
		}
	    #pentagon:after {
	        content: "";
	        position: absolute;
	        top: -8px;
	        left: 100px;
	        height: 0;
	        width: 0;
	        border-width: 10px;
	        border-style: solid;
	        border-color: transparent transparent transparent rgb(204,204,204);
	    }
	</style>
</head>
<body>
	<div id='pentagon'></div>
</body>
</html>
效果图:

--END--
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值