CSSを使用して丸みを帯びたコーナーを作成する[終了]


253

CSSを使用して角を丸くするにはどうすればよいですか?


ここだけCSSを使用した丸みを帯びた角を作る方法についての良いビデオだ:< sampsonvideos.com/video.php?video=12 >
スタン

ヤフー開発者ネットワークからの角の丸い技術に関する記事 -2007年から。YUIペインに角の丸い(画像が必要)を追加する方法l。
Simon_Weaver 2009年

3
200以上のいいね!は建設的だと言います。
SteveCav 2015

1
これは、特にコミュニティウィキになっているため、再開するに値する価値のある標準的な質問だと思います。
DavidRR

それは、Web上の他の多くの場所で簡単に見つけられる情報であることを除いて。SOが既存のリソースを複製する必要はありません。
ジムギャリソン2015年

回答:


102

CSS3が導入されて以来、CSSを使用して角を丸く追加する最良の方法は、border-radiusプロパティを使用することです。プロパティの仕様読む、MDNに関する有用な実装情報を取得できます

実装されいない ブラウザー(Chrome pre-v4、Firefox pre-v4、IE8、Opera pre-v10.5、Safari pre-v5)を使用している場合、以下のリンクでさまざまなアプローチの詳細をご覧いただけます。あなたのサイトとコーディングスタイルに合ったものを見つけて、それを使ってください。 border-radius

  1. CSSデザイン:カスタムコーナーとボーダーの作成
  2. CSS角丸 '丸め'
  3. CSSを使用した25の角丸テクニック

1
DD_roundiesが最適なソリューションであることがわかりました:dillerdesign.com/experiment/DD_roundies/#nogo
vsync 2009

1
@vsyncがサポートされていないIE8 dillerdesign.com/experiment/DD_roundies/#supported_browsers
Vyas

5
あなたは(SOなど)CSS3に行くことに決める場合に役立ちリンクborder-radius.com(別の参照css3.info/border-radius-apple-vs-mozilla
mickthompson


80

私は初期のスタックオーバーフローの作成でにこれを見て、見つけることができませんでした任意の私は下水道を歩いような感じに私を残していなかった丸みを帯びた角を作成する方法を。

CSS3は最終的

border-radius:

それがまさにあなたがそれを機能させたい方法です。これはSafariとFirefoxの最新バージョンでは問題なく動作しますが、IE7(および私はIE8では考えていません)またはOperaではまったく動作しません。

その間、それはずっとハックです。現在、IE7、FF2 / 3、Safari3、およびOpera 9.5でこれを行うための最もクリーンな方法が他の人々の考えだと思うのを聞きたいです。


5
「...下水道の中を歩いたの?」それは少し厳しいです、ジェフ。答えは「場合によります」です。単色、グラデーション、またはドロップシャドウボックス?垂直方向、水平方向、またはその両方に拡張する必要がありますか?さまざまな要件に対するさまざまなソリューション。要件が洗練されていればいるほど、下水道に似たソリューションになります。
カールカメラ

28
この方法を使用することをお勧めします。ブラウザがそれをサポートしていない場合、誰が気にしますか?
Sam Murray-Sutton、

11
Twitterは、丸みを帯びたコーナー機能を、IEユーザー向けにWebサイトの尖った角にダウングレードします。たいしたことではありません。
ランスフィッシャー

5
私は間違いなくこのアプローチを使用します-物事をそのまま処理しましょう。誰かがブラウザ(IEなど)を使用していない場合、角の丸い角が角張っていると見る価値があります。:)
thSoft 2010

1
回答者(ジェフ)が最善の方法であると考えていることを説明していないので、私はこの回答に投票したいと思います。
allyourcode

27

ブラウザがサポートしていない場合、通常はcssだけで角が丸くなり、コンテンツが平らな角で表示されます。丸みを帯びた角がサイトにとってそれほど重要でない場合は、以下の線を使用できます。

同じ半径のすべてのコーナーを使用する場合、これは簡単な方法です。

.my_rounded_corners{
   -webkit-border-radius: 5px;
           border-radius: 5px;
}

しかし、すべてのコーナーを制御したい場合、これは良いことです:

.my_rounded_corners{
    border: 1px solid #ccc;

    /* each value for each corner clockwise starting from top left */
    -webkit-border-radius: 10px 3px 0 20px;
            border-radius: 10px 3px 0 20px;
}

各セットに表示されるように、ブラウザー固有のスタイルがあり、4行目ではこれにより標準的な方法で宣言します。将来的に他の人(うまくいけばIEも)がスタイルを用意できるように機能を実装することを決定したと想定します。

他の回答で述べたように、これはFirefox、Safari、Camino、Chromeで美しく機能します。


16

IEでコーナーを作成することに興味がある場合、これは役に立つかもしれません-http://css3pie.com/


これは、他のブラウザーの-mozなどのコーナーを定義するとともに、私にとっては完全に機能しました。
bharal 2012年

13

背景画像の使用をお勧めします。他の方法はあまり良くありません:アンチエイリアスと意味のないマークアップはありません。ここはJavaScriptを使用する場所ではありません。


1
javascriptは間違いなく失敗の範囲が最も広く、私の経験ではちらつきがあります。私が試したすべてのjqueryプラグインには、何らかの予期しない副作用があります
Simon_Weaver '08 / 07/23

CurvyCorners(curvycorners.net)およびShadedBorder(ruzee.com/blog/shadedborder、アンチエイリアスをサポートしています。これらの追加のマークアップ以外の使用方法もあります。クラスを使用して実装すると、マークアップがクラス化された要素に動的に追加されます。そうは言っても、私がそれらを使用すればするほど、あなたは正しいように見えます...それらはプロトタイピングには役立ちますが、DOMに多くの余分な重みを追加します。自分の好みに合わせて調整したので、画像に変換する予定です。
Ben Regenspan、2009

1
この回答には、誰かが回答者が考えていることを実装するのに十分な詳細が含まれていません。
allyourcode

11

Brajeshwarが言ったように:border-radiuscss3セレクターの使用。今では、あなたは適用することができます-moz-border-radiusし、-webkit-border-radiusそれぞれ、MozillaおよびWebkitのベースのブラウザのために。

では、Internet Explorerはどうなりますか?Microsoftには、Internet Explorerにいくつかの追加機能を追加し、より多くのスキルを得るための多くの動作があります。

ここでは:.htc取得するための行動のファイルround-cornersからborder-radius、あなたのCSSの値。例えば。

div.box {
    background-color: yellow; 
    border: 1px solid red; 
    border-radius: 5px; 
    behavior: url(corners.htc);
}

もちろん、動作セレクターは有効なセレクターではありませんが、条件付きコメントを使用して別のcssファイルに配置できます(IEのみ)。

行動HTCファイル


4
多くの人がCSS検証に関心を持っている理由を理解できませんでした。何も問題ではなく、DOM検証のみが問題です。
vsync 2009

これは進むべき道のようです。
Matthew Olenik、2010

3
動作ファイルとは何かの簡単な説明を追加できますか?この質問の答えを探している人は、おそらくそれらに精通していないと思います。
allyourcode

2
動作ファイルのリンクが機能していないようです
evanmcd 2010

9

CSS、3のサポートが新しいバージョンのFirefox、Safari、Chromeに実装されているので、「ボーダー半径」を確認することも役立ちます。

-moz-border-radius: 10px;  
-webkit-border-radius: 10px;  
border-radius: 10px;

他のCSS省略表現と同様に、上記も拡張形式で記述できるため、左上、右上などに異なる境界半径を設定できます。

-moz-border-radius-topleft: 10px;  
-moz-border-radius-topright: 7px;  
-moz-border-radius-bottomleft: 5px;  
-moz-border-radius-bottomright: 3px;  
-webkit-border-top-right-radius: 10px;  
-webkit-border-top-left-radius: 7px;  
-webkit-border-bottom-left-radius: 5px;  
-webkit-border-bottom-right-radius: 3px;

1
-webkit-border-bottom-rightright-radius:3px;の構文 および-webkit-border-top-rightright-radius:10px; -webkit-border-bottom-right-radius:3pxおよび-webkit-border-top-right-radius:10px;を読んでください。
Wolfr、2009年

8

jQueryは、これを個人的に扱う方法です。cssのサポートは最小限であり、画像は面倒であり、jQueryで角を丸くしたい要素を選択できるようにするには、他の人が疑う人もいるでしょうが、私には完全に理にかなっています。私が最近プロジェクトで使用しているプラ​​グインがあります:http : //plugins.jquery.com/project/jquery-roundcorners-canvas


@mcaulay-ボックスに影を付けることもできますか?
nickytonline 2009

jqueryのroundcornersはIE 8をサポートしていません
evanmcd

6

JavaScriptの方法は常に存在しますが(他の回答を参照)、それは純粋にスタイリングであるため、これを実現するためにクライアントスクリプトを使用することには少し反対しています。

私は(制限はありますが)優先する方法は、CSSを使用してボックスの4つのコーナーに配置する4つの角の丸い画像を使用することです。

<div class="Rounded">
  <!-- content -->
  <div class="RoundedCorner RoundedCorner-TopLeft"></div>
  <div class="RoundedCorner RoundedCorner-TopRight"></div>
  <div class="RoundedCorner RoundedCorner-BottomRight"></div>
  <div class="RoundedCorner RoundedCorner-BottomLeft"></div>
</div>

/********************************
* Rounded styling
********************************/

.Rounded {
  position: relative;
}

.Rounded .RoundedCorner {
  position: absolute;
  background-image: url('SpriteSheet.png');
  background-repeat: no-repeat;
  overflow: hidden;

  /* Size of the rounded corner images */
  height: 5px;
  width: 5px;
}

.Rounded .RoundedCorner-TopLeft {
  top: 0;
  left: 0;

  /* No background position change (or maybe depending on your sprite sheet) */
}

.Rounded .RoundedCorner-TopRight {
  top: 0;
  right: 0;

  /* Move the sprite sheet to show the appropriate image */
  background-position: -5px 0;
}

/* Hack for IE6 */
* html .Rounded .RoundedCorner-TopRight {
  right: -1px;
}

.Rounded .RoundedCorner-BottomLeft {
  bottom: 0;
  left: 0;

  /* Move the sprite sheet to show the appropriate image */
  background-position: 0 -5px;
}

/* Hack for IE6 */
* html .Rounded .RoundedCorner-BottomLeft {
  bottom: -20px;
}

.Rounded .RoundedCorner-BottomRight {
  bottom: 0;
  right: 0;

  /* Move the sprite sheet to show the appropriate image */
  background-position: -5px -5px;
}

/* Hack for IE6 */
* html .Rounded .RoundedCorner-BottomRight {
  bottom: -20px;
  right: -1px;
}

前述のように、制限があります(丸みを帯びたボックスの背景は無地である必要があります。そうしないと、コーナーが背景と一致しません)。それ以外の場合は非常にうまく機能します。


更新:スプライトシートを使用してインプリメンテーションを改善しました。


CSSスプライトを使用してすべてを簡略化できます。おそらく答えを更新します。
mbillard 2009

そこで、スプライトシートを使用するようにコードを更新しました。
mbillard 2009


5

Safari、Chrome、Firefox> 2、IE> 8、およびKonquerer(そしておそらく他の人)では、border-radiusプロパティを使用してCSSで実行できます。正式にはまだ仕様の一部ではないため、ベンダー固有のプレフィックスを使用してください...

#round-my-corners-please {
    -webkit-border-radius: 20px;
    -moz-border-radius: 20px;
    border-radius: 20px;
}

JavaScriptソリューションは通常、div丸みを帯びた外観にするために小さなsのヒープを追加するか、境界線と負のマージンを使用して1pxのノッチのあるコーナーを作成します。IEでSVGを利用する場合もあります。

IMO、CSSの方が簡単です。CSSの方法はサポートされていないブラウザーでは簡単に低下します。もちろん、これは、クライアントがIE <9などのサポートされていないブラウザーでそれらを強制しない場合のみです。


5

これが私が最近行ったHTML / js / cssソリューションです。IEで絶対位置を指定すると1ピクセルの丸めエラーが発生するため、コンテナーのピクセル数の幅を偶数にする必要がありますが、かなりきれいです。

HTML:

<div class="s">Content</div>

jQuery:

$("div.s")
.wrapInner("<div class='s-iwrap'><div class='s-iwrap2'>")
.prepend('<div class="tr"/><div class="tl"/><div class="br"/><div class="bl"/>');

CSS:

/*rounded corner orange box - no title*/
.s {
    position: relative;
    margin: 0 auto 15px;
    zoom: 1;
}

.s-iwrap {
    border: 1px solid #FF9933;
}

.s-iwrap2 {
    margin: 12px;
}

.s .br,.s .bl, .s .tl, .s .tr {
    background: url(css/images/orange_corners_sprite.png) no-repeat;
    line-height: 1px;
    font-size: 1px;
    width: 9px;
    height: 9px;
    position: absolute;
}

.s .br {
    bottom: 0;
    right: 0;
    background-position: bottom right;
}

.s .bl {
    bottom: 0;
    left: 0;
    background-position: bottom left;
}

.s .tl {
    top: 0;
    left: 0;
    background-position: top left;
}

.s .tr {
    top: 0;
    right: 0;
    background-position: top right;
}

画像の幅はわずか18ピクセルで、4つのコーナーすべてがパックされています。円のように見えます。

注:2番目の内部ラッパーは必要ありませんが、段落と見出しのマージンがマージンの折りたたみを維持できるように、内部ラッパーにマージンを使用するのが好きです。jqueryをスキップして、内部ラッパーをHTMLに配置することもできます。


3

丸みを帯びたコーナーを機能させることがいかに複雑かを示すものとして、Yahooでさえも推奨されていません(最初の箇条書きを参照)。確かに、彼らはその記事で1ピクセルの丸みを帯びた角について話しているだけですが、専門知識を持つ企業でさえ、ほとんどの時間、彼らを働かせるには余りにも苦痛である結論付けているのを見るのは興味深いことです。

あなたのデザインがそれらなしで生き残ることができるなら、それは最も簡単な解決策です。


あなたが話しているYUIページの部分を見つけたいのですが、私がこれまで見てきた箇条書きのいずれも、角を丸くしようとすることは悪い考えだとは言いません。より具体的にできますか?角の丸い角を使用する場合に幅を異なる方法で設定する方法についての話を話している部分を見つけましたが、それを落胆させません。
allyourcode

@allyourcode-もう見えない。私はこの投稿をしたことを覚えていますが、彼らが言ったことを正確にはしていません。ただし、上記の2番目のリンクでは、1ピクセルの丸みを帯びた角のIEサポートの削除について言及しているようです。しかし、いずれにしても、この投稿は1ピクセルのコーナーについてしか話していなかったので、ほんの少しの舌でした。これは、時間の途方もない無駄だと思います。私がこれを書いたとき、私は一般的に角が丸くてイライラしていて、角の画像に落ち着いたと書いたときのことを覚えています
Simon_Weaver

2

確かに、幅が固定されていれば、CSSを使用するのは非常に簡単で、不快なことも面倒なこともありません。物事が途切れるのは、両方向にスケーリングする必要があるときです。いくつかのソリューションは、それを実現するために互いの上に積み重ねられた驚異的な量のdivを持っています。

私の解決策は、丸みを帯びたコーナーを使用する場合(当面の間)、固定幅にする必要があることをデザイナーに指示することです。デザイナーは丸みを帯びた角が大好きです(私もそうです)ので、これは妥当な妥協案だと思います。


2

Ruzee Bordersは、すべての主要ブラウザー(Firefox 2/3、Chrome、Safari 3、IE6 / 7/8)で機能する、JavaScriptベースのアンチエイリアス処理された角丸ソリューションであり、また、丸みのある要素と親要素の両方に背景画像が含まれています。ボーダー、シャドウ、グローも行います。

新しいRUZEE.ShadedBorderも別のオプションですが、CSSからスタイル情報を取得するためのサポートがありません。


1

border-radiusソリューションを使用する場合は、safari / chrome / FFで動作するようにするcssを生成するこの素晴らしいWebサイトがあります。

とにかく、あなたのデザインは丸みを帯びた角に依存すべきではないと私は思います、そしてあなたがツイッターを見れば、彼らはIEとオペラユーザーにF ****と言うだけです。角を丸くするのはいいことです。個人的には、IEを使用しないクールなユーザーのためにこれを保持しても問題ありません。

もちろん、それはクライアントの意見ではありません。ここにリンクがあります:http : //border-radius.com/



1

「最良の」方法はありません。あなたのために働く方法とそうでない方法があります。そうは言っても、CSS + Imageベースの滑らかなラウンドコーナーテクニックの作成に関する記事をここに投稿しました。

CSSと画像を使用した角の丸いボックス-パート2

このトリックの概要は、ネストされたDIVと背景画像の繰り返しと配置を使用することです。固定幅のレイアウト(固定幅の伸縮可能な高さ)の場合、3つのDIVと3つの画像が必要です。滑らかな幅のレイアウト(伸縮可能な幅と高さ)の場合、9つのDIVと9つの画像が必要です。複雑すぎると考える人もいますが、私見はこれまでで最も近いソリューションです。ハッキング、JavaScriptはありません。


0

しばらく前にブログ記事を書いたので、詳しくはこちらをご覧ください

<div class="item_with_border">
    <div class="border_top_left"></div>
    <div class="border_top_right"></div>
    <div class="border_bottom_left"></div>
    <div class="border_bottom_right"></div>
    This is the text that is displayed
</div>

<style>
    div.item_with_border
    {
        border: 1px solid #FFF;
        postion: relative;
    }
    div.item_with_border > div.border_top_left
    {
        background-image: url(topleft.png);
        position: absolute;
        top: -1px;
        left: -1px;     
        width: 30px;
        height: 30px;
        z-index: 2;
    }
    div.item_with_border > div.border_top_right
    {
        background-image: url(topright.png);
        position: absolute;
        top: -1px;
        right: -1px;        
        width: 30px;
        height: 30px;
        z-index: 2;
    }
    div.item_with_border > div.border_bottom_left
    {
        background-image: url(bottomleft.png);
        position: absolute;
        bottom: -1px;
        left: -1px;     
        width: 30px;
        height: 30px;
        z-index: 2;
    }
    div.item_with_border > div.border_bottom_right
    {
        background-image: url(bottomright.png);
        position: absolute;
        bottom: -1px;
        right: -1px;        
        width: 30px;
        height: 30px;
        z-index: 2;
    }   
</style>

それはかなりうまくいきます。JavaScriptは必要ありません。CSSとHTMLが必要です。他のものと干渉する最小限のHTMLで。これはMonoが投稿したものと非常によく似ていますが、IE 6固有のハックが含まれておらず、確認したところ、まったく機能していないようです。また、角の近くにあるテキストをブロックしないように、各角の画像の内側部分を透明にすることもできます。外側の部分は透明であってはならず、丸みのないdivの境界を覆うことができます。

また、CSS3がborder-radiusで広くサポートされると、それが丸みを帯びた角を作るための公式の最良の方法になります。


0

CSSを使用しないでください。jQueryは何度も言及されています。要素の背景と境界を完全に制御する必要がある場合は、jQuery Background Canvas Pluginを試してみてください。HTML5 Canvas要素を背景に配置し、必要なすべての背景または境界線を描画できるようにします。丸みを帯びたコーナー、グラデーションなど。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.