1. 程式人生 > >三種純CSS實現三角形的方法

三種純CSS實現三角形的方法

原文:http://www.feelcss.com/three-pure-css-to-achieve-the-triangle-method.html

純 CSS 做三角形的方法,目前我知道三種,分別是利用 border 屬性,“◆”字元,和 CSS3 transfrom 做 45 度旋轉實現的,CSS3的方法是在碼頭哥的部落格上學到的,很感謝你們的分享,前端有你們更精彩!

1.利用 border 屬性實現三角形

這個原理很簡單,我我們先看下面的圖,這是一個邊框為 20px 的 div,看他的邊框,是個梯形,變化會從這裡開始。

div-border-20

CSS:

.triangle{
    width:30px
; height:30px; border-width:20px; border-style:solid; border-color:#e66161 #f3bb5b #94e24f #85bfda; }

好的,現在我把它的寬和高都設為 0,看看有什麼變化。

div-w-h-0

四個邊框都變成三角形了,現在我再把它的左右和下邊框的顏色都設成透明或和背景顏色相同的顏色,就出來我們想要的三角形了,推薦把邊框設定成透明,這樣拓展性更好。

注:IE6下把邊框設定成 transparent 時會出現黑影,並不會透明,把 border-style 設定成 dashed 可以解決。

border-t-n

CSS:

.triangle{
    width:0;
    height:0;
    border-width:20px;
    border-style:solid dashed dashed dashed;
    border-color:#e66161 transparent transparent transparent;
}

如果我們想實現下圖的效果該怎麼辦呢?很簡單,做兩個小三角,一個是背景色,一個是邊框色,然後利用定位重疊在一起,記住他們的定位要相差一個畫素。

boder-triangle

HTML:

<div class="message-box">
  <span>我是利用 border 屬性實現的</span
> <div class="triangle-border tb-border"></div> <div class="triangle-border tb-background"></div> </div>

CSS:

.message-box {
    position:relative;
    width:240px;
    height:60px;
    line-height:60px;
    background:#E9FBE4;
    box-shadow:1px 2px 3px #E9FBE4;
    border:1px solid #C9E9C0;
    border-radius:4px;
    text-align:center;
    color:#0C7823;
}
.triangle-border {
    position:absolute;
    left:30px;
    overflow:hidden;
    width:0;
    height:0;
    border-width:10px;
    border-style:solid dashed dashed dashed;
}
.tb-border {
    bottom:-20px;
    border-color:#C9E9C0 transparent transparent transparent;
}
.tb-background {
    bottom:-19px;
    border-color:#E9FBE4 transparent transparent transparent;
}

2.利用”◆“字元實現三角形

字元實現也是要用兩個字元用絕對定位去模擬,只是它不能模擬出三角形,它是個菱形,然後露出半個頭,底色又和背景色一樣,看上去就像是個三角形了。。

注意:它的大小是由 font-size 決定的,width 和 height 都決定不了,但最好還是加上,這樣各個瀏覽器去生成這個字元的時候能保持一致,我們去寫絕對定位的時候就不用寫 hack 了。

HTML:

<div class="message-box">
  <span>我是利用 ◆ 字元實現的</span>
  <div class="triangle-character tc-border"></div>
  <div class="triangle-character tc-background"></div>
</div>

CSS:

.message-box {
    position:relative;
    width:240px;
    height:60px;
    line-height:60px;
    background:#E9FBE4;
    box-shadow:1px 2px 3px #E9FBE4;
    border:1px solid #C9E9C0;
    border-radius:4px;
    text-align:center;
    color:#0C7823;
}
.triangle-character {
    position:absolute;
    left:30px;
    overflow:hidden;
    width:26px;
    height:26px;
    font:normal 26px "宋體"; // 
}
.tc-border {
    bottom:-13px;
    color:#C9E9C0;
}
.tc-background {
    bottom:-12px;
    color:#E9FBE4;
}

3.利用 CSS3 transfrom 旋轉 45 度實現三角形

先建立一個帶 border 的 div ,設定好背景色和相鄰的兩個邊框的顏色,然後選擇 45 度,聽著很簡單是嗎,但是利用 IE 的 matrix filter 實現 css3 transfrom 的相容方案很頭大,我是沒看懂,有看懂的兄弟情賜教啊:)

注:IE6下無效。

triangle-transform-45

HTML:

<div class="message-box">
  <span>我是利用 css transfrom 屬性字元實現的</span>
  <div class="triangle-css3 transform ie-transform-filter"></div>
</div>

CSS:

.message-box {
    position:relative;
    width:240px;
    height:60px;
    line-height:60px;
    background:#E9FBE4;
    box-shadow:1px 2px 3px #E9FBE4;
    border:1px solid #C9E9C0;
    border-radius:4px;
    text-align:center;
    color:#0C7823;
}
.triangle-css3 {
    position:absolute;
    bottom:-8px;
    bottom:-6px;
    left:30px;
    overflow:hidden;
    width:13px;
    height:13px;
    background:#E9FBE4;
    border-bottom:1px solid #C9E9C0;
    border-right:1px solid #C9E9C0;
}
.transform {
    -webkit-transform:rotate(45deg);
    -moz-transform:rotate(45deg);
    -o-transform:rotate(45deg);
    transform:rotate(45deg);
}
/*ie7-9*/
.ie-transform-filter {
    -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(
        M11=0.7071067811865475,
        M12=-0.7071067811865477,
        M21=0.7071067811865477,
        M22=0.7071067811865475,
    SizingMethod='auto expand')";
    filter: progid:DXImageTransform.Microsoft.Matrix(
        M11=0.7071067811865475,
        M12=-0.7071067811865477,
        M21=0.7071067811865477,
        M22=0.7071067811865475,
    SizingMethod='auto expand');
}