如何在CSS3中创建箭头?

3

1
你尝试过的任何东西,都相当容易? - Starx
请看我做了两个示例,检查一下:http://jsfiddle.net/Ewfkk/28/ - Shailender Arora
4个回答

7

--- SEE DEMO ----

<div class="triangle-left">
    <div></div>
</div>​

.triangle-left {
  border-color: transparent black transparent transparent;
  border-style: solid;
  border-width: 20px;
  width: 0;
  height: 0;
}

.triangle-left div
{
  border-color: transparent white transparent transparent;
  border-style: solid;
  border-width: 10px;
  width: 0;
  height: 0;
  position:relative;
  top:-9px;
  left:0px;
}​

这是一个带有白色三角形的三角形,看起来像箭头。有关CSS3三角形的更多信息,请访问此处:

http://jonrohan.me/guide/css/creating-triangles-in-css/


@Rohitazad,你能不能不改变你的HTML代码,加入这个内部div? - Curtis
@Curt,请同时提供一些解释。 - Starx
@Rohitazad:然后添加第二个DIV!开发就是为了做出你想要的最终结果而进行更改。 - musefan
@Curt,请查看此链接http://jsfiddle.net/BdSP4/1/,我已经发布了结果图片。 - Rohit Azad Malik
3
@Rohitazad,这不是一个“为我写代码”的网站,请理解。Curt提供了一个很好的解决方案。 - Starx
1
哇塞,那是怎么运作的? - Jürgen Paul

7

请参阅JsFiddle

HTML

<div class="angle"></div>

CSS

.angle:after { /* Thanks to :after just one div is necessary */
    content: '.';
    border-top: 20px solid #000; /* NW triangle gap */
    border-bottom: 20px solid #000; /* SW triangle gap */
    border-left: none;
    border-right: 20px solid transparent; /* W triangle */
    position: relative;
    left: 20px;
}
.angle {
    font-size: 0px; line-height: 0%; width: 0px; /* Necessary to not screw up the layout */
    border-top: 20px solid transparent; /* NE triangle gap */
    border-bottom: 20px solid transparent; /* SE triangle gap */
    border-left: none;
    border-right: 20px solid #000; /* E triangle */
}

更新: 缩小版本

这是两个重叠的三角形。一个是黑色的,一个是白色的。

JsFiddle

相同的HTML,不同的CSS

.angle:after {
    content: '.';
    border-top: 10px solid transparent; 
    border-bottom: 10px solid transparent;
    border-left: none;
    border-right: 10px solid white; 
    position: relative;
    left: 5px;
}
.angle {
    font-size: 0px; line-height: 0%; width: 0px; /* Necessary to not screw up the layout */
    border-top: 10px solid transparent;
    border-bottom: 10px solid transparent;
    border-left: none;
    border-right: 10px solid #000;
}

为什么要用大炮打死一只苍蝇? - Eliran Malka
1
@Mikey,请附上一些解释。 - Starx
@EliranMalka:因为大炮很棒! - musefan
@Starx:添加了注释,希望这能帮助更好地理解代码。 - Frank van Wijk
+1,我总是喜欢看到伪元素被充分利用以减少HTML标记。然而,当我在FF 11中查看你的fiddle解决方案时,前端点和后面的“翅膀”之间有一个1像素的白色间隙。我相信这个问题可以解决,但我认为你应该知道。 - ScottS

2

您不必使用CSS 3 - 可以使用HTML实体来创建它:

<span>&#8249;</span>

8
这是 Nix 发表的评论的欺骗性回复。 - Starx
1
我在看到评论之前就已经发布了它,请不要做出错误的指责。 :) - Eliran Malka
1
这对我有效 - Eliran Malka
Rohit Azad可能看不到它,因为“字符实体引用是一个SGML结构,它引用文档字符集的一个字符”([参见W3C](http://www.w3.org/TR/html401/sgml/entities.html)),而且由于他在德里,可能正在使用不显示箭头的不同文档字符集。 - ScottS
@ScottS - 实际上,HTML实体引用应该是&lsaquo;,示例中使用的符号表示Unicode字符代码,对于所有编码来说应该是相同的。也许Rohit应该先尝试将字符显示为简单文本,而不考虑样式。 - martinstoeckli

0

只需使用CSS3的rotate添加替代即可

演示

CSS

.arrow { width: 20px; height: 20px; overflow: hidden; }
.arrow span  {
    display: block;
    border: 4px #000 solid;
    background: #fff;
    width: 14px;
    height: 14px;
    float:right;
    margin-right: -12px;
    
    -webkit-transform: rotate(45deg);
    -moz-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    -o-transform: rotate(45deg);
    transform: rotate(45deg);
    filter: progid:DXImageTransform.Microsoft.Matrix(
         M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476, sizingMethod='auto expand');
    zoom: 1;
}

HTML

<div class="arrow"><span></span></div>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接