等間隔の破線の円を作成するにはどうすればよいですか?


16

CSSで点線の円を作りたかったので、以下の手順で作成しました。

この処理で破線の円を表示することはできましたが、破線の終点と始点の間隔が狭くなり、間隔が均一でなくなりました。

.c {
  width: 500px;
  height: 500px;
  border-width: 15px;
  border-style: dashed;
  border-radius: 600px;
}
<div class="c"></div>

ギャップを均一にする方法はありますか?ダッシュ間のギャップも制御できますか?

CSSだけではそれが不可能な場合は、JavaScriptなどを使用することを検討しています。


4
価値があるのは、コードに問題があると思われるのはChrome(と、おそらくクローン)だけのようです。
アルバロゴンサレス

3
うん。私にはよく見える
イチゴ

回答:


14

これは、conic-gradient()ダッシュの数と間隔を簡単に制御できるソリューションの最適化バージョンです

十分な透明性を確保するために mask

等間隔のCSS破線円

物事をおもしろくするために、ダッシュのより複雑な色分けを検討することもできます。

円錐グラデーションとマスクを使用した透明なCSSダッシュ

コンテンツのマスキングを回避するために、疑似要素にマスク/バックグラウンドをより適切に適用するために、コンテンツを確実に含めることができます。


同様の結果を達成するためのより多くのCSSアイデアを得るための関連質問: CSSのみの円グラフ-スライス間の間隔/パディングを追加する方法?。サポートされている方法は他にもありますがconic-gradient()(実際にはFirefoxでは機能しません)、1つの要素しか必要としない上記のソリューションとは異なり、多くのコードを使用する必要があります。


SVGを使用する場合は、間隔が均一であることを確認するための計算も必要です。

svg {
  width:200px;
}
<svg viewBox="-3 -3 106 106">
  <!-- 
    The circumference of the circle is 2*PI*R ~ 314.16
    if we want N dashed we use d=314.16/N
    For N = 20 we have d=15.71
    For a gap of 5 we will have "10.71,5" (d - gap,gap)
  -->
  <circle cx="50" cy="50" r="50" 
    stroke-dasharray="10.71, 5" 
    fill="transparent" 
    stroke="black" 
    stroke-width="5" />
</svg>

CSS変数を使用すると簡単にできますが、すべてのブラウザーでサポートされているわけではありません(実際にはFirefoxでは機能しません)。

SVGの均一なスペースダッシュ

SVGを背景として簡単に使用して、物事をより柔軟にすることもできます。

背景として使用する場合は、値を手動で設定する必要があるため、毎回異なる背景が必要になります。SVGをマスクとして使用することによってのみ、色を簡単に変更できます。

均一なスペースのSVG破線ボーダー


1
これらはChromeで見栄えを良くするための興味深い方法ですが、Firefoxで機能するのは最初の基本的なSVGバージョンのみです。特に、Firefox(Nightlyバージョンを含む)はconic-gradient()またはをサポートしていませんrepeating-conic-gradient()。したがって、これらは将来的に実行可能なアプローチとなる可能性がありますが、クロスブラウザ機能が必要な場合、現時点では使用できません。
マキエン

1
質問OPのコードはFirefoxでは正しく機能します(つまり、それらの問題はFirefoxには存在しません)がChromeでは機能するので、少なくともChrome(+クローン)とFirefoxの違いを調査することをお勧めします。両方で機能するコードを提供する(または、少なくともブラウザー間でサポートされている現在使用できるものを明示的に示す)
マキエン

@Makyen OPコードはFirefoxで正常に機能しますが、基本的なボーダーではギャップを制御できないため、ギャップ部分の制御に集中しようとしています。着色部分も追加しています。私はそれを一般的な答えにしようとしています。グラデーションに関しては、はいFirefoxはサポートを欠いていますが、まもなくリリースされると確信しています(彼らがこれに遅れていることに私はまだ驚いています。Chromeはほぼ2年以来これをサポートしていました)。他のサポートされている方法について別の質問にリンクしましたが、それほど明確ではありませんでした。更新します。
Temani Afif

3

stroke-dasharraySVGで使用します。

svg {
  width: 20vmax;
  height: 20vmax;
}
<svg viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="48" stroke-dasharray="10, 4" fill="transparent" stroke="purple" stroke-width="5" />
</svg>

またはradial-gradient()repeating-conic-gradient()Firefoxなしで、関数を使用できます。

.c {
  width: 20vmax;
  height: 20vmax;
  background-image: radial-gradient(#fff 68%, transparent 68% 70%, #fff 70%),
    repeating-conic-gradient(#000 0% 3%, transparent 3% 5%);
}
<div class="c"></div>


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