パーセンテージ(%)およびピクセル(px)またはemでのボーダー半径


124

border-radiusにピクセル値またはem値を使用する場合、値が要素の最大の辺より大きい場合でも、エッジの半径は常に円弧または丸薬の形状になります。

パーセンテージを使用すると、エッジの半径は楕円形になり、要素の各辺の中央から始まり、楕円または楕円形になります。

ピクセル(px)境界の半径パーセント(%)ボーダー半径

border-radiusのピクセル値:

border-radiusのパーセント値:

パーセンテージで表した境界半径が、ピクセルまたはem値で設定された境界半径と同じように機能しないのはなぜですか?

回答:


180

ボーダー半径:

まず、border-radiusプロパティが2つの値を取ることを理解する必要があります。これらの値は、コーナーの形状を定義する4分の1楕円のX / Y軸上の半径です。
値の1つだけが設定されている場合、2番目の値は最初の値と等しくなります。したがって、border-radius: xと同等border-radius:x/x;です。

パーセント値

W3C仕様:CSS背景と境界モジュールレベル3のborder-radiusプロパティを参照すると、これはパーセンテージ値に関して読み取ることができます。

パーセンテージ:境界ボックスの対応する寸法を参照してください。

したがってborder-radius:50%;、楕円のラディを次のように定義します。

  • X軸の半径はコンテナの幅の 50%
  • Y軸の半径はコンテナの高さの 50%

ボーダー半径のパーセンテージ(%)で省略

Pixelとその他のユニット

使用つの値の境界の半径のパーセント以外(CM、ビューポートに関連ユニット、EM ...)を常に同じX / Yの半径を有する楕円をもたらすであろう。言い換えれば、円

設定border-radius:999px;すると、円の半径は999pxになります。ただし、曲線が重なり、円の半径が最小の辺の半分のサイズに減少する場合は別のルールが適用されます。したがって、あなたの例では、要素の高さの半分に等しい:50px。

ピクセル単位の境界線半径(px)で錠剤の形を作る


この例(固定サイズの要素を使用)では、pxとパーセンテージの両方で同じ結果を得ることができます。要素は230px x 100pxであるので、(両側の50%)border-radius: 50%;と同等border-radius:115px/50px;です。

div {
  display: inline-block;
  background: teal;
  width: 230px;
  height: 100px;
  padding: 40px 10px;
  box-sizing: border-box;
  font-family: courier;
  font-size: 0.8em;
  color: #fff;
}
.percent {
  border-radius: 50%;
}
.pixels {
  border-radius: 115px/50px;
}
<div class="percent">border-radius:50%;</div>
<div class="pixels">border-radius:115px/50px;</div>


6
すばらしい答えです。パーセント半径の値が幅と高さで別々に計算されるのは残念です。つまり、オブジェクトの縦横比を知らないと、オブジェクトのサイズに合わせて丸い角を取得できません。パーセンテージを大きい方のオブジェクトの寸法に適用するといいと思いませんか?
Chris Dennis

4
@ChrisDennisそれは真実ではありません。OPが言ったように、単純にを使用できますborder-radius: 999px;。そうすることで、円形の角を取得し、要素に合わせて確実に拡大縮小します
ガストファンデウォルマート

9
しかし、半円形の端をボックスにしたくないかもしれません。たとえば、ボックスの幅の10%、x半径に等しいy半径としてx半径を指定できるようにしたいと思います。
クリスデニス

4
ねえ、あなたはこのような他の自己回答投稿をしましたか?それらを読んでいただければ幸いです。
セド

3
しかし、実際にパーセンテージで機能するのは次のとおりですborder-radius: 50%/100%(Chrome 60 + 61でテスト済み)
拒否

6

最初の値を必要な%で除算するだけです。50%のボーダー半径が必要な場合は、次のように記述します。

border-radius: 25%/50%; 

または別の例:

border-radius: 15%/30%;

あなたは簡単にjsまたはSASSで数学を行うことができます。


1
幅の25%、高さの50%だけではありませんか?これは、X方向とY方向の高さの50%と同じではありません。
mpen

この構文は一体何なのです!できます!私はそれが存在することを知りませんでした、それは素晴らしいです!
Uri Kutner

それは単なる数学の仲間です
Cyber​​J

あなたがどんな数学をしてきたのかはわかりませんが、それは「単なる数学」ではありません。これは、算術除算とはまったく関係のない、border-radiusの特別に定義された省略形です。w3.org/TR/css-backgrounds-3/#border-radius
MIライト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.