CSS3 文本样式

494 阅读4分钟

在 CSS3 中,增加了丰富的文本修饰效果,使得页面更加美观,常用的文本属性有:文本阴影、描边、溢出、强制换行、嵌入字体等。

一、文本阴影:text-shadow

1、W3C 坐标系

W3C 的坐标系和数学坐标系不同,它的 y 轴正方向是往下的:

image.png

2、text-shadow 属性简介

如果要为文字添加阴影效果,可以使用 text-shdow 属性实现,语法如下:

text-shadow:x-offset y-offset blur color

x-offset 是水平阴影,表示阴影的水平偏移距离,如果值为正,则阴影向右偏移,为负则向左偏移;

y-offset 是垂直阴影,表示阴影的垂直偏移距离,如果值为正,则阴影向下偏移,为负则向上偏移;

blur 是模糊距离,表示阴影的模糊程度,值越大,越模糊,且不能为负数,如果不需要模糊效果,可以设为 0 ;

color 是阴影的颜色。

一般文字阴影效果:

<!DOCTYPE html>
<html>
    <head>
        <meta name="keywords" content="个人主页,HTML学习笔记"/>
        <meta name="author" content="Like_Frost"/>
        <meta name="description" content="学习示例"/>
        <meta name="copyright" content="版权所有,转载前请联系"/>
        <style type="text/css">
            .shadow{
                font-size: 30px;
                text-shadow: 4px 4px 2px gray;
            }
        </style>
    </head>
    <body>
        <div class="shadow">Like_Frost</div>
</html>

效果如下:

image.png

文字凸起效果:

<!DOCTYPE html>
<html>
    <head>
        <meta name="keywords" content="个人主页,HTML学习笔记"/>
        <meta name="author" content="Like_Frost"/>
        <meta name="description" content="学习示例"/>
        <meta name="copyright" content="版权所有,转载前请联系"/>
        <style type="text/css">
            .shadow{
                height: 200px;
                width: 200px;
                background-color: gray;
                text-align: center;
                vertical-align: middle;
                display: table-cell;
                font-size: 30px;
                font-weight: bold;
                color: rgb(148, 147, 147);
                text-shadow: -1px 0 0 white,
                             0 -1px 0 white,
                             1px 0 0 gray,
                             0 1px 0 gray;
            }
        </style>
    </head>
    <body>
        <div class="shadow">Like_Frost</div>
</html>

令向左和向上的阴影颜色为白色,文本会出现凸起效果:

image.png

文字凹陷效果:

<!DOCTYPE html>
<html>
    <head>
        <meta name="keywords" content="个人主页,HTML学习笔记"/>
        <meta name="author" content="Like_Frost"/>
        <meta name="description" content="学习示例"/>
        <meta name="copyright" content="版权所有,转载前请联系"/>
        <style type="text/css">
            .shadow{
                height: 100px;
                width: 200px;
                background-color: gray;
                text-align: center;
                vertical-align: middle;
                display: table-cell;
                font-size: 30px;
                font-weight: bold;
                color: rgb(148, 147, 147);
                text-shadow: -1px 0 0 gray,
                             0 -1px 0 gray,
                             1px 0 0 white,
                             0 1px 0 white;
            }
        </style>
    </head>
    <body>
        <div class="shadow">Like_Frost</div>
</html>

令向右和向下的阴影颜色为白色,文本会出现凹陷效果:

image.png

定义多个阴影

可以为文本定义多个不同的阴影,中间使用逗号隔开,阴影回从左到右应用到文字上,可能会出现互相覆盖的情况,但不会覆盖文字本身,也不会改变字体大小。

有如下示例:

<!DOCTYPE html>
<html>
    <head>
        <meta name="keywords" content="个人主页,HTML学习笔记"/>
        <meta name="author" content="Like_Frost"/>
        <meta name="description" content="学习示例"/>
        <meta name="copyright" content="版权所有,转载前请联系"/>
        <style type="text/css">
            .shadow{
                font-size: 30px;
                font-weight: bold;
                text-shadow: 10px 10px 0 gray,
                             20px 20px 0 red,
                             30px 30px 0 yellowgreen;
            }
        </style>
    </head>
    <body>
        <div class="shadow">Like_Frost</div>
</html>

浏览器中效果如下,排在前面的阴影能够覆盖后面的阴影:

image.png

二、文本描边 text-stroke

可以使用此属性给文本实现描边效果,使用方式:

text-stroke:width color

实际上是 text-stroke-width (描边宽度)和 text-stroke-color(描边颜色)两个子属性组成,示例如下:

<!DOCTYPE html>
<html>
    <head>
        <meta name="keywords" content="个人主页,HTML学习笔记"/>
        <meta name="author" content="Like_Frost"/>
        <meta name="description" content="学习示例"/>
        <meta name="copyright" content="版权所有,转载前请联系"/>
        <style type="text/css">
            .stroke{
                color: white;
                font-size: 50px;
                font-weight: bold;
                -webkit-text-stroke: 2px yellowgreen;
            }
        </style>
    </head>
    <body>
        <div class="stroke">Like_Frost</div>
</html>

效果如下:

image.png

Chrome 和 Firefox 都只能识别 -webkit- 前缀的 text-stroke 属性。

三、文本溢出 text-overflow

当文本超出一定范围时,如果想用省略号代替,可以使用 text-overflow 来实现,其取值有两个:ellipsis(以省略号代替溢出文字)和 clip(直接裁剪掉溢出文字),要配合 white-space 和 overflow 使用:

<!DOCTYPE html>
<html>
    <head>
        <meta name="keywords" content="个人主页,HTML学习笔记"/>
        <meta name="author" content="Like_Frost"/>
        <meta name="description" content="学习示例"/>
        <meta name="copyright" content="版权所有,转载前请联系"/>
        <style type="text/css">
            div{
                width: 100px;
                height: 50px;
                border: 1px solid black;
            }
            .wrap{
                overflow: hidden;
                white-space: nowrap;
                text-overflow: ellipsis;
            }
            .chip{
                overflow: hidden;
                white-space: nowrap;
                text-overflow: chip;
            }
        </style>
    </head>
    <body>
        <div>示例示例示例示例示例示例</div>
        <div class="wrap">示例示例示例示例示例示例</div>
        <div class="chip">示例示例示例示例示例示例</div>
</html>

第一个 div 为默认样式,第二个 div 为省略号效果,第三个 div 为直接裁剪:

image.png

这种方式只能实现单行文本的省略号效果,要想实现多行省略号,需要借助 JS 或 JQ。

四、强制换行 word-wrap、word-break

这两个属性用于定义长单词或者 URL 地址是否换行到下一行。

word-wrap 取值:

属性值说明
normal自动换行(默认值)
break-word强制换行

word-break 取值:

属性值说明
normal自动换行(默认值)
break-all允许在单词内换行
keep-all只能在半角空格或连字符处换行

一般情况下,只会使用 word-wrap:break-word 和 word-break:break-all 这两个来实现强制换行,其他属性不用了解。

有如下示例:

<!DOCTYPE html>
<html>
    <head>
        <meta name="keywords" content="个人主页,HTML学习笔记"/>
        <meta name="author" content="Like_Frost"/>
        <meta name="description" content="学习示例"/>
        <meta name="copyright" content="版权所有,转载前请联系"/>
        <style type="text/css">
            div{
                width: 200px;
                height: 80px;
                border: 1px solid black;
            }
            .div1{
                word-wrap: break-word;
            }
            .div2{
                word-break: break-all;
            }
        </style>
    </head>
    <body>
        <div>Welcome, please visit my home page: https://juejin.cn/user/3826721310116519</div>
        <div class="div1">Welcome, please visit my home page: https://juejin.cn/user/3826721310116519</div>
        <div class="div2">Welcome, please visit my home page: https://juejin.cn/user/3826721310116519</div>
</html>

在浏览器中效果:

image.png

当未给元素设置折行效果时,单词自动折行, URL 不折行,会溢出;使用 word-wrap: break-word; 会首先尝试挪到下一行,下一行宽度不够在折行;使用 word-break: break-all; 直接强制换行。

五、嵌入字体 @font-face

如果想要所有用户电脑山都能正常显示同一种字体,可以用 @font-face 来加载服务器端的字体,语法如下:

    @font-face{
        font-family:字体名称;
        src:url(文件路径);
    }

font-family 属性用于定义字体的名称,示例如下:

<!DOCTYPE html>
<html>
    <head>
        <meta name="keywords" content="个人主页,HTML学习笔记"/>
        <meta name="author" content="Like_Frost"/>
        <meta name="description" content="学习示例"/>
        <meta name="copyright" content="版权所有,转载前请联系"/>
        <style type="text/css">
            @font-face {
                font-family: myfont;
                src: url(Inkfree.ttf);
            }
            div{
                font-family: myfont;
                font-size: 100px;
            }
        </style>
    </head>
    <body>
        <div>abcd123</div>
</html>

效果如下:

image.png

并不建议使用这个方式来嵌入字体,因为中文字体文件大多数都是 10MB 以上,会严重影响页面的加载速度,而英文字体文件往往只有几十 KB,可以引入。

六、字体火焰效果

<!DOCTYPE html>
<html>
    <head>
        <meta name="keywords" content="个人主页,HTML学习笔记"/>
        <meta name="author" content="Like_Frost"/>
        <meta name="description" content="学习示例"/>
        <meta name="copyright" content="版权所有,转载前请联系"/>
        <style type="text/css">
            div{
                font-size: 40px;
                font-weight: 900;
                color: rgb(231, 67, 67);
                text-shadow: 0 0 4px white,
                             0 -5px 5px rgb(250, 173, 30),
                             0 -8px 5px rgb(255, 243, 132);
                             
            }
        </style>
    </head>
    <body>
        <div>火焰字</div>
</html>

效果如下:

image.png