马黑黑 发表于 2023-2-6 12:35

css+html文本描边的几种实现方法

本帖最后由 马黑黑 于 2023-2-6 12:40 编辑 <br /><br /><style>
.chj_code {
        position: relative;
        margin: 10px 0 10px 60px;
        border-left: 2px solid tan;
        font: normal 16px/20px Consolas, Monaco, monospace;
}
.chj_code > p {
        margin: 3px 0 3px 10px;
        position: relative;
        white-space: pre-wrap;
        tab-size: 4;
}
.chj_code > p::before {
        position: absolute;
        width: 40px;
        left: -55px;
        content: attr(data-line);
        text-align: right;
        color: #ccc;
}

.txtshadow1 {
        font: bold 4em sans-serif;
        text-shadow: 0px 0px 2px red;
        color: snow;
}
.txtshadow2 {
        font: bold 4em sans-serif;
        text-shadow: 1px 0px 1px red, 0px 1px 1px red, -1px 0px 1px red, 0px -1px 1px red;
        color: snow;
}
.stroke {
        font: bold 4em sans-serif;
        -webkit-text-stroke: 1px red;
        color: snow;
}
</style>

<p>描边字不是svg或canvas的专利,尤其在CSS3出来以后。纯CSS+HTML实现描边字,方法还是有几个的,这里给大家展现一下。</p>
<p><br></p>
<p>方法一:使用 -webkit-text-stroke 属性</p>
<p><br></p>
<p>这个我们以前单独介绍过,它从svg借用而来,需要前缀 -webkit- ,是一个简写属性,语法很简单,描边尺寸+颜色值,试看例子:</p>
<p><br></p>

<div class="chj_code">
        <p>&lt;style&gt;</p>
        <p><span style="color: red;">.stroke </span>{</p>
        <p>        <span style="color: blue;">font</span>: bold 4em sans-serif;</p>
        <p>        <span style="color: blue;">-webkit-text-stroke</span>: 1px red;</p>
        <p>        <span style="color: blue;">color</span>: snow;</p>
        <p>}</p>
        <p>&lt;/style&gt;</p>
        <p><br></p>
        <p>&lt;<span style="color:darkred">pre</span> <span style="color: red">class</span><span style="color: blue">=</span><span style="color: magenta">"stroke"</span>&gt;</p>
        <p>        ABCDEF</p>
        <p>        abcdef</p>
        <p>        花潮论坛</p>
        <p>        花潮論壇</p>
        <p>&lt;<span style="color: darkred">/pre</span>&gt;</p>
</div>
<pre class="stroke">        ABCDEF
        abcdef
        花潮论坛
        花潮論壇
</pre>
<p><br></p>
<p>方法二:简单利用 text-shadow 属性</p>
<p><br></p>
<p>text-shadow 属性需要四个参数,水平阴影位置+垂直阴影位置+模糊尺寸+颜色,我们将阴影位置全部设置为 0,模糊尺寸设置为合适的值,文本颜色随意,阴影颜色要设置亮眼的颜色。看下面例子:</p>
<p><br></p>
<div class="chj_code">
        <p>&lt;style&gt;</p>
        <p><span style="color: red;">.txtshadow1 </span>{</p>
        <p>        <span style="color: blue;">font</span>: bold 4em sans-serif;</p>
        <p>        <span style="color: blue;">text-shadow</span>: 0px 0px 1px red;</p>
        <p>        <span style="color: blue;">color</span>: snow;</p>
        <p>}</p>
        <p>&lt;/style&gt;</p>
        <p><br></p>
        <p>&lt;<span style="color:darkred">pre</span> <span style="color: red">class</span><span style="color: blue">=</span><span style="color: magenta">"txtshadow1"</span>&gt;</p>
        <p>        ABCDEF</p>
        <p>        abcdef</p>
        <p>        花潮论坛</p>
        <p>        花潮論壇</p>
        <p>&lt;<span style="color: darkred">/pre</span>&gt;</p>
</div>
<pre class="txtshadow1">        ABCDEF
        abcdef
        花潮论坛
        花潮論壇
</pre>
<p><br></p>
<p>效果是有,但确实差强人意,原因是我们仅仅利用了模糊尺寸来描边,即便使用了很亮的颜色,依然显得不够清晰。</p>
<p><br></p>
<p>方法三:多重使用 text-shadow 属性</p>
<p><br></p>
<p>设想就是设置几重阴影,让这些阴影以闭合方式将文字包裹起来,看看例子:</p>
<p><br></p>
<div class="chj_code">
        <p>&lt;style&gt;</p>
        <p><span style="color: red;">.txtshadow2 </span>{</p>
        <p>        <span style="color: blue;">font</span>: bold 4em sans-serif;</p>
        <p>        <span style="color: blue;">text-shadow</span>: 1px 0px 1px red, 0px 1px 1px red, -1px 0px 1px red, 0px -1px 1px red;</p>
        <p>        <span style="color: blue;">color</span>: snow;</p>
        <p>}</p>
        <p>&lt;/style&gt;</p>
        <p><br></p>
        <p>&lt;<span style="color:darkred">pre</span> <span style="color: red">class</span><span style="color: blue">=</span><span style="color: magenta">"txtshadow2"</span>&gt;</p>
        <p>        ABCDEF</p>
        <p>        abcdef</p>
        <p>        花潮论坛</p>
        <p>        花潮論壇</p>
        <p>&lt;<span style="color: darkred">/pre</span>&gt;</p>
</div>
<pre class="txtshadow2">        ABCDEF
        abcdef
        花潮论坛
        花潮論壇
</pre>
<p><br></p>
<p>以上三种方法,后两种兼容性好,第一种属试验阶段。孰优孰劣,难以定论,根据情况选择使用就行。</p>
<p><br></p>
<p>基于CSS+HTML的描边字效果,可能还有其他奇技淫巧的法子,不过估计会很繁琐,这里就不探讨了,有兴趣的朋友可以自行研究。</p>

<script>
(function setLineNum() {
        let code_papas = document.querySelectorAll('.chj_code');
        Array.from(code_papas).forEach( (item,key) => {
                let pps = item.children;
                Array.from(pps).forEach( (p,pkey) => {
                        p.setAttribute('data-line', pkey + 1);
                });
        });       
})();
</script>

红影 发表于 2023-2-6 14:36

第一种就是空心字吧,给出外轮廓。黑黑介绍过的。后面两种都是用阴影的模糊值来描边。第三种最神奇,单独给出4个方向的阴影值和空心模糊值,得到的效果和第一种差不多呢{:4_187:}

红影 发表于 2023-2-6 14:38

用阴影描边,想描得清晰,要用第三种就行了。这样用实际效果来讲解最清晰了。真赞。跟着黑黑学习新知识{:4_187:}

庶民 发表于 2023-2-6 15:50

文化大讲堂,我旁听。

马黑黑 发表于 2023-2-6 17:44

庶民 发表于 2023-2-6 15:50
文化大讲堂,我旁听。

超感谢

马黑黑 发表于 2023-2-6 17:44

红影 发表于 2023-2-6 14:38
用阴影描边,想描得清晰,要用第三种就行了。这样用实际效果来讲解最清晰了。真赞。跟着黑黑学习新知识{:4_ ...

简简单单,一看就明白

马黑黑 发表于 2023-2-6 17:45

红影 发表于 2023-2-6 14:36
第一种就是空心字吧,给出外轮廓。黑黑介绍过的。后面两种都是用阴影的模糊值来描边。第三种最神奇,单独给 ...

这是你说的殊途同归

红影 发表于 2023-2-6 22:20

马黑黑 发表于 2023-2-6 17:44
简简单单,一看就明白

是的,有讲解有实例,对比着看最清楚了{:4_199:}

红影 发表于 2023-2-6 22:21

马黑黑 发表于 2023-2-6 17:45
这是你说的殊途同归

要想殊途同归,也需要有技术手段去实现呢{:4_199:}

马黑黑 发表于 2023-2-6 23:50

红影 发表于 2023-2-6 22:21
要想殊途同归,也需要有技术手段去实现呢

努力一下下就行

马黑黑 发表于 2023-2-6 23:50

红影 发表于 2023-2-6 22:20
是的,有讲解有实例,对比着看最清楚了

{:4_190:}

红影 发表于 2023-2-7 10:44

马黑黑 发表于 2023-2-6 23:50
努力一下下就行

看到文字描边,又想起你那个描边会动的帖子了,当然,那个是SVG的{:4_173:}

红影 发表于 2023-2-7 10:46

马黑黑 发表于 2023-2-6 23:50


从这个帖子里知道了,直接用文字阴影做描边,并不是很清晰。当然,有时要的就是这个,当需要清晰的时候,不能直接只使用阴影。

醉美水芙蓉 发表于 2023-2-7 12:02

马黑黑 发表于 2023-2-7 12:05

醉美水芙蓉 发表于 2023-2-7 12:02
老师做教程很辛苦!大力支持一下!感谢黑黑老师的分享!

{:4_190:}

马黑黑 发表于 2023-2-7 12:08

红影 发表于 2023-2-7 10:46
从这个帖子里知道了,直接用文字阴影做描边,并不是很清晰。当然,有时要的就是这个,当需要清晰的时候, ...

多重阴影还是可以的

马黑黑 发表于 2023-2-7 12:09

红影 发表于 2023-2-7 10:44
看到文字描边,又想起你那个描边会动的帖子了,当然,那个是SVG的

对,这里是纯CSS+HTML的

红影 发表于 2023-2-7 20:18

马黑黑 发表于 2023-2-7 12:08
多重阴影还是可以的

多重阴影的效果通过这个帖子也感受更深了,谢谢黑黑{:4_187:}

红影 发表于 2023-2-7 20:18

马黑黑 发表于 2023-2-7 12:09
对,这里是纯CSS+HTML的

嗯嗯,这个是讲解技术的{:4_204:}

马黑黑 发表于 2023-2-7 20:45

红影 发表于 2023-2-7 20:18
多重阴影的效果通过这个帖子也感受更深了,谢谢黑黑

喝水{:4_191:}
页: [1] 2
查看完整版本: css+html文本描边的几种实现方法