在图像前面的空心箭头

时间:2014-09-09 07:57:18

标签: css html5 css3 sass css-shapes

我正试图在图像前面创建一个空心的CSS箭头。

我明白了......但感觉很脏。有没有更好的方法来做到这一点? 跨浏览器兼容性(IE8 +)会很棒。

SCSS

.arrowwrap {
    width:100%;
    padding:0;
    position:relative;
    overflow:hidden;
    margin:-$arrow_height 0 0 0;
    &:after {
        content:'';
        position:absolute;
        height:$arrow_height;
        width:50%;
        margin:-$arrow_height 0 0 -$arrow_width;
        left:0;
        z-index:99999;
        background:$box_color;
    }
    &:before {
        content:'';
        position:absolute;
        height:$arrow_height;
        width:100%;
        left:50%;
        margin:0 0 0 $arrow_width;
        z-index:99999;
        background:$box_color;
    }
    .arrowone {
        width: 0;
        height: 0;
        border-style: solid;
        border-width: $arrow_height $arrow_width 0 $arrow_width;
        /* border-color: transparent transparent #333 transparent; */
        border-color:transparent $box_color $box_color $box_color;
        margin:auto;
    }
}

http://jsfiddle.net/dhs2eba2/

2 个答案:

答案 0 :(得分:4)

如果您想最小化并删除所有非语义标记,您可以这样做:

<强> DEMO

此技术依赖于伪元素,因此可以防止使用非语义标记。 IE8 +支持伪元素,请参阅canIuse。它还需要box-sizing属性来启用响应宽度(IE8也支持box-sizing: border-box +请参阅canIuse)。

HTML:

<div class="wrap">
    <img src="http://placekitten.com/800/350" />
    <article>
        <h1>Hellow World, meow</h1>
    </article>
</div>

CSS:

body {
    background:#fad;
    padding:0;
    margin:0;
}

$arrow_width: 20px;
$arrow_height: 20px;
$box_color: #d3d030;

.wrap {
    img {
        width:100%;
        height:auto;
        vertical-align:bottom;
    }
    article{
        padding:20px;
        background:$box_color;
        color:#fff;
        position:relative;
    }
}
article:before, article:after{
    content:'';
    position:absolute;
    width:50%;
    bottom:100%;
    box-sizing:border-box;
}
article:before{
    left:0;
    border-bottom:20px solid #D3D030;
    border-right:20px solid transparent;
}
article:after{
    right:0;
    border-bottom:20px solid #D3D030;
    border-left:20px solid transparent;
}

答案 1 :(得分:1)

不确定IE8,我的VM上没有副本,但你可以这样做而不是伪元素

<div class="arrowborder">
    <div class="arrrowwrap arrowwrapleft"></div>
    <div class="arrrowwrap arrowwrapright"></div>
</div>

.arrrowwrap {
    box-sizing:border-box;
    width:50%;
    z-index:9999999;
    float:left;
}
.arrowwrapleft {
    border-right: $arrow_width solid transparent; 
    border-bottom: $arrow_height solid $box_color;
}
.arrowwrapright {
    border-left: $arrow_width solid transparent; 
    border-bottom: $arrow_height solid $box_color;
}

http://jsfiddle.net/dhs2eba2/8/