HTMLでティアドロップを作成するにはどうすればよいですか?


222

このような形状を作成してWebページに表示するにはどうすればよいですか?

スケーリングでぼやけてしまうので、画像は 使いたくない

HTML、CSS、SVGで作成する必要がある涙の形

私はCSSで試しました:

.tear {
  display: inline-block;
  transform: rotate(-30deg);
  border: 5px solid green;
  width: 50px;
  height: 100px;
  border-top-left-radius: 50%;
  border-bottom-left-radius: 50%;
  border-bottom-right-radius: 50%;
}
<div class="tear">
</div>

それは本当に台無しになりました。

そして、私はSVGで試しました:

<svg viewBox="0 100 100">
  <polygon points="50,0 100,70 50,100 0,70"/>
</svg>

形は取れましたが、底が曲がっていませんでした。

HTMLページで使用できるようにこの形状を作成する方法はありますか?


12
「スケーリングでぼやけてしまうので、画像を使いたくありません」、なぜ画像をスケーリングするのですか?[srcset]または<picture>要素を使用しても、ぼやけません。いっそのこと、ちょうどSVG画像にリンクされています<img src="tear.svg" alt="Teardrop"/>
zzzzBov

32
@zzzzBov:本当にpicture要素を推奨していますか?IE のサポート、Chromeの初期バージョンのサポート、Safari のサポートありません。続行しますか?
jbutler483

9
@zzzzBov。why are you scaling the image?まあ、開発者がスケーリングしないと、画像がぼやけて見えることがあります。ブラウザにズームインするだけで十分です。私の場合、HighDPI画面とぼやけた画像がたくさんあります。そう、そうです、もしSVGを使用して画像を回避できるなら、それのために行きます。
Nolonar

63
Unicodeはすべてそれを解決... U + 1F4A7💧
トーマス・ウェラー

21
@トーマス私は正方形を見る:/ i.stack.imgur.com/8fXMf.png
user000001

回答:


327

SVGアプローチ:

曲線の形状を許可しない要素の代わりにインラインSVG<path/>要素を使用すると、二重曲線を簡単に実現でき<polygon/>ます。

次の例では、次の<path/>要素を使用しています。

<svg width="30%" viewbox="0 0 30 42">
  <path fill="transparent" stroke="#000" stroke-width="1.5"
        d="M15 3
           Q16.5 6.8 25 18
           A12.8 12.8 0 1 1 5 18
           Q13.5 6.8 15 3z" />
</svg>

SVGは、このような形状を二重曲線で作成するための優れたツールです。SVG / CSS比較を使用して、二重曲線に関するこの投稿を確認できます。この場合にSVGを使用する利点は次のとおりです。

  • 曲線制御
  • 塗りつぶしコントロール(不透明度、色)
  • ストロークコントロール(幅、不透明度、色)
  • コードの量
  • 形を構築して維持する時間
  • スケーラブル
  • HTTPリクエストなし(例のようにインラインで使用した場合)

インラインSVGのブラウザーサポートはInternet Explorer 9に戻ります。詳細についてはcanIuseを参照してください。


:それはに減らすことができます <svg width="100%" height="100%" viewBox="0 0 8 8" /> <path d="M4 1L3 4A1.2 2 0 1 0 5 4"/> </svg> ...それは「脂肪」または「スキニー」雨滴を行うことができるので、これは、あなたがそれを与える面積を記入します...一定の高さ/幅の変更を必要に応じて
technosaurus

1
@technosaurus d="..."属性のコマンドの数を減らすことの問題は、ドロップの上部に二重曲線がないことです。
web-tiki

10
これにはCSSではなくSVGを使用する必要があるため、+ 1。これを実現するために必要なCSS機能は、SVGとほぼ同じブラウザーをサポートしているため、その点でCSSに利点はありません。CSSは図形を作成できますが、それはそのために設計されたものではありません。作業用に設計されたツールを使用してうまくできる場合は、巧妙であるためにドライバーで釘を打たないでください。
Simba

6
さらに良いのは、SVGファイルを作成<img />してハイパーテキストドキュメントで使用することです。
Andreas Rejbrand 2015年

@AndreasRejbrandはプロジェクトによっては良いアイデアですが、OPが避けたいと思われるHTTPリクエストを追加します。
web-tiki

135

基本的なボーダー半径

これはCSS内でborder-radiusと変換を使用して比較的簡単に行うことができます。CSSはほんの少し外れていました。

.tear {
  width: 50px;
  height: 50px;
  border-radius: 0 50% 50% 50%;
  border: 3px solid black;
  transform: rotate(45deg);
  margin-top: 20px;
}
<div class="tear"></div>

高度なボーダー半径

これは上記と非常によく似ていますが、もう少し形を整えています。

.tear {
  width: 50px;
  height: 50px;
  border-radius: 80% 0 55% 50% / 55% 0 80% 50%;
  border: 3px solid black;
  transform: rotate(-45deg);
  margin-top: 20px;
}
<div class="tear"></div>


4
@zzzzBov私はそれが間違ったツールである方法を完全に理解していません、OPはCSSまたはSVGソリューションを求めました、そして私は説明にできるだけ近いCSSソリューションを思いつきました。その軽量で簡単に変更できます。
Stewartside、2015年

12
@zzzzBov画像とスプライトにCSSを使用するのが一般的です。これは、一般的な「イメージ」を生成するための最小限のコードです。ウェブページで使えるという質問仕様の範囲内で使えるので適切だと思います。
Stewartside、2015年

13
@zzzzBov:CSSは形状に完全に適しています。そのような形状が何に使用されているのか、誰が言うべきでしょうか?意味論的に画像 -OPは、画像を使用したくないことを明確に述べています。
jbutler483

46
@ jbutler483、「CSSは形状に完全に適しています」いいえ、それはひどいです。できるからといって、そうすべきだとは限らない。それはマークアップであらゆる種類のゴミを導入し、維持するのは面倒な混乱です。イメージは、個別の自己完結型ファイルに簡単に分離できるため、維持がはるかに簡単です。
zzzzBov 2015年

19
「マークアップのガベージ」は、ブートストラップまたはフォントの素晴らしいアイコンを使用すると発生します。真剣に、ボーダー半径宣言を使用してこれを達成できる(かなり明らかに)場合、このようなものを少し上回っていると思います。しかし、干し草、画像を使用しないように言うのは誰ですか?
jbutler483

88

CSSコードの主な問題は次のとおりです。

  1. 幅とは異なる高さを使用しました
  2. 正しい角度サイズを回転していません

したがって、これらの問題を「修正」することにより、以下が生成されます。

.tear {
  display: inline-block;
  transform: rotate(-45deg);
  border: 5px solid green;
  width: 100px;
  height: 100px;
  border-top-left-radius: 50%;
  border-bottom-left-radius: 50%;
  border-bottom-right-radius: 50%;
}
/***for demo only***/

.tear {
  margin: 50px;
}
<div class="tear">
</div>

CSSの長さを節約するために、border-radiusプロパティを次のように書き直すこともできます。

border-radius: 50% 0 50% 50%;

これは疑似要素で強化できます 、このフィドルに示すように、

代替案

私はこれを見つけましたビナイChalluru codepenに。

ここのロジックを使用して、SVGをほぼすべての可能なビルド形状などに作成できたことに注意してください。たとえば、簡単な出力は次のとおりです。

これはSVGを使用しており、形状を複数の方法で変更でき、その形状を目的の結果に変更することができます。

免責事項上記のペンは作成せず、入手しただけです。


CSSバージョン

これは完全とは言えませんが、CSSを使用してこの形状を生成できる場合もあります。

SVGバージョン

SVGがこの回答の一番上にあることを知っている必要がありますが、私は挑戦が好きなので、SVGでの試みを以下に示します。

svg {
  height: 300px;
}
svg path {
  fill: tomato;
}
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 100 100">

  <path d="M49.015,0.803
    c-0.133-1.071-1.896-1.071-2.029,0
    C42.57,36.344,20,43.666,20,68.367   
    C20,83.627,32.816,96,48,96
    s28-12.373,28-27.633
    C76,43.666,53.43,36.344,49.015,0.803z 
    M44.751,40.09   
    c-0.297,1.095-0.615,2.223-0.942,3.386
    c-2.007,7.123-4.281,15.195-4.281,24.537
    c0,5.055-2.988,6.854-5.784,6.854   
    c-3.189,0-5.782-2.616-5.782-5.831
    c0-11.034,5.315-18.243,10.005-24.604
    c1.469-1.991,2.855-3.873,3.983-5.749   
    c0.516-0.856,1.903-0.82,2.533,0.029
    C44.781,39.116,44.879,39.619,44.751,40.09z"/>


</svg>

変更path値を、あなたのティアドロップデザインの形状を変更することができるだろう。


10
これらはすべて非常に冗長に見えます。jsソリューションは特にばかげています。
egid 2015年

4
@egid:私はjsバージョンを作成しなかったと答えました。jsバージョンでは、実行時に形状を変更できることにも注意してください
jbutler483

55

IMOこの形状では、曲線の連続性を確保するために、滑らかな曲線からベジェへの変換が必要です。

問題のドロップ:

問題のドロップについては、

  • 制御点が同じ長さにならないため、滑らかな曲線は使用できません。ただし、曲線完全な連続性を確保するために、制御点を前の制御点と正確に反対(180度)にする必要があります。下の図は、この点を示しています。

ここに画像の説明を入力してください
:赤と青の曲線は2つの異なる2次曲線です。

  • stroke-linejoin="miter"、先の尖った上部の場合。

  • このシェイプは連続するcコマンドのみを使用するため、省略できます。

これが最後のスニペットです。

<svg height="300px" width="300px" viewBox="0 0 12 16">
  <path fill="#FFF" stroke="black" stroke-width="0.5" stroke-linejoin="miter" 
        d="M 6 1 c -2 3 -5 5 -5 9
           0 7 10 7 10 0 
           0 -4 -3 -6 -5 -9z" />
</svg>

TBHでも、受け入れられた回答の曲線は完全に連続的ではありません。


IE 5-8(VML)の場合

IE 5-8でのみ機能します。VMLSVGとは異なるコマンドを使用します。例えば。相対立方ベジエにはvを使用しますます。

注:このスニペットはIE 5-8でも実行できません。HTMLファイルを作成し、ブラウザで直接実行する必要があります。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
    <style> v\:* { behavior: url(#default#VML); }

    </style >
</head>
<body>
    <div style="width:240; height:320;">
        <v:shape coordorigin="0 0" coordsize="12 16" fillcolor="white" strokecolor="black" strokewidth="1"
            strokeweight="5" style="width:240; height:320" 
            path="M 6 1 v -2 3 -5 5 -5 9
           0 7 10 7 10 0 
           0 -4 -3 -6 -5 -9 x e">
        </v:shape>
    </div>
</body>
</html>

「制御点は同じ長さではないため、滑らかな曲線は使用できません。」「スムーズ」とは、接線ハンドル(コントロールポイント)が直線上にあることを意味するだけではありませんか?なぜ同じ長さでなければならないのですか?
Niccolo M.

2
@NiccoloM。svgでは、滑らかな曲線(TおよびSコマンド)は、ハンドルが対称的に反対で、前のハンドルの長さに等しいことを意味します。通常の言語では、滑らかな曲線はハンドルの長さが異なることを意味する場合がありますが、svgでは、長さも以前の曲線のハンドルと同じです:)
Max Payne

42

または、視聴者のフォントでサポートされている場合は、Unicode文字を使用します

液滴:💧(&#128167;

または

黒のドロップレット:🌢(&#127778;

それに応じてスケーリングしてください!


これを@ font-faceで使用することもできますが、適切な場所などに保持するフォントファイルがあります。
1934286 2015年

3
SVGとこのような専用のUnicodeシンボルは適切です。このためのCSSは悪いです。PNGは問題ありませんが、ラスターグラフィックであるため完璧ではありません。JPGは非常に悪いので、見たときに悪夢を見るほどです。
Andreas Rejbrand 2015年

@AndreasRejbrand 20x20のPNGは、200x200のJPGよりもサイズが大きくなります。また、同じサイズの非圧縮JPGはPNGと同等です。どちらもラスターであり、同じ問題に悩まされています。
nico

@nico:理論的には、はい、圧縮なしでJPGを使用できます。しかし、インターネットは、このような災害がいっぱいです:en.wikipedia.org/wiki/Atomic_number#/media/...
アンドレアスRejbrand

28

これには個人的にSVGを使用します。ほとんどのベクターグラフィックソフトウェアでSVGを作成できます。私はお勧めします:

Illustratorであなたの形をトレースしたものを下に作成しました。

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="223.14px" height="319.008px" viewBox="0 0 223.14 319.008" enable-background="new 0 0 223.14 319.008" xml:space="preserve">
  <path fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" d="M111.57,13.291c0,0,57.179,86.984,72.719,108.819
    	c30.359,42.66,41.005,114.694,1.626,154.074c-20.464,20.463-47.533,30.293-74.344,29.488h-0.002
    	c-26.811,0.805-53.88-9.025-74.344-29.488C-2.154,236.804,8.492,164.77,38.851,122.11C54.391,100.275,111.57,13.291,111.57,13.291z" />
</svg>


27

HTMLキャンバス

これは、これまでこのスレッドで明らかにされたオプションです。Canvasの描画に使用されるコマンドはSVGに非常によく似ています(そして、web-tikiはこの回答で使用される基本的なアイデアのクレジットに値します)。

問題の形状は、キャンバス独自の曲線コマンド(QuadraticまたはBezier)またはPath APIを使用して作成できます。答えには、3つの方法すべての例が含まれています。

Canvasのブラウザサポートは非常に優れています。


2次曲線の使用

window.onload = function() {
  var canvas = document.getElementById('canvas');
  if (canvas.getContext) {
    var ctx = canvas.getContext('2d');

    ctx.beginPath();
    ctx.lineJoin = 'miter';
    ctx.moveTo(120, 20);
    ctx.quadraticCurveTo(117.5, 30, 148, 68);
    ctx.arc(120, 88, 34.5, 5.75, 3.66, false);
    ctx.quadraticCurveTo(117.5, 35, 120, 20);
    ctx.closePath();
    ctx.strokeStyle = '#000';
    ctx.lineWidth = 2;
    ctx.fillStyle = '#77CCEE'
    ctx.stroke();
    ctx.fill();
  }
}
canvas {
  margin: 50px;
  height: 100px;
  width: 200px;
  transform: scale(1.5);
}

body{
  background-image: radial-gradient(circle, #3F9CBA 0%, #153346 100%);
}
<canvas id='canvas'></canvas>

以下は、グラデーションの塗りつぶしと影を備えた高度なバージョンです。またhover、SVGと比較した場合のCanvasの1つの欠点を示すために、形状への影響も含めました。Canvasはラスター(ピクセル)ベースであるため、特定のポイントを超えてスケ​​ーリングすると、ぼやけ/ピクセル化されたように見えます。それに対する唯一の解決策は、オーバーヘッドであるすべてのブラウザのサイズ変更で形状を再描画することです。


ベジェ曲線の使用

Path APIの使用

注:こちらの回答述べたように、Path APIはIEとSafariではまだサポートされていません。


参考文献:


私は常にsvgがより良いオプションであることを見ません。このような多くの場合、それは確かにより良いオプションです。しかし、キャンバスには独自の長所があります。素敵な答え。あなたの答えから私はそれを知ることができます、確かにSVGを使う方がはるかに簡単です!
Max Payne

ええ@ TimKrul、SVGを記述/使用する方が簡単です。Canvasには独自の長所がありますが、私が読んだものは何でも、主にSVGとは異なりラスターベースであるため、図形のような単純なロゴに使用してもあまり有利ではありません。
ハリー

25

これは、ユーザーAna Anaが CSSとスタイルおよびパラメトリック方程式を使用して作成したCodepenでも見つかりました。非常にシンプルで非常に小さなコード。そして、多くのブラウザはCSS3のボックスシャドウスタイルをサポートしていますbox-shadow

body {
  background-color: black;
}
.tear {
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -0.125em;
  width: 0.25em;
  height: 0.25em;
  border-radius: 50%;
  box-shadow: 0em -5em red, 0.00118em -4.97592em #ff1800, 0.00937em -4.90393em #ff3000, 0.03125em -4.7847em #ff4800, 0.07283em -4.6194em #ff6000, 0.13915em -4.40961em #ff7800, 0.23408em -4.15735em #ff8f00, 0.36em -3.86505em #ffa700, 0.51777em -3.53553em #ffbf00, 0.70654em -3.17197em gold, 0.92382em -2.77785em #ffef00, 1.16547em -2.35698em #f7ff00, 1.42582em -1.91342em #dfff00, 1.69789em -1.45142em #c7ff00, 1.97361em -0.97545em #afff00, 2.2441em -0.49009em #97ff00, 2.5em 0.0em #80ff00, 2.73182em 0.49009em #68ff00, 2.93032em 0.97545em #50ff00, 3.08681em 1.45142em #38ff00, 3.19358em 1.91342em #20ff00, 3.24414em 2.35698em #08ff00, 3.23352em 2.77785em #00ff10, 3.15851em 3.17197em #00ff28, 3.01777em 3.53553em #00ff40, 2.81196em 3.86505em #00ff58, 2.54377em 4.15735em #00ff70, 2.21783em 4.40961em #00ff87, 1.84059em 4.6194em #00ff9f, 1.42017em 4.7847em #00ffb7, 0.96608em 4.90393em #00ffcf, 0.48891em 4.97592em #00ffe7, 0.0em 5em cyan, -0.48891em 4.97592em #00e7ff, -0.96608em 4.90393em #00cfff, -1.42017em 4.7847em #00b7ff, -1.84059em 4.6194em #009fff, -2.21783em 4.40961em #0087ff, -2.54377em 4.15735em #0070ff, -2.81196em 3.86505em #0058ff, -3.01777em 3.53553em #0040ff, -3.15851em 3.17197em #0028ff, -3.23352em 2.77785em #0010ff, -3.24414em 2.35698em #0800ff, -3.19358em 1.91342em #2000ff, -3.08681em 1.45142em #3800ff, -2.93032em 0.97545em #5000ff, -2.73182em 0.49009em #6800ff, -2.5em 0.0em #7f00ff, -2.2441em -0.49009em #9700ff, -1.97361em -0.97545em #af00ff, -1.69789em -1.45142em #c700ff, -1.42582em -1.91342em #df00ff, -1.16547em -2.35698em #f700ff, -0.92382em -2.77785em #ff00ef, -0.70654em -3.17197em #ff00d7, -0.51777em -3.53553em #ff00bf, -0.36em -3.86505em #ff00a7, -0.23408em -4.15735em #ff008f, -0.13915em -4.40961em #ff0078, -0.07283em -4.6194em #ff0060, -0.03125em -4.7847em #ff0048, -0.00937em -4.90393em #ff0030, -0.00118em -4.97592em #ff0018;
}
<div class="tear"></div>


7
これは、要求されている種類のティアドロップに似ていません。
doppelgreener 2015年

20

CSSバージョン

ここにはかなりの数の答えがあるので、別の方法でそれに追加しないのはどうだと思いました。これはHTMLCSSの両方を使用しています、ティアドロップを作成するために。

これにより、ティアドロップの境界線と背景の色を変更し、その上部のサイズを変更できます。

シングルdivを使用して、borderおよびで円を作成できますborder-radius。次に、疑似要素(:before:after)を使用して、ここCSS三角形 を作成します。これは、ティアドロップの先端として機能します。を:before境界として使用して、:after小さいサイズと目的の背景色で上に配置します。

div {
  width: 100px;
  height: 100px;
  border-radius: 50%;
  border: 4px solid;
  margin: 80px auto;
  position: relative;
}
div:before,
div:after {
  content: "";
  display: block;
  position: absolute;
  width: 0;
  height: 0;
}
div:before {
  border-left: 50px solid transparent;
  border-right: 50px solid transparent;
  border-bottom: 104px solid black;
  top: -75px;
}
div:after {
  border-left: 46px solid transparent;
  border-right: 46px solid transparent;
  border-bottom: 96px solid #fff;
  top: -66px;
  left: 0;
  right: 0;
  margin: auto;
  z-index: 1;
}
<div></div>


これは背景色のティアドロップのデモです

背景色をに入れて色を同じにdiv変更:after bottom-borderするのと同じくらい簡単です。境界線を変更するには、境界div線の色と:before背景色も変更する必要があります。


血色の良いペンに背景色の値がありません。
Persijn、2015年

2
@Persijn Harryがチャットで何か言って、それが時々自動保存されるのを忘れて、ペンでそれを見ていました。ははは、元の状態に戻します。できました。
Ruddy 2015年

17

以下を作成するために使用されたhttp://image.online-convert.com/convert-to-svgなどの画像変換リソースを使用するだけで、SVGでこれを行うのは非常に簡単です。

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
 "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
 width="213.000000pt" height="300.000000pt" viewBox="0 0 213.000000 300.000000"
 preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.12, written by Peter Selinger 2001-2015
</metadata>
<g transform="translate(0.000000,300.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1035 2944 c-143 -250 -231 -380 -508 -752 -347 -465 -432 -616 -493
-882 -91 -394 10 -753 285 -1013 508 -479 1334 -361 1677 240 126 221 165 494
105 726 -66 254 -178 452 -609 1076 -96 140 -226 335 -288 435 -155 249 -135
229 -169 170z m85 -212 c40 -69 192 -298 543 -818 268 -396 354 -593 364 -835
12 -281 -82 -509 -296 -714 -103 -99 -236 -173 -396 -221 -82 -25 -105 -27
-260 -28 -148 -1 -181 2 -255 22 -348 96 -611 357 -691 689 -41 167 -25 392
41 587 62 185 154 334 444 716 177 235 320 444 402 592 27 49 51 88 54 88 3 0
25 -35 50 -78z"/>
</g>
</svg>


9
@Persijnなぜ一部のエディターからコピーを求め続けるのですか?Svgはsvgです。作成したいツールを使用できます。
Abhinav Gauniyal 2015年

2
@AbhinavGauniyal:「エディター」を呼び出したい場合は、宣言に「fluff」を追加します。たとえば、実際には必要300.000000ptないメタデータ
jbutler483

12
@Persijn手動で何を意味するか/コード化。誰かがイラストレーターを作ったり、手で作ったり、コーディングしたりして、コーディング作業を簡単にしましたが、それでも同じことが起こります。次に、ブラウザでsvgを使用している場合は、アセンブリ言語を使用して手動でコーディングしてみませんか?そして、なぜ組み立てに止まるか、ワイヤを使用して手でコーディングするか、自分で描くだけです。これは私が期待していた理由ではありません。
Abhinav Gauniyal

2
@ jbutler483はい、削除できます。あなたはあなたのためにそれを行う多くのツールがありますが、ここでは一つだgithub.com/svg/svgo
Abhinav Gauniyal

6
@persijnこの回答は、必要なsvgパスを提供します。私はあなたの反対が何なのか本当に手がかりはありません。
user428517

14

SVGを使用することを選択した場合は、パスを確認する必要があります。SVGエディターもお勧めします。

<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="-0.05 0 1195.1 703" preserveAspectRatio="xMidYMid meet" zoomAndPan="disable" transform="">
    <defs id="svgEditorDefs">
        <line id="svgEditorLineDefs" stroke="black" style="fill: none; vector-effect: non-scaling-stroke; stroke-width: 1px;"/>
    </defs>
    <rect id="svgEditorBackground" x="0" y="0" width="1195" height="703" style="fill: none; stroke: none;"/>
    <path stroke="black" id="e1_circleArc" style="fill: none; stroke-width: 1px; vector-effect: non-scaling-stroke;" d="M 198 207 a 117.969 117.969 0 1 0 213 8" transform=""/>
    <path stroke="black" id="e4_circleArc" style="fill: none; stroke-width: 1px; vector-effect: non-scaling-stroke;" transform="" d="M 411.348 215.696 a 349.677 349.677 0 0 0 -110.37 -131.718"/>
    <path stroke="black" style="fill: none; stroke-width: 1px; vector-effect: non-scaling-stroke;" transform="matrix(-0.182706 -0.983168 0.983168 -0.182706 157.664 417.408)" id="e6_circleArc" d="M 301.799 202.299 a 329.763 329.763 0 0 0 -102.951 -124.781"/>
</svg>


1
なぜdefsタグ内の行を使用するのですか?そして、あなたは3 + rectではなく1つのパスでこの形を行うことはできませんか?
Persijn、2015年

6

次に、4つの段階的にシンプルなSVGティアドロップ形状を示します。

ここに画像の説明を入力してください

<svg viewbox="-20 -20 180 180">
  <g stroke="black" fill="none">
    
    <path transform="translate(0)"
     d="M   0  0
        C   0 10  10 17  10 27
        C  10 40 -10 40 -10 27
        C -10 17   0 10   0  0
        Z"/>

    <path transform="translate(40)"
     d="M   0  0
        C   0 16  15 25   5 34
        Q   0 38         -5 34
        C -15 25   0 16   0  0
        Z"/>
    
    <path transform="translate(80)"
     d="M   0  0
        C   0 10  18 36   0 36
        S          0 10   0  0
        Z"/>

    <path transform="translate(120)"
     d="M   0  0
        Q  18 36   0 36
        T          0  0
        Z"/>
    
    
    
    
    <g stroke-width="0.25" stroke="red">
      <g transform="translate(0)">
        <ellipse rx="1" ry="1" cx="0"   cy="0" />
        <ellipse rx="1" ry="1" cx="0"   cy="10"/>
        <ellipse rx="1" ry="1" cx="10"  cy="17"/>
        <ellipse rx="1" ry="1" cx="10"  cy="27"/>
        <ellipse rx="1" ry="1" cx="10"  cy="40"/>
        <ellipse rx="1" ry="1" cx="-10" cy="40"/>
        <ellipse rx="1" ry="1" cx="-10" cy="27"/>
        <ellipse rx="1" ry="1" cx="-10" cy="17"/>
        <line x1="0"   y1="0"  x2="0"   y2="10"/>
        <line x1="10"  y1="17" x2="10"  y2="40"/>
        <line x1="-10" y1="40" x2="-10" y2="17"/>
      </g>
      <g transform="translate(40)">
        <ellipse rx="1" ry="1" cx="0"   cy="0" />
        <ellipse rx="1" ry="1" cx="0"   cy="16"/>
        <ellipse rx="1" ry="1" cx="15"  cy="25"/>
        <ellipse rx="1" ry="1" cx="5"   cy="34"/>
        <ellipse rx="1" ry="1" cx="0"   cy="38"/>
        <ellipse rx="1" ry="1" cx="-5"  cy="34"/>
        <ellipse rx="1" ry="1" cx="-15" cy="25"/>
        <line x1="0"  y1="0"  x2="0"   y2="16"/>
        <line x1="15" y1="25" x2="0"   y2="38"/>
        <line x1="0"  y1="38" x2="-15" y2="25"/>
      </g>
      <g transform="translate(80)">
        <ellipse rx="1" ry="1" cx="0"   cy="0" />
        <ellipse rx="1" ry="1" cx="0"   cy="10"/>
        <ellipse rx="1" ry="1" cx="18"  cy="36"/>
        <ellipse rx="1" ry="1" cx="0"   cy="36"/>
        <ellipse rx="1" ry="1" cx="-18" cy="36" stroke="gray"/>
        <line x1="0"  y1="0"  x2="0"   y2="10"/>
        <line x1="18" y1="36" x2="0"   y2="36"/>
        <line x1="0"  y1="36" x2="-18" y2="36" stroke="gray" stroke-dasharray="0.5"/>
      </g>
      <g transform="translate(120)">
        <ellipse rx="1" ry="1" cx="0"   cy="0" />
        <ellipse rx="1" ry="1" cx="18"  cy="36"/>
        <ellipse rx="1" ry="1" cx="0"   cy="36"/>
        <ellipse rx="1" ry="1" cx="-18" cy="36" stroke="gray"/>
        <line x1="18" y1="36" x2="0"   y2="36"/>
        <line x1="0"  y1="36" x2="-18" y2="36" stroke="gray" stroke-dasharray="0.5"/>
      </g>
    </g>    
  </g>
  <g font-size="6" transform="translate(-1.5,-4)">
    <text x="-10" y="-8"># of unique points:</text>
    <text transform="translate(  0)">8</text>
    <text transform="translate( 40)">7</text>
    <text transform="translate( 80)">4</text>
    <text transform="translate(120)">3</text>
  </g>
</svg>

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