web-dev-qa-db-ja.com

CSS3で円弧の形を作る方法は?

私は純粋なCSSで次の外観を実現しようとしています:

enter image description here

それぞれの白い弧が異なる要素である場合、たとえばスパン。 cssで丸い形が作れることは知っていますが、どうすれば弧状に変えることができますか?

16
Ilja

次のHTMLを使用します。

<div id="arcs">
    <div>
        <div>
            <div>
                <div></div>
            </div>
        </div>
    </div>
</div>

そしてCSS:

#arcs div {
    border: 2px solid #000; /* the 'strokes' of the arc */
    display: inline-block;
    min-width: 4em; /* the width of the innermost element */
    min-height: 4em; /* the height of the innermost element */
    padding: 0.5em; /* the spacing between each arc */
    border-radius: 50%; /* for making the elements 'round' */
    border-top-color: transparent; /* hiding the top border */
    border-bottom-color: transparent;
}
#arcs div {
  border: 2px solid #000;
  /* the 'strokes' of the arc */
  display: inline-block;
  min-width: 4em;
  /* the width of the innermost element */
  min-height: 4em;
  /* the height of the innermost element */
  padding: 0.5em;
  /* the spacing between each arc */
  border-radius: 50%;
  /* for making the elements 'round' */
  border-top-color: transparent;
  /* hiding the top border */
  border-bottom-color: transparent;
}
<div id="arcs">
  <div>
    <div>
      <div>
        <div></div>
      </div>
    </div>
  </div>
</div>

JS Fiddle demo

SVGアプローチ:

SVGを使用してそのような形状を描画することをお勧めします。

以下の例では、SVGのpath要素を使用して円弧を描画しました。この要素は、形状構造を記述するために単一の属性dを取ります。 d属性は、いくつかのコマンドと対応する必要なパラメーターを取ります。

私は2つのパスコマンドのみを使用しました:

  • Mコマンドは、ペンを特定のポイントに移動するために使用されます。このコマンドは2つのパラメーターxyを取り、通常、パスはこのコマンドで始まります。基本的に、図面の開始点を定義します。
  • 曲線と円弧を描画するために使用されるAコマンド。このコマンドは、円弧/曲線を描画するために7つのパラメータを取ります。このコマンドの詳細な説明は ここ です。

スクリーンショット:

Image Showing arcs

役立つリソース:

実例:

svg {
  width: 33%;
  height: auto;
}
<svg viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">

  <defs>
    <g id="arcs" fill="none" stroke="#fcfcfc">
      <path d="M80,80 A100,100,0, 0,0 80,220" stroke-width="4" />
      <path d="M90,90 A85,85,0, 0,0 90,210" stroke-width="3.5" />
      <path d="M100,100 A70,70,0, 0,0 100,200" stroke-width="3" />
      <path d="M110,110 A55,55,0, 0,0 110,190" stroke-width="2.5" />
    </g>
  </defs>
  
  <rect x="0" y="0" width="300" height="300" fill="#373737" />

  <use xlink:href="#arcs" />
  <use xlink:href="#arcs" transform="translate(300,300) rotate(180)" />
  
</svg>
6
Mohammad Usman