2012-07-26 147 views
1

我想将三角形​​添加到块的两侧以将其塑造成箭头like so。但它需要灵活并适应不同长度的文本。我在想,传统的css-triangles-made-from-borders技术是行不通的,但这就是我到目前为止(demo)。其他人是否有更强大的解决方案?灵活的CSS三角形?

尖端的CSS是好的,只要它很好地降解。

+0

如果CSS3没问题,难道你不能把整个事情做成一个背景图像,并相应地使用'background-size'属性来让它伸展吗? – 2012-07-26 16:16:59

+0

嗯,这是一个好主意。如果可能的话,我宁愿避免使用图像,我担心拉伸太多会使其模糊,但这可能是最好的解决方案。谢谢! – user1555283 2012-07-26 20:05:28

回答

5

我认为最好的兼容性的解决办法是http://dabblet.com/gist/3184227

它仅使用伪元素和CSS transforms(因此它可以在IE9中,它可以适用于IE8,其中伪元素可以使用被扭曲matrix filter - 我从来没有检查过这是否真的有效......我只知道渐变过滤器不适用于伪元素)。

的想法是非常简单的:使用两个伪元素,每一个都具有height,绝对position它们,一个采取半起来以相反的方向的上半部分,而另一个下半部最后skew它们。

HTML:

​​

相关CSS:

.t { 
    position: relative; 
} 
.t:before, 
.t:after { 
    left: 0; 
    right: 0; 
    position: absolute; 
    z-index: -1; 
    content: ''; 
} 
.t:before { 
    top: 0; 
    bottom: 50%; 
    transform: skewX(10deg); 
} 
.t:after { 
    top: 50%; 
    bottom: 0; 
    transform: skewX(-10deg); 
} 

它可以在不伪元素来完成,只用CSS gradients。不幸的是,IE9 does not support them

+0

这真的很性感,非常感谢!我还没有考虑过css渐变来解决这个问题,但是你的主要解决方案对于我的软弱大脑更有意义。 – user1555283 2012-07-26 23:56:31

+0

变换在chrome中不起作用? – froderik 2013-05-06 05:55:16

+0

@froderik它可以在Chrome中工作,但尚未前缀 - 请参阅http://caniuse.com/#feat=transforms2d您需要在前缀***之前添加'-webkit-transform'版本***。我的演示不包含任何前缀,因为它使用**'-prefix-free' ** http://leaverou.github.io/prefixfree/,根据需要添加前缀。 – Ana 2013-05-06 19:37:03