ホームページ  >  記事  >  ウェブフロントエンド  >  CSS を賢く使用して、テキストに二次的な太字と複数の境界線効果を実現します。

CSS を賢く使用して、テキストに二次的な太字と複数の境界線効果を実現します。

青灯夜游
青灯夜游転載
2022-09-19 10:35:221955ブラウズ

テキストを 2 回太字にする方法は?複数の境界線を実装するにはどうすればよいですか?次の記事では、CSS を賢く使用して、テキストの二次太字や複数の枠線の効果を実現する方法を紹介します。

CSS を賢く使用して、テキストに二次的な太字と複数の境界線効果を実現します。

#この記事では、実際のビジネス要件を通じて、極端なシナリオで

    # テキストの太字と枠線の効果を実現する方法について説明します
  • テキスト上の複数の境界線の効果
必須背景 - テキストの二次太字

今日遭遇非常に興味深い質問にたどり着きました:

は、テキストを表示するときにテキストを太字にするために

font-weight:bold

を使用しましたが、まだ十分に太字ではないと感じました。テキストは太字ですか?太くしたらどうですか? ええと、互換性を考慮しない場合、答えは、テキストの

-webkit-text-ストローク

属性を使用して、テキストを 2 回太字にできるということです。

MDN - webkit-text-blood

: この属性は、テキスト文字に境界線 (ストロークの先端) を追加し、widthcolor# を指定します。 border。これは、-webkit-text-ストローク-幅 プロパティと -webkit-text-ストローク-カラー プロパティの省略形です。 以下のデモをご覧ください。

-webkit-text-ストローク

を使用してテキストを 2 回太字にすることができます: <pre class="brush:php;toolbar:false">&lt;p&gt;文字加粗CSS&lt;/p&gt; &lt;p&gt;文字加粗CSS&lt;/p&gt; &lt;p&gt;文字加粗CSS&lt;/p&gt; &lt;p&gt;文字加粗CSS&lt;/p&gt;</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 種類のテキストを比較してください。これは

font-weight:bold

-webkit-text-stroke を使用してテキストを bold にします。

#CodePen デモ -- font-weight: 太字および -webkit-text-ストローク 二次太字テキスト

#2 倍太字のテキストに枠線を追加するにはどうすればよいですか?

OK、上記の最初のステップを完了しても、問題はまだ終わっておらず、さらに恐ろしい問題が発生しています。 ここで、テキストを 2 回太字にし、別の色の境界線を追加する必要があります。

テキストに境界線を追加するために使用される可能性がある

-webkit-text-blood

属性を使用しましたが、ここで少し複雑になります。この質問は、「テキストに異なる色の境界線の 2 つのレイヤーを追加するにはどうすればよいですか?」という質問に変換することもできます。

もちろん、強力な CSS (SVG) を使用すればこれは問題ありません。試してみましょう。

方法 1 を試す: テキストの擬似要素を使用してテキストを拡大する

最初に試す方法は少し面倒です。各テキストを調整し、テキストの擬似要素を使用してテキストをわずかに拡大し、元のテキストと取得したテキストを合わせます。

処理のためにテキストを独立した要素に分割します

  • 疑似要素の

    attr()
  • 機能を使用します。要素の擬似要素は同じテキストを実装します
  • 擬似要素のテキスト

  • を拡大し、元のテキスト ## の下に重ねます

  • # コード:

    
    
          
    •     
    •     
    •     
    •     
    • C
    •     
    • S
    •     
    • S
    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);
        }
    }
    上記の効果にアニメーションを追加するだけで、一目で理解できます:

##CodePen デモ -- 擬似要素を使用して太字テキストに境界線を追加する

見た目は良さそうですが、実際、よく見ると境界線の効果は次のようになります。非常にラフで、テキストのすべての部分が定期的にカバーされていません。効果はあまり受け入れられません:

方法 2 を試してください: text-shadow を使用して境界線をシミュレートします

最初の方法は失敗しました。引き続き

text-shadow

を使用して境界線をシミュレートする 2 番目の方法を試します。 2 度太字のテキストにテキスト シャドウを追加できます:

<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-shadowCSS を賢く使用して、テキストに二次的な太字と複数の境界線効果を実現します。 は複数のシャドウをサポートしています。上記の

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

を複数レイヤー重ね合わせると、よく見ないと本当に枠線のように見えてしまいます。

もちろん、拡大すると欠陥はより明白になりますが、それでも欠陥が影であることがわかります:

CodePen Demo -- 利用 text-shadow 给文字添加边框

尝试方法三:利用多重 drop-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);
}

效果如下:

CSS を賢く使用して、テキストに二次的な太字と複数の境界線効果を実現します。

我们甚至可以利用它制作文字二次加粗后的多重边框:

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 滤镜给文字添加边框

其实利用 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 的基础上,再给文字添加不一样颜色的边框的需求。

放大了看,这种方式生成的边框,是真边框,不带任何的模糊:

CodePen Demo -- 利用 SVG feMorphology 滤镜给文字添加边框

最后

OK,本文到此结束,介绍了一些 CSS 中的奇技淫巧去实现文字二次加粗后加边框的需求,实际需求中,如果不是要求任意字都要有这个效果,其实我更推荐切图大法,高保真,不丢失细节。

当然,可能还有更便捷更有意思的解法,欢迎在评论区不吝赐教。

(学习视频分享:css视频教程web前端

以上がCSS を賢く使用して、テキストに二次的な太字と複数の境界線効果を実現します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。