Cssで点線のテキストを作成することは可能ですか?
ドットフォントを使用するのは当然のことですが、ドットテキストを控えめに使用する必要がある場合は、ユーザーにフォント全体をダウンロードさせるのはやり過ぎかもしれません。
私が持っていたアイデアは、白い背景の小さな透明な円の背景パターンを持つ疑似要素でテキストをオーバーレイすることでした。
このようなもの:
<div class="dottedText">Some dotted text</div>
.dottedText:after
{
content: '';
position:absolute;
left:0;
top:0;
width: 100%;
height: 100%;
background: radial-gradient(circle, transparent 50%, transparent 50%),
radial-gradient(circle, transparent 20%, white 50%) 30px 30px;
background-size:4px 4px;
}
私は近いかもしれないと思いますが、フォントサイズを変更すると上記の解決策は正しく機能しません。
私は解決策を探しています
1)フォントサイズが大きくなると、ドットのサイズが大きくなります。
2)できれば、各文字は1行のドットのみで表示する必要があります。現在のように2行ではありません。
編集:私がドットの1つの線を言うとき-私は各ストロークが1つのドットだけで構成されるべきであることを意味します。例:上の画像では、「m」文字に2列のドットがあることに注意してください。..まあ、私は1つだけを好みます。
理想的にはこのようなもの( ここ から取得):
(わかりませんが、これを行うには放射状のグラデーションを微調整する必要があるかもしれません)
編集:
1)組み込みフォントである限り、どのフォントを使用してもかまいません。 (モノスペースフォントでも問題ありません)
2)ソリューションはすべてのブラウザで機能する必要はありません。 (したがって、Webkitのみのソリューションで問題ありません)
正直なところ、この答えはおかしなことや奇妙に聞こえるかもしれませんが、CSSのみで可能かどうかはわかりません(他の言語にタグを付けていないため)そうするのはやり過ぎなので、CSSの行を多すぎる代わりに、ドットフォントを使用するのが理にかなっています。
IEを除外しても、.woff
ファイルは1つしかありません。これは、http
リクエストが1つ増えるため、非常に正常だと思います。確実に肥大化することはありません。あなたが思うように。
かっこいい点線のフォントのリストは ここ にあります。 Font Squirrel Service を使用して、ttf
を変換します。
あなたがそうする許可を持っていることを確認してください。
(ファイルは自分のサーバーでホストされ、有効になっています [〜#〜] cors [〜#〜] Firefoxでデモが失敗したため)
安っぽいIEをサポートするつもりがない場合、必要なファイルはwoff
だけで、それはたった23kbです。
SVGインラインスタイルに依存している場合でも、私が付属しているものは次のとおりです。
<svg xmlns="http://www.w3.org/2000/svg"
width="1450px" height="300px" viewBox="0 0 800 300">
<text x="2" y="155"
font-family="'Lucida Grande', sans-serif"
font-size="222"
stroke="red"
stroke-width="3"
stroke-linecap="round"
stroke-dasharray="5,5"
fill="none">
Some dotted text
</text>
いくつかの理由でストロークラインキャップが機能していませんが。
動作するフィドルチェックで遊びたい場合 this 。
EDIT-1(svg-stylesをCSSに移動)
svg{
width:1450px;
height:300;
viewBox:0 0 1500 300;
}
text{
font-family:'Lucida Grande', sans-serif;
font-size:152px;
stroke:#000ece;
stroke-width:3px;
stroke-linecap:round;
stroke-dasharray:1,1;
fill:none;
}
<div class="dott">
<svg xmlns="http://www.w3.org/2000/svg">
<text x="2" y="155" >
Some dotted text
</text></div>
いくつかの小さな調整で、かなり近づくことができます:
1)font-family
をcouriernewに変更します
2)divに水平および垂直オフセットを使用してtext-shadow
を追加します
3)単位をems
に変更しました @ BDawgが提案したように)
---([〜#〜]フィドル[〜#〜]
div {
font-size: 40px;
font-family: courier new;
position: relative;
text-shadow: -.03em -.03em 0 black;
}
.dottedText:after {
content: '';
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: radial-gradient(circle, transparent 50%, transparent 50%), radial-gradient(circle, transparent 20%, white 50%) 30px 30px;
background-size: .1em .1em;
}
div + div {
font-size: 60px;
}
div + div + div {
font-size: 80px;
}
div + div + div + div {
font-size: 100px;
}
<div class="dottedText">The quick brown fox</div>
<div class="dottedText">The quick brown fox</div>
<div class="dottedText">The quick brown fox</div>
<div class="dottedText">The quick brown fox</div>
いいえ、できません。
私は解決策を探しています
1)フォントサイズが大きくなると、ドットのサイズが大きくなります。
2)できれば、各文字は1行のドットのみで表示する必要があります。現在のように2行ではありません。
編集:私がドットの1つの線を言うとき-私は各ストロークが1つのドットだけで構成されるべきであることを意味します。例:上の画像では、「m」文字に2列のドットがあることに注意してください。..まあ、私は1つだけを好みます。
これはカスタムフォントなしでは実行できません。
他の回避策には2つの固有の問題があります:
CSSにはtext-fill-pattern
はありません。 SVGでもありません。 CSSとSVGの両方にtext-fill-color
があります。ただし、CSSでのブラウザ固有の実装と非標準のベンダープレフィックスに限定されています。次に、stroke
スタイルがあります。 CSSには(fill
と同じ)非標準の制限があり、width
とcolor
のみに制限されています。 SVGはstroke-linecap
とstroke-dasharray
を追加しますが、それだけです。
text-outline
が役に立った可能性があります。 border
のように機能する場合は、text-outline: Npx dotted red;
を実行できたはずです。そして、Npx
を増やして、text-fill
を事実上排除します。ただし、これには他にも問題があります。(1)仕様によると、shadow
として機能します。つまり、スタイルはありません。 text-outline: 2px 2px #f00;
のように。 solid / dotted / dashed
スタイルのオプションはありません。 (2)W3Cは、この機能は危険にさらされており、仕様から削除される可能性があると述べています。 (3)現時点では、まだどのブラウザにも実装されていません。参照: http://www.w3.org/TR/2007/WD-css3-text-20070306/#text-outline
省略される唯一の方法は、background
パターンを使用してから、テキストに対してclip
にすることです。これはあなたがあなたの質問ですでに試したことです。
最後のアプローチ(背景)の問題は、フォントが同じではないことです。似ていない。グリフは異なります。アセンダーとディセンダーは異なります。同じキャラクターのストロークでも違います。
これは、次の図で理解できます。
上記のサンプル(Times New Romanフォント)の文字に気付いた場合、垂直線の幅はほぼ同じですが、水平線(「e」の水平バー)は狭くなっています。さらに、セリフも幅が異なり、端に向かって先細になっています。パターンのある背景(メカニズム、画像、SVG、ラジアル)を適用すると、フォントの線ときれいに整列しません。空白とプロポーショナルフォントのため、距離はさまざまです。
上の図の2つのt
が赤でマークされていることに注意してください。グリフは同じですが、原点からの距離によっては、背景の模様がきれいに並んでいません。したがって、2番目のt
にはドットが並んでいますが、最初のt
にはありません。見える模様が一部ずれているため、余白が目立ちます。同じパターンシフトが文字間でランダムに発生します。
上の図の赤い円でマークされているように、セリフのテーパーとe
のテーパーに注意してください。中央では、フォントが太く、パターンからより多くのドットに対応しています(一部は完全、一部は部分的)。セリフとテーパーでは、幅が狭くなり、パターンが収まりません。曲線の場合、パターン内のドットは曲がることができず、結局のところグリッドパターンです。
フォントに合わせてパターン内の個々のドットを増減することはできません。また、すべてのキャラクターで背景をラインナップにシフトすることはできません。 mono-space
フォントを使用すると、比例距離の問題はある程度軽減されますが、曲線は残り、パターンをそれに合わせることができません。
したがって、このためのbackground
手法には本質的に欠陥があります。唯一の解決策は、カスタムフォントを使用することです。
ただし、近似が十分に適切である場合は、放射状の背景の独自の手法が適切に機能します。少なくともFirefoxを除けば、独自の手法は他のブラウザでも機能します。
また、もう1つの同様のソリューションを提供しようとします。 SVGパターンをbackground-image
と組み合わせ、background-size
をパーセントで維持すると、より大きなサイズのmonospace
フォントである程度機能する場合があります。
免責事項:このスニペットはWebkitベースのブラウザー(Chrome/Safari)でのみ機能します。他のブラウザーはSVGをbackground-image
としてサポートしていないようであり、-webkit-background-clip: text;
もWebkitに依存しているためです。
スニペット:
.dotted {
padding: 0px;
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4'><circle cx='2' cy='2' r='2' fill='#f00' stroke='#fff' stroke-width='1'/></svg>");
font-family: sans-serif;
font-weight: 300;
font-size: 32px; background-size: 0.9%;
-webkit-font-smoothing: antialiased;
-webkit-background-clip: text;
-moz-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
}
div:nth-of-type(2) { font-size: 64px; }
div:nth-of-type(3) { font-size: 80px; }
<div class="dotted">Some dotted text</div>
<div class="dotted">Dotted text</div>
<div class="dotted">More dotted text</div>
変更 background-size
emsを使用します。
例えば:
background-size: 0.1em 0.1em;
注:上記の変更により、最初の例のサイズがフォントで変更されますが、2番目の例は作成されません。その正確な効果が絶対に必要な場合は、純粋なCSSアプローチではなくインラインSVGを使用します。 (またはより明白なアプローチ:点線のフォントに変更します)
このフォントにwebfontキットを使用できませんか?
http://www.fontsquirrel.com/fonts/BPdots?q%5Bterm%5D=dot&q%5Bsearch_check%5D=Y
あなたが望むフォントタイプのためにあなたのCSSをそのようにリンクするだけです:
_@font-face {
font-family: 'bpdotsbold';
src: url('BPdotsBold-webfont.eot');
src: url('BPdotsBold-webfont.eot?#iefix') format('embedded-opentype'),
url('BPdotsBold-webfont.woff') format('woff'),
url('BPdotsBold-webfont.ttf') format('truetype'),
url('BPdotsBold-webfont.svg#bpdotsbold') format('svg');
font-weight: normal;
font-style: normal;
}
_
次に、このフォントを使用する要素をリンクするだけです。
_h1{font-family: 'bpdotsbold', arial, helvetica;font-size:80px}
_
必ずウェブフォントのパスをサーバーにアップロードし、CSSの各url('LINKTOFONT')
を更新してください。
Font-squirrelが提供しなければならない他のいくつかのDotlikeフォントがありました:
http://www.fontsquirrel.com/fonts/list/find_fonts?q%5Bterm%5D=dot&q%5Bsearch_check%5D=Y
このフォントはあなたが期待しているものに似ています
http://www.fontsquirrel.com/fonts/Synthetique?q[term]=dot&q[search_check]=Y
そしてそれはすべてのブラウザでサポートされている4つの拡張機能[TTF、EOT、WOFF、SVG)フォントを持っています
これがお役に立てば幸いです