ホームページ > 記事 > ウェブフロントエンド > CSS を賢く使用して、テキストに二次的な太字と複数の境界線効果を実現します。
テキストを 2 回太字にする方法は?複数の境界線を実装するにはどうすればよいですか?次の記事では、CSS を賢く使用して、テキストの二次太字や複数の枠線の効果を実現する方法を紹介します。
#この記事では、実際のビジネス要件を通じて、極端なシナリオでは、テキストを表示するときにテキストを太字にするために
font-weight:bold を使用しましたが、まだ十分に太字ではないと感じました。テキストは太字ですか?太くしたらどうですか? ええと、互換性を考慮しない場合、答えは、テキストの
属性を使用して、テキストを 2 回太字にできるということです。
: この属性は、テキスト文字に境界線 (ストロークの先端) を追加し、width と color# を指定します。 border。これは、-webkit-text-ストローク-幅 プロパティと -webkit-text-ストローク-カラー
プロパティの省略形です。 以下のデモをご覧ください。
を使用してテキストを 2 回太字にすることができます: <pre class="brush:php;toolbar:false"><p>文字加粗CSS</p>
<p>文字加粗CSS</p>
<p>文字加粗CSS</p>
<p>文字加粗CSS</p></pre>
<pre class="brush:php;toolbar:false">p {
font-size: 48px;
letter-spacing: 6px;
}
p:nth-child(2) {
font-weight: bold;
}
p:nth-child(3) {
-webkit-text-stroke: 3px red;
}
p:nth-child(4) {
-webkit-text-stroke: 3px #000;
}</pre>
次の 4 種類のテキストを比較してください。これは
と -webkit-text-stroke
を使用してテキストを bold
にします。
テキストに境界線を追加するために使用される可能性がある
-webkit-text-blood属性を使用しましたが、ここで少し複雑になります。この質問は、「テキストに異なる色の境界線の 2 つのレイヤーを追加するにはどうすればよいですか?」という質問に変換することもできます。
もちろん、強力な CSS (SVG) を使用すればこれは問題ありません。試してみましょう。
処理のためにテキストを独立した要素に分割します
疑似要素の
attr() 擬似要素のテキスト
を拡大し、元のテキスト ## の下に重ねます
ul { display: flex; flex-wrap: nowrap; } li { position: relative; font-size: 64px; letter-spacing: 6px; font-weight: bold; -webkit-text-stroke: 3px #000; &::before { content: attr(data-text); position: absolute; top: 0; left: 0; bottom: 0; right: 0; color: red; -webkit-text-stroke: 3px #f00; z-index: -1; transform: scale(1.15); } }上記の効果にアニメーションを追加するだけで、一目で理解できます:
見た目は良さそうですが、実際、よく見ると境界線の効果は次のようになります。非常にラフで、テキストのすべての部分が定期的にカバーされていません。効果はあまり受け入れられません:
方法 2 を試してください: text-shadow を使用して境界線をシミュレートします
最初の方法は失敗しました。引き続き
text-shadow<p>文字加粗CSS</p>
p { font-size: 48px; letter-spacing: 6px; font-weight: bold; -webkit-text-stroke: 1px #000; text-shadow: 0 0 2px red; }
効果を見てください:
text-shadow は複数のシャドウをサポートしています。上記の
text-shadowを数回オーバーレイしてみましょう:
p { font-size: 48px; letter-spacing: 6px; font-weight: bold; -webkit-text-stroke: 1px #000; - text-shadow: 0 0 2px red; + text-shadow: 0 0 2px red,0 0 2px red,0 0 2px red,0 0 2px red,0 0 2px red,0 0 2px red,0 0 2px red,0 0 2px red,0 0 2px red,0 0 2px red; }
おお、この方法で
text-shadow
もちろん、拡大すると欠陥はより明白になりますが、それでも欠陥が影であることがわかります:
在尝试了 text-shadow
之后,自然而然的就会想到多重 filter: drop-shadow()
,主观上认为会和多重 text-shadow
的效果应该是一致的。
不过,实践出真知。
在实际测试中,发现利用 filter: drop-shadow()
的效果比多重 text-shadow
要好,模糊感会弱一些:
p { font-weight: bold; -webkit-text-stroke: 1px #000; filter: drop-shadow(0 0 0.25px red) drop-shadow(0 0 0.25px red) drop-shadow(0 0 0.25px red) drop-shadow(0 0 0.25px red) drop-shadow(0 0 0.25px red) drop-shadow(0 0 0.25px red) drop-shadow(0 0 0.25px red) drop-shadow(0 0 0.25px red) drop-shadow(0 0 0.25px red) drop-shadow(0 0 0.25px red) drop-shadow(0 0 0.25px red); }
效果如下:
我们甚至可以利用它制作文字二次加粗后的多重边框:
p { font-weight: bold; -webkit-text-stroke: 1px #000; filter: drop-shadow(0 0 0.2px red) // 重复 N 次 drop-shadow(0 0 0.2px red) drop-shadow(0 0 0.25px blue) // 重复 N 次 drop-shadow(0 0 0.25px blue); }
效果如下:
然而,在不同屏幕下(高清屏和普通屏),drop-shadow()
的表现效果差别非常之大,实则也难堪重用。
我们没有办法了吗?不,还有终极杀手锏 SVG。
其实利用 SVG 的 feMorphology 滤镜,可以非常完美的实现这个需求。
这个技巧,我在 有意思!不规则边框的生成方案 这篇文章中也有提及。
借用 feMorphology 的扩张能力给不规则图形添加边框。
直接上代码:
<p>文字加粗CSS</p>
p { font-size: 64px; letter-spacing: 6px; font-weight: bold; -webkit-text-stroke: 2px #000; filter: url(#dilate); }
效果如下:
我们可以通过 SVG feMorphology 滤镜中的 radius
控制边框大小,feFlood 滤镜中的 flood-color
控制边框颜色。并且,这里的 SVG 代码可以任意放置,只需要在 CSS 中利用 filter 引入即可。
本文不对 SVG 滤镜做过多的讲解,对 SVG 滤镜原理感兴趣的,可以翻看我上述提到的文章。
至此,我们就完美的实现了在已经利用 font-weight: bold
和 -webkit-text-stroke
的基础上,再给文字添加不一样颜色的边框的需求。
放大了看,这种方式生成的边框,是真边框,不带任何的模糊:
OK,本文到此结束,介绍了一些 CSS 中的奇技淫巧去实现文字二次加粗后加边框的需求,实际需求中,如果不是要求任意字都要有这个效果,其实我更推荐切图大法,高保真,不丢失细节。
当然,可能还有更便捷更有意思的解法,欢迎在评论区不吝赐教。
以上がCSS を賢く使用して、テキストに二次的な太字と複数の境界線効果を実現します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。