2016-02-29 51 views
0

我需要divborder-radius根據div的尺寸進行更改 - 但不能變成橢圓形或形成藥丸形狀。例如,寬度,高度爲250,35的div應該有border-radius7px,而280,70中的一個應該有border-radius15px - 始終爲高度的20%,但始終使用圓形四捨五入。在網站的另一部分,我需要邊框半徑等於min(width, height)/5。我如何在沒有JavaScript的情況下完成此任務單個半徑`邊界半徑'作爲特定面的百分比

在任何情況下,寬度和高度都是任意的。我目前的解決方案是要求明確的border-radius元素不遵循默認大小,這將不允許調整大小。

.box { 
 
    width: 250px; 
 
    height: 35px; 
 
    border-radius: 7px; 
 
    background-color: black; 
 
    color: white; 
 
    line-height: 35px; 
 
    text-align: center; 
 
    margin: 5px auto; 
 
} 
 
.two { 
 
    width: 280px; 
 
    height: 70px; 
 
    border-radius: 14px; 
 
    line-height: 70px; 
 
} 
 
.three { 
 
    border-radius: 20%; 
 
} 
 
.four { 
 
    border-radius: 999px; 
 
} 
 
.five { 
 
    /* calculated from initial values, note that they are wrong with the larger size */ 
 
    border-radius: 2.8%/20%; 
 
    width: 280px; 
 
    height: 70px; 
 
    line-height: 70px; 
 
}
<div class="box one">yes</div> 
 
<div class="box two">yes</div> 
 
<div class="box three">no</div> 
 
<div class="box four">no</div> 
 
<div class="box five">no</div>

+0

你可能不得不使用全部8個邊界半徑值 - HTTPS:/ /developer.mozilla.org/en/docs/Web/CSS/border-radius –

+0

@Paulie_D:我的印象只有4 - 'border-left-left-radius'等。無論如何,作爲百分比的第一個值不會尊重其他維度,因爲我理解規範。 – Iiridayn

+0

保利的解決方案是最接近你可以沒有腳本來。 – LGSon

回答

1

短回答,你不能這樣做min(width, height)/5,但是使用calc()就像這個例子中的那樣,可能是一種儘可能接近你想要的而沒有腳本的方法嗎?

.box { 
 
    width: 250px; 
 
    height: 35px; 
 
    border-radius: calc(35px * 0.2)/calc(35px * 0.2); 
 
    background-color: black; 
 
    color: white; 
 
    line-height: 35px; 
 
    text-align: center; 
 
    margin: 5px auto; 
 
} 
 
.two { 
 
    width: 280px; 
 
    height: 70px; 
 
    border-radius: calc(70px * 0.2)/calc(70px * 0.2); 
 
    line-height: 70px; 
 
}
<div class="box one">yes</div> 
 
<div class="box two">yes</div>

border-radius可縮短至

border-radius: calc(35px * 0.2); 
border-radius: calc(70px * 0.2); 
+0

確實如此,它比'border-radius:7px;/* width/5 * /',這就是我所擁有的。我一直在避免使用'calc'作爲少量的跨瀏覽器兼容,但它似乎得到了足夠的支持。 – Iiridayn

+0

打算將其標記爲已接受 - 剛發現我正在使用70/5 = 15,這是不正確的。如果我使用'calc',我會保持正確,這樣可以減輕我們這樣做時向CSS預處理器的過渡。 – Iiridayn

+0

@Iiridayn如果您創建元素的動態,您也可以用內聯樣式覆蓋CSS值,在元素創建過程中,您可以在其中進行數學運算。 – LGSon

1

有8個邊境半徑值,在這裏使用的角落是一個省略號不是圓形(儘管它可以):

MDN Link

border-left-left-radius:1em 5em;

border-right-right-radius:1em 5em;

border-bottom-right-radius:1em 5em;

border-bottom-left-radius:1em 5em;

從你的問題來看,似乎該元件具有4:1的比例,所以我們可以在同一應用到邊界半徑

.box { 
    border-radius: 5%/20%; 
} 

.box { 
 
    width: 250px; 
 
    height: 35px; 
 
    border-radius: 5%/20%; 
 
    background-color: black; 
 
    color: white; 
 
    line-height: 35px; 
 
    text-align: center; 
 
    margin: 5px auto; 
 
} 
 
.two { 
 
    width: 280px; 
 
    height: 70px; 
 
} 
 
.three { 
 
    width: 300px; 
 
    height: 75px; 
 
} 
 
.four { 
 
    width: 400px; 
 
    height: 100px; 
 
}
<div class="box one">yes</div> 
 
<div class="box two">yes</div> 
 

 
<div class="box three">yes</div> 
 
<div class="box four">yes</div>

+0

我已經更新了小提琴,以說明爲什麼這種方法不起作用 - 元素沒有固定的4:1比例,並且可以動態地改變它的比例。 – Iiridayn

+0

然後答案是否定的....你需要javascript。 –