1. 程式人生 > >CSS3屬性之border-radius

CSS3屬性之border-radius

無論CSS那個版本,對於CSS製作圓角,想必大家都不會陌生,不過在CSS3到來之前,為了製作圓角是一件很麻煩的事情,記得曾經的一個方法是製作4個空標籤並設定圓角背景,最後分別定位到相應的位置,還有一種不需要圖片的方法是,用多個一畫素的塊級元素疊加,然後設定不同寬度或者高度形成圓角,這種方法相比第一種更加麻煩,但是沒有圖片。border-radius來了,小夥伴們驚呆了,各種犀利的圓角效果竟能如此簡單的寫出來,不用圖片,不用冗餘的程式碼。猛擊 這裡看奧運五環DEMO

屬性名稱:border-radius

取值:[ <length> | <percentage> ]{1,4} [ / [ <length> | <percentage> ]{1,4} ]?

說明 border-radius是一種縮寫的方法。如果“/”存在,則前面為水平半徑,後面為垂直半徑,如果沒有,則水平垂直半徑相等。如果只有一個值,則按照top-left、top-right、bottom-right、bottom-left的順序排列;有兩個值,則top-left和bottom-right取第一個值,top-right和bottom-left取第二個值;有三個值,則top-left取第一個值,top-right和bottom-left取第二個值,bottom-right取第三個值;有四個值,則全部相等。

相關屬性border-top-left-radius、border-top-right-radius、border-bottom-right-radius、border-bottom-left-radius

取值:[ <length> | <percentage> ] [ <length> | <percentage> ]?

說明第一個為水平半徑,第二個為垂直半徑,如果第二個省略則水平垂直半徑相等。如果其中一個為0,則垂直無圓角效果。如果值為百分比,則取值相對於盒模型,水平半徑取值相對於盒模型的寬度,垂直半徑相對於盒模型的高度。

這裡要特別說下,現在網上還有些資料說是要加瀏覽器的私有屬性,可能那些資料有些陳舊,可能有些是直接copy別人的,個人覺得,css3中的border-radius屬性就寫這篇文章時,已經完全沒必要加各種私有屬性,並且把bootstrap3.0轉sass的過程中,發現bt也是這麼做的。

一些程式碼

border-radius: 10px

等價於:
border-top-left-radius: 10px
border-top-right-radius: 10px
border-bottom-left-radius: 10px
border-bottom-right-radius: 10px
border-radius: 10px 20px 5px / 30px 15px

等價於:
border-top-left-radius: 10px 30px
border-top-right-radius: 20px 15px
border-bottom-left-radius: 5px 30px
border-bottom-right-radius: 20px 15px

一些DEMO

1. 當radius的值大於作於元素的寬度或者高度時,則radius取元素的寬度或者高度。

width: 100px
height: 100px
background: green
border-top-right-radius: 150px

等價於:
width: 100px
height: 100px
background: green
border-top-right-radius: 100px

效果如下:

2. 當存在border時,如果radius的值小於或者等於border的width值,只有border會有圓角效果

width: 100px
height: 100px
background: green
border: 30px solid blue
border-radius: 30px

效果如下(邊框內的區域四個角無圓角效果):

如果radius的值大於border的width值時

width: 100px
height: 100px
background: green
border: 30px solid blue
border-radius: 40px

效果如下:

4. 當適用於table元素時,table的border-collapse屬性為collapse時並且border的width不為0時,radius對border沒有效果,而對table的border區域以內的部分有效果,th、td效果同table

.table_1
  background: green
  width: 300px
  height: 100px
  border-radius: 50px
  border: 5px solid blue
  text-align: center
    
.table_2
  width: 300px
  height: 100px
  text-align: center
  td
    background: green
    border-radius: 50px
    border: 5px solid blue

效果如下:

在一般情況下,table的border-collapse屬性一般都會在reset.css中被置為collapse,那如果需要table有邊框並且有圓角怎麼辦呢? 可以把table的border設定為0並且給之外面加一層div.table_radius,然後設定radius就可以了,這個值針對table哦,td及th無法解決。

.table_radius
  width: 300px
  height: 100px
  border: 5px solid blue
  border-radius: 50px
  text-align: center
  line-height: 100px
  overflow: hidden
.table_1
  width: 100%
  height: 100%
  background: green

效果如下:

1. Android Browser 2.3 does not support % value for border-radius.(做手機端的時候這個bug親身經歷過,目前安卓2.3還有一定的比例,所以建議別用%)

2. Border-radius does not work on fieldset elements in IE9.

3. The stock browser on the Samsung Galaxy S4 with Android 4.2 does not support the "border-radius" shorthand property but does support the long-hand properties for each corner like "border-top-left-radius".