如何制作一个白色中心的纯css三角形

时间:2012-02-28 20:54:52

标签: html css css3

我想用css创建一个向上和向下的箭头,如下所示:http://apps.eky.hk/css-triangle-generator/

然而,我想要设置它,而不是纯色,所以内部是白色的,三角形周围只有一个边框。 (因此三角形将是多色的,内部有一种颜色,边框颜色不同)。

这是可能的,如果是的话,怎么办呢?

4 个答案:

答案 0 :(得分:21)

要创建仅使用CSS的三角形,我们使用带边框的零宽度/高度元素:

.arrow-up {
    width  : 0;
    height : 0;

    border-left   : 50px solid transparent;
    border-right  : 50px solid transparent;
    border-bottom : 50px solid black;
}

由于我们使用边框来创建箭头,我们不能只给它一个边框,但我们可以在稍大的箭头上叠加一个箭头以显示边框:

HTML -

<div class="top"></div>
<div class="bottom"></div>​

CSS -

.top {
    position : absolute;
    top      : 6px;
    left     : 10px;
    width    : 0;
    height   : 0;
    z-index  : 100;

    border-left   : 50px solid transparent;
    border-right  : 50px solid transparent;
    border-bottom : 50px solid black;
}
.bottom {
    position : absolute;
    width    : 0;
    height   : 0;
    z-index  : 99;

    border-left   : 60px solid transparent;
    border-right  : 60px solid transparent;
    border-bottom : 60px solid red;
}​

以下是演示:http://jsfiddle.net/jasper/qnmpb/1/

更新

然后,您可以将两个三角形DIV元素放在容器中,然后根据需要移动该容器:

HTML -

<div id="container">
    <div class="top"></div>
    <div class="bottom"></div>
</div>

CSS -

#container {
    position : relative;
    top      : 25px;
    left     : 25px;
}

以下是演示:http://jsfiddle.net/jasper/qnmpb/3/

EDIT(2014):

我刚回到这个答案,并注意到创建双三角形不需要单独的HTML元素。您可以使用伪元素:before:after。即将.top选择器替换为.my-element-that-needs-a-triangle:before.bottom选择器,例如.my-element-that-needs-a-triangle:after

答案 1 :(得分:3)

我认为你可以通过查看关于纯css思想泡泡的本教程来了解该怎么做。它正在做你正在寻找的东西。

http://www.sitepoint.com/pure-css3-speech-bubbles/

答案 2 :(得分:0)

根据您使用它的方式,您可以使用CSS transform: rotate()创建一个带边框甚至框阴影的三角形,没有三角形边框黑客。请在此处查看我的回答:https://stackoverflow.com/a/8867645/918414

答案 3 :(得分:0)

如果要在纯CSS中创建带边框(或框阴影外观)的三角形,则应使用伪元素:before:after

在我的示例中,我将display:inline-block;添加到元素.arrow-dropdown,以便能够使用投影创建某种下拉菜单。接下来是.arrow-only,这是一个带红色边框的基本三角形。

body {
    margin: 10px;
    background: #1670c4;
}
.text {
    display: inline-block;
    font-size: 15px;
    color: #fff;
    text-shadow: 1px 1px 2px rgba(0,0,0,0.4);
    cursor: default;
}
.arrow-dropdown {
    display: inline-block;
    position: relative;
    vertical-align: middle;
    margin: 1px 0 0 8px;
    width: 8px;
    height: 7px;
}
.arrow-dropdown:after {
    content: '';
    position: absolute;
    border-style: solid;
    border-width: 7px 4px 0;
    border-color: #fff transparent transparent transparent;
    display: block;
    width: 0;
    z-index: 1;
}
.arrow-dropdown:before {
    content: '';
    position: absolute;
    border-style: solid;
    border-width: 8px 5px 0;
    border-color: rgba(0,0,0,0.3) transparent transparent transparent;
    display: block;
    width: 0;
    z-index: 0;
}
.arrow-only {
    position: relative;
    vertical-align: middle;
    margin: 10px 0 0 8px;
    width: 8px;
    height: 7px;
}
.arrow-only:after {
    content: '';
    position: absolute;
    border-style: solid;
    border-width: 12px 9px 0;
    border-color: #fff transparent transparent transparent;
    display: block;
    width: 0;
    z-index: 1;
}
.arrow-only:before {
    content: '';
    position: absolute;
    border-style: solid;
    border-width: 15px 11px 0;
    border-color: #f00 transparent transparent transparent;
    display: block;
    width: 0;
    z-index: 0;
    margin:-1px 0 0 -2px;
}
<div class="text">
  Dropdown text
</div><div class="arrow-dropdown"></div>

<div class="arrow-only"></div>