我知道如何使用伪类在div外部创建箭头,但我需要在div中创建一个箭头,如下所示
我怎么能得到这个?
答案 0 :(得分:7)
答案 1 :(得分:7)
无需使用额外的元素,这可以完全使用CSS3完成:
background-color: gray;
background-image:
linear-gradient(135deg, transparent 75%, #000 75%), /*right side of triangle*/
linear-gradient(45deg, transparent 75%, #000 75%) /*left side of triangle*/;
background-position: 30px 0, 0 0;
background-repeat: no-repeat;
background-size: 30px 30px;
演示(使用供应商前缀:http://jsfiddle.net/rLZkf/1/)。
如下图 source 所示,CSS使用简单的语法支持线性颜色渐变。
通过一些想象,您可以在上一张图片中看到一个三角形。然而,颜色在对角线上混合。因此,我们设置了明确的色停位置。当这些位置相等时,不再有视觉混合,你会得到一个实心的三角形。
是时候介绍一个三角形了:
background-image: linear-gradient(45deg, transparent 50%, black 50%);
渐变从左下角开始,由于角度为45°而在右上角结束。颜色停止位置定义为50%,因此三角形的左下部分是透明的,另一半是黑色。要获得不同的三角形,请使用135°的角度。这是两个角度的图像:
此时,我们知道如何创建一个矩形三角形。为了更进一步,我们需要能够创建一个三角形,其中斜边垂直或水平放置。为此,我们连接两个三角形。 CSS3引入了对multiple backgrounds的支持。此功能用于构造三角形。
/* Create triangles */
background-image:
linear-gradient(135deg, transparent 75%, #000 75%), /*right side of triangle*/
linear-gradient(45deg, transparent 75%, #000 75%) /*left side of triangle*/;
/* Move one of the triangles to the right */
background-position: 30px 0, 0 0;
/* Don't repeat the background image (remove this to see what would happen) */
background-repeat: no-repeat;
/* Define the size of the triangle */
background-size: 30px 30px;
在之前的CSS代码中,我们可以看到我使用75%
作为颜色停止位置(而不是50%
)。此选择无关紧要,三角形的最终形状由渐变色停位置background-position
和background-size
的值决定。
**注意:我在解释中遗漏了供应商前缀。要使用此技术,您必须添加供应商前缀(如the demo中所示)。
答案 2 :(得分:1)
..........................
现在习惯
after: pseudo-class
就像这样
.some{
width:100px;
height:100px;
background:red;
position:relative;
overflow:hidden;
}
.some:after{
content:'';
position:absolute;
left:10px;
top:-11px;
z-index:0;
width:25px;
height:25px;
background:green;
transform:rotate(45deg);
-ms-transform:rotate(45deg); /* IE 9 */
-moz-transform:rotate(45deg); /* Firefox */
-webkit-transform:rotate(45deg); /* Safari and Chrome */
-o-transform:rotate(45deg); /* Opera */
}
的 live demo 强> 的
答案 3 :(得分:1)
最短且与浏览器最兼容的解决方案:
css:
div{
position:relative;
height: 200px;
width: 200px;
background-color: gray;
}
div::after{
content: '';
border: solid 15px transparent;
border-top-color:black;
position:absolute;
top:0;
left: 30px;
}