목차
活版文本
描边文本
CSS" > CSS
发光文本
立体文字
웹 프론트엔드 HTML 튜토리얼 CSS秘密花园: 逼真的文本效果_html/css_WEB-ITnose

CSS秘密花园: 逼真的文本效果_html/css_WEB-ITnose

Jun 24, 2016 am 11:22 AM

《 CSS Secrets 》是 @Lea Verou 最新著作,这本书讲解了有关于CSS中一些小秘密。是一本CSSer值得一读的一本书,经过一段时间的阅读,我、@南北和@彦子一起将在W3cplus发布一系列相关的读后感,与大家一起分享。

有时候,某些文本处理在Web上变得非常普遍。例如,活版文本、悬停模糊文本、凸出的(伪3D)文本等等。这些效果通常是由精心打造的文本阴影的效果、还有我们眼睛的工作原理来组合而成的,很多在一定程度上都是基于视觉错位的。一旦你知道这些效果涉及到的技巧,你就会发现这其实是很容易完成的,但是通过开发工具来逆向工程却总是不那么容易的。

本节就是要创建这样的效果,这样你就不会再疑惑说,“这样的效果到底是怎么完成的?”

活版文本

活版文本效果是skeuomorphic设计网站最最流行的文本处理方式之一。尽管skeuomorphic设计已经不像以前那么流行了,但是它还是有很多忠实粉丝的。

这个效果最好用于暗色文本搭配中等亮度背景的情况中,但是它也可以用于较暗背景下有较亮文本的情况下,只要文本不是黑色的以及背景也不是全白或全黑的。

它基于相同的前提,已经在最开始的GUI中用于创建按压或凸出按钮的感觉:在底部有一个较亮的阴影(或在顶部有较暗的阴影)创建了一个对象被“刻在”表面上的假象。类似的,在底部有一个较暗的阴影(或在顶部有较亮的阴影),创建了一个对象被从表面挤出的错觉。它的工作原理是,我们通常假设光源是在我们之上的,所以表面凸出的对象会在它下面创建一个阴影,一个凹进去的对象在底部会很亮。

在使用这样的效果的时候,很容易放弃可访问性,但是不要忘记测试其对比度( leaverou.github.io/contrast-ratio 是一个非常好用的工具,因为它接受任何支持CSS颜色格式

我们从使用下图的颜色开始。

文本颜色是 hsl(210, 13%, 30%) ,背景颜色是 hsl(210, 13%, 60%) :

background: hsl(210, 13%, 60%);color: hsl(210, 13%, 30%);
로그인 후 복사

当我们在较暗的背景上有较亮的文本时(像我们这里的示例),在底部有一个较亮的阴影比较合适。亮度的话取决于你想要的效果以及确切的颜色,所以你需要用 alpha 参数做一些试验,直到找到合适的亮度值。这里,我们选定了 80% 透明度的白色,你的值可能不一样:

background: hsl(210, 13%, 60%);color: hsl(210, 13%, 30%);text-shadow: 0 1px 1px hsla(0,0%,100%,.8);
로그인 후 복사

你可以在上图中看到效果。这里,我们使用像素作为单位,而不是 em ,但是如果你的文本尺寸是不确定的,可能非常小也可能非常大,用 em 可能更好:

text-shadow: 0 .03em .03em hsla(0,0%,100%,.8);
로그인 후 복사

如果是一个较暗的背景上有一个较亮的文本会怎样呢?如果颜色被逆转:

我们的阴影可能会产生可怕的结果,我们的文本会模糊不清。这是不是说我们在这种情况下就不能使用活版效果了呢?不不不不,我们只是需要调整我们的方法。在这里,应该在顶部放一个较暗的阴影,如图所示。

CSS代码如下:

background: hsl(210, 13%, 40%);color: hsl(210, 13%, 75%);text-shadow: 0 -1px 1px black;
로그인 후 복사

描边文本

在将来, outline / stroke 文本将会变得非常容易,因为我们只需要使用 text-shadow 的 spread 参数就可以让它们变大,这样看起来就像描边效果,类似于我们使用 box-shadow 的 spread 参数来模拟 outline 一样。可惜,目前的浏览器支持情况是非常有限的,所以我们需要找其它方式来模拟它,或多或少是令人满意的结果。

最普遍的方法是给图层应用多个不同偏移量的 text-shadow 值:

background: deeppink;color: white;text-shadow: 1px 1px black, -1px -1px black, 1px -1px black, -1px 1px black;
로그인 후 복사

效果如下图所示:

通过 text-shadow 的spread参数完成的描边文本

通过应用多层 text-shadow 完成的 1px 的outline

或者,不用偏移量,你可以给图层应用多个模糊阴影:

text-shadow: 0 0 1px black, 0 0 1px black,             0 0 1px black, 0 0 1px black,             0 0 1px black, 0 0 1px black;
로그인 후 복사

但是,这产生的效果并不是非常好,而且性能方面非常昂贵,因为模糊。

更糟的是,描边越粗,这两个方法产生的效果更糟糕。例如,看看一个 3px 的 outline 看起来多糟糕:

background: deeppink;color: white;text-shadow: 3px 3px black, -3px -3px black,             3px -3px black, -3px 3px black;
로그인 후 복사

效果如下图所示:

一个糟糕的 3px 的outline,通过多个带有不同偏移量的 text-shadow 创建的

这通常需要使用SVG来解决,但是它会给我们的HTML标签添加很多冗余。例如假设我们想要在第一级标题中使用它。HTML标签如下:

<h1 id="svg-width-em-height-em-use-xlink-href-css-text-id-css-y-em-CSS-text-svg"><svg width="2em" height="1.2em">    <use xlink:href="#css" />    <text id="css" y="1em">CSS</text></svg></h1>
로그인 후 복사

然后在CSS中,我们需要这样写:

h1 {    font: 500%/1 Rockwell, serif;    background: deeppink;    color: white;}h1 text {    fill: currentColor;}h1 svg { overflow: visible }h1 use {    stroke: black;    stroke-width: 6;    stroke-linejoin: round;}
로그인 후 복사

这当然不理想,但是它产生了最佳的视觉效果

而且即使是在不支持SVG的古老的浏览器中,文本仍然是可读的、添加了样式的、可抓取的。

发光文本

发光文本在悬停链接、或某些类型网站的标题上都是一种颇为常见的效果。这也是最容易创建的效果之一。最简单的形式是你只需要使用一组分层的 text-shadow ,而不需要任何偏移量,颜色也和文本一样:

background: #203;color: #ffc;text-shadow: 0 0 .1em, 0 0 .3em;
로그인 후 복사

效果如下图所示:

如果是做一个悬停效果,你需要应用一个过渡,如下:

a {    background: #203;    color: white;    transition: 1s;}a:hover {    text-shadow: 0 0 .1em, 0 0 .3em;}
로그인 후 복사

你可以在 :hover 时通过隐藏文本创建一个更有趣的效果,让它看起来好像是慢慢变模糊了:

a {    background: #203;    color: white;    transition: 1s;}a:hover {    color: transparent;    text-shadow: 0 0 .1em white, 0 0 .3em white;}
로그인 후 복사

效果如下图所示:

但是,记住依赖 text-shadow 给文本添加效果的话,通常没有优雅的降级:如果 text-shadow 不被支持的话,应用的文本都不会显示。所以你需要谨慎使用,在支持 text-shadow 的环境中才应用它。或者,你也可以通过CSS滤镜来模糊文本:

a {    background: #203;    color: white;    transition: 1s;}a:hover {    filter: blur(.1em);}
로그인 후 복사

这种方法的浏览器支持可能更差,但是至少在缺少支持的时候不会影响到原来的内容。

立体文字

在skeuomorphically设计网站的另一个流行(或者是过度使用)效果是立体(伪3D)文本。

其主要思想是有大量堆积阴影,没有模糊,只有 1px 的区别,使其逐渐变暗,在最后带有一个高度模糊的深色阴影,模拟阴影。

我们使用上图中的文本作为开始,已经应用了简单的CSS代码添加样式:

background: #58a;color: white;
로그인 후 복사

现在我们添加一些逐渐变暗的 text-shadow :

background: #58a;color: white;text-shadow: 0 1px hsl(0,0%,85%),             0 2px hsl(0,0%,80%),             0 3px hsl(0,0%,75%),             0 4px hsl(0,0%,70%),             0 5px hsl(0,0%,65%);
로그인 후 복사

如上图所示,我们完成得差不多了,但是结果看起来还是很不真实。但是~我们想要它变成如下图那样的效果

只需要在底部再添加一个阴影即可:

background: #58a;color: white;text-shadow: 0 1px hsl(0,0%,85%),             0 2px hsl(0,0%,80%),             0 3px hsl(0,0%,75%),             0 4px hsl(0,0%,70%),             0 5px hsl(0,0%,65%),             0 5px 10px black;
로그인 후 복사

这种重复的、笨重的代码的首要候补就是使用预处理器的mixin啦。在SCSS中我们可以像这样写:

@mixin text-3d($color: white, $depth: 5) {    $shadows: ();    $shadow-color: $color;    @for $i from 1 through $depth {    $shadow-color: darken($shadow-color, 10%);    $shadows: append($shadows,    0 ($i * 1px) $shadow-color, comma);}color: $color;    text-shadow: append($shadows,    0 ($depth * 1px) 10px black, comma);}h1 { @include text-3d(#eee, 4); }
로그인 후 복사

这种效果有许多变体。例如,把所有的阴影变成 black ,然后移除最后一个阴影的模糊,你可以模拟一个经常能在旧/复古的标签中看到的印刷效果:

color: white;background: hsl(0,50%,45%);text-shadow: 1px 1px black, 2px 2px black,             3px 3px black, 4px 4px black,             5px 5px black, 6px 6px black,             7px 7px black, 8px 8px black;
로그인 후 복사

效果如下图所示:

这个要转换成mixin更容易,或者说用一个函数来实现更恰当,

@function text-retro($color: black, $depth: 8) {    $shadows: (1px 1px $color,);    @for $i from 2 through $depth {        $shadows: append($shadows,        ($i*1px) ($i*1px) $color, comma);    }    @return $shadows;}h1 {    color: white;    background: hsl(0,50%,45%);    text-shadow: text-retro();}
로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML은 초보자를 위해 쉽게 배우나요? HTML은 초보자를 위해 쉽게 배우나요? Apr 07, 2025 am 12:11 AM

HTML은 간단하고 배우기 쉽고 결과를 빠르게 볼 수 있기 때문에 초보자에게 적합합니다. 1) HTML의 학습 곡선은 매끄럽고 시작하기 쉽습니다. 2) 기본 태그를 마스터하여 웹 페이지를 만들기 시작하십시오. 3) 유연성이 높고 CSS 및 JavaScript와 함께 사용할 수 있습니다. 4) 풍부한 학습 리소스와 현대 도구는 학습 과정을 지원합니다.

HTML, CSS 및 JavaScript의 역할 : 핵심 책임 HTML, CSS 및 JavaScript의 역할 : 핵심 책임 Apr 08, 2025 pm 07:05 PM

HTML은 웹 구조를 정의하고 CSS는 스타일과 레이아웃을 담당하며 JavaScript는 동적 상호 작용을 제공합니다. 세 사람은 웹 개발에서 의무를 수행하고 화려한 웹 사이트를 공동으로 구축합니다.

HTML의 시작 태그의 예는 무엇입니까? HTML의 시작 태그의 예는 무엇입니까? Apr 06, 2025 am 12:04 AM

anexampleStartingtaginhtmlis, whithbeginsaparagraph.startingtagsareessentialinhtmlastheyinitiate rements, definetheirtypes, andarecrucialforstructurituringwebpages 및 smanstlingthedom.

HTML, CSS 및 JavaScript 이해 : 초보자 안내서 HTML, CSS 및 JavaScript 이해 : 초보자 안내서 Apr 12, 2025 am 12:02 AM

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

웹 주석에서 y 축 위치의 적응 형 레이아웃을 구현하는 방법은 무엇입니까? 웹 주석에서 y 축 위치의 적응 형 레이아웃을 구현하는 방법은 무엇입니까? Apr 04, 2025 pm 11:30 PM

웹 주석 기능에 대한 Y 축 위치 적응 알고리즘이 기사는 Word 문서와 유사한 주석 기능을 구현하는 방법, 특히 주석 간격을 다루는 방법을 모색합니다 ...

Gitee Pages 정적 웹 사이트 배포 실패 : 단일 파일 문제를 해결하고 해결하는 방법 404 오류? Gitee Pages 정적 웹 사이트 배포 실패 : 단일 파일 문제를 해결하고 해결하는 방법 404 오류? Apr 04, 2025 pm 11:54 PM

GiteEpages 정적 웹 사이트 배포 실패 : 404 오류 문제 해결 및 해결시 Gitee ...

HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구 HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구 Apr 09, 2025 am 12:12 AM

HTML, CSS 및 JavaScript는 웹 개발의 세 가지 기둥입니다. 1. HTML은 웹 페이지 구조를 정의하고 등과 같은 태그를 사용합니다. 2. CSS는 색상, 글꼴 크기 등과 같은 선택기 및 속성을 사용하여 웹 페이지 스타일을 제어합니다.

CSS3 및 JavaScript를 사용하여 클릭 후 주변 사진을 흩어지고 확대하는 효과를 얻는 방법은 무엇입니까? CSS3 및 JavaScript를 사용하여 클릭 후 주변 사진을 흩어지고 확대하는 효과를 얻는 방법은 무엇입니까? Apr 05, 2025 am 06:15 AM

이미지를 클릭 한 후 주변 이미지를 산란 및 확대하는 효과를 얻으려면 많은 웹 디자인이 대화식 효과를 달성해야합니다. 특정 이미지를 클릭하여 주변을 만들 수 있습니다 ...

See all articles