2014-03-05 139 views
3

我試圖用插入爲每個類別設置一個透明三角形。的HTML是這樣的:插入透明三角形的菜單

<li class="level0 nav-1 level-top first"> 
<a class="level-top" href="http://shop.de/kinderzimmer"> 
<span> 
<span class="navborder navborder-left"></span> 
Kinderzimmer 
<span class="navborder navborder-right"></span> 
</span> 
</a> 
</li> 
... 

...但我可以添加/如果需要刪除跨度/班等。

我第一次嘗試這樣的CSS:

#nav li.level0 a.level-top span { 
    position: relative; 
    width: 100%; 
    } 
#nav li.level0 a.level-top span:after { 
    content: ""; 
    left: 50%; /* center triangle */ 
    margin-left: -20px; /* center triangle */ 
    width: 0; 
    height: 0; 
    border-left: 20px solid red; 
    border-right: 20px solid red; 
    border-bottom: 20px solid transparent; 
    position: absolute; 
    top: 20px; 
    } 
#nav li.level0 a.level-top span span.navborder-left:after { 
    border-bottom: 20px solid green; 
    } 
#nav li.level0 a.level-top span span.navborder-right:after { 
    border-bottom: 20px solid blue; 
    } 

(顏色只是用於調試,應完成後匹配導航背景)

並不如預期的結果:http://jsfiddle.net/9brsR/6/

span.navborder-left和span.navborder-right的邊界與居中的三角形元素有間隙。

任何人都有一個線索如何修復css有這樣的事情:http://puu.sh/7jMEe.png

+0

我已經分享了一個工作演示。它能爲您提供幫助嗎? –

+0

我更新了這裏的小提琴:http://jsfiddle.net/9brsR/8/ 這表明主要部分工作(背景是灰色的),但我無法正確填補**空白** (邊框顏色)與該CSS和/或HTML紅色。 – noojii

回答

2

這一個有點複雜,但有一些僞元素可以管理它。

Codepen Demo

CSS

* { 
    margin: 0; 
    padding: 0; 
    -webkit-box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    box-sizing: border-box; 
} 

ul, li { 
    padding: 0; 
    list-style: none; 
} 

ul { 
    text-align: center; 
    margin-top:15px; 
} 

li { 
    display: inline-block; 
    background-color: red; 
    font-size:0; 
    position: relative; 
} 

a { 
    display: block; 
    text-decoration: none; 
    font-size:1rem; 
    color:white; 
    padding: 1rem 2rem; 
    position: relative; 
} 

li:before, 
li:after { 
    position: absolute; 
    content:""; 
    top:100%; 
    width:calc(50% - 12px); /* allows to width of triangle*/ 
    height:12px; 
    background-color: red; 
} 

li:before{ 
    left:0; 
} 

li:after { 
    right:0; 
} 

a:before { 
    position: absolute; 
    content:""; 
    z-index:-1; /* hide behind link */ 
    border:12px solid red; 
    top:100%; 
    left:50%; 
    transform:translate(-50%, -50%); /* center the pseudo element and only show bottom half*/ 
} 

a.current:before { 
    border-bottom-color:transparent; /* our triangle */ 
} 

瀏覽器支持有限的,由於calc(IE9 +)和僞元素。

+0

偉大的答案,因爲保證金會做的伎倆,而不是變換:翻譯,這將使它IE8 +,對不對? a:之前{ ... margin-top:-12px; margin-left:-12px; } – noojii

+0

@nooji。是的,保證金將是後備,但它是更新的一個價值,所以它不那麼靈活。 IE8對僞元素的支持並不完美,但它在那裏(有點)。 –

0

通過賦予此屬性可以實現鼠標移過來的三角效果。這裏是工作演示。 http://jsbin.com/tevoliva/2/

----------- CSS代碼---------------

ul{list-style-type:none; margin:0; padding:0; background-color:#ef8913; } 
ul li {display:inline-block; padding:15px; position:relative;} 
ul li a{color:#ffffff; text-decoration:none;} 
li.active:after, 
li:hover::after { 
    content: ' '; 
    display: block; 
    position: absolute; 
    left: 50%; 
    bottom: 0px; 
    margin-left:-10px; 
    z-index: 99; 
    border-left: 12px solid transparent; 
border-right: 12px solid transparent; 
border-bottom: 12px solid white; 
} 

----- HTML代碼--- ----

<ul> 
<li><a href="#">Item 1</a></li> 
<li><a href="#">Item 2</a></li> 
<li><a href="#">Item 3</a></li> 
<li><a href="#">Item 4</a></li> 
<li class="triangle"><a href="#">Item 5</a></li> 
<li><a href="#">Item 6</a></li> 
</ul> 
+0

我想他想要一個透明的三角形不是白色的。 –

+0

啊,我看你的權利。 –

+0

在這種情況下,最好使用透明圖像。 –