CSS小箭头的方法及原理

今天注意到人和网的首页幻灯片上的一个小细节,就是下图上的这个小箭头。最初我以为是用一张小图片实现的。用firbug查看发现竟然不是,顿时激起了我的好奇心。

它的代码是这样的:

于是,我自己做了个测试:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>小箭头</title>
<style>
body{
    margin:0;
    padding:0;
}
.arrow{
    display:inline-block;
    border:8px solid;
    border-color:#fff #fff #f00 #fff;
}
</style>
</head>
<body>
    <div class="arrow"></div>
</body>
</html>

成功实现。具体原理要从box盒状模型说起了,box盒装模型的宽度L = width + padding + border + margin,即总宽度=上外边距+上边宽+上内边距+宽度+下内边距+下变宽+下外边距。

在这里我们没有定义内边距和外边距,只定义了宽为8px的变宽,上边宽8px+下变宽8px=总宽度16px。当我们把左变宽、上变宽、右边宽的颜色设为白色,下变宽设为红色的时候,就显示出如上图的效果了。

Ps:必须给它写上display:inline-block或者display:inline,因为div的性质是块,它会自己占据一行。除非脱离文档流,使其没有一行的概念(人和网是用了绝对路径脱离了文档流,用浮动float同样可以实现)。
否则效果会跟下图一样:

IE6/7对支持display:inline-block和display:inline不友好,建议通过脱离文档流的方法解决块元素占一行的问题。附“IE6/7下不同的inline-block“。

Demo下载:http://pan.baidu.com/share/link?shareid=88273&uk=3221702211

原文地址:https://www.cnblogs.com/xjchenhao/p/4014165.html