CSS图像替换:文本缩进,负边距以及更多方法

转自微信公众号——前端早读课
前言
看完这篇又get到除了缩进以外的11种图像替换的方法了,本文由众成翻译@伊一带来的分享。

正文从这开始~

CSS中的图像替换有着广泛而多样的历史。如今,如果你还想这么做,有很多至今仍然有效的图像置换技术。必须注意的是,其中一些实际上可能很快(如果不是已经) 会被Google批判,所以要谨慎使用。然而,你很难知道什么时候一个CMS或者项目会迫使你需要get out图像替换kit!这里是过去的kit,在web完全落实之前,这可能是最后一份你需要的图像替换技术列表。

使用负的文本缩进 — Phark 方法
这是web开发人员在某些情况下使用的最普遍的技术。这里的想法是通过设置一个很大的负text-indent,让文本远离浏览器窗口:

图片.png

这里有一个CodePen演示,展示了使用text-indent隐藏文本时标题的样子:
查看笔记 图像替换 – 缩进方法,作者 SitePoint (@SitePoint),在CodePen。

使用这种方法,文本仍然可以被屏幕阅读器获取到。然而,当文本右对齐的时侯,这种方法就行不通了。由于这个text-indent,浏览器也需要为我们的标题渲染一个非常大的盒子,这在一些很老旧的设备中可能会产生问题。

Scott Kellum 方法
与其设置一个很大的负text-indent,你可以设置它为100%。这种方法下,浏览器不需要创建一个很大的盒子,性能会得到提升。你不需要任何额外的标记就可以使用这个方法。你需要的CSS如下:

图片.png

设置overflow为hidden可以隐藏文本,whitespace:nowrap 可以阻止换行。这种方法下,阅读器仍然可以读取文本。这里有一个这项技术的演示:
查看笔记 图像替换 – ScottKellum 方法,作者 SitePoint (@SitePoint),在CodePen。

使用边距 — Radu Darvas 方法
这项技术仍然是强制文本在浏览器窗口之外,但是是利用边距去做的。这个想法是应用一个很大的负的左边距,并且给标题一个相对大的宽度。

图片.png

和上一种情况一样,我们的logo被用作标题的一个背景图片。这里有一个演示,展现了这项技术是如何起作用的,首先是没有边距的,然后应用这个边距:
查看笔记 图像替换 – Margin 方法,作者 SitePoint (@SitePoint),在CodePen。

如果一直滚动到右边,你最终会看到第一个标题的背景。实际上,你不必担心滚动条,因为这个大的负边距补偿了宽度(就像你在第二个标题中见到的)。记住,这种方法对于浏览器执行来说并不高效,因为浏览器不得不画一个非常大的盒子。

使用内边距 — Langridge 方法
这次我们使用padding-top 属性把文本推出我们的标题之外。这个属性的值会被设置成与logo的高相等。然而,仅仅这些是不够的,我们还需要使用overflow: hidden来隐藏文本。

图片.png

和之前的两种方法相比,这个属性可以表现出更好的性能。它也提供了和之前两种方法相同水平的可访问性。如下是这个技术的一个演示,第一个标题没有填充背景,第二个有:
查看笔记 图像替换 – 内边距方法,作者 SitePoint (@SitePoint),在 CodePen。

使用小的font-size — Lindsay 方法
另一种隐藏文本的方法是让它变得非常小,并且将它的颜色设置成logo的背景。这种方法不会影响可访问性,但是由于微小的字体和伪装的颜色,你可能会遇到SEO困难。

图片.png

这里有个该方法的演示,第一个图像没有设置font-size,而是在第二个图像中起了作用:
查看笔记 图像替换 – font-size 方法,作者 SitePoint (@SitePoint),在 CodePen。

如果你的logo没有一个单一的背景色来允许完美的混合,你仍然会遇到困难。这种情况下,你可以把颜色设置成transparent。

使用 Display — Fahrner 图像置换
和其他方法不同,这个方法需要你增加额外的标记。这里的想法是把文本包裹进一个元素,并且设置它的display属性为none。这个案例中的标记可以是:

图片.png

CSS可以是:

图片.png

这里有一个演示,将我们的元素的display设置成none:
查看笔记 图像替换 – Display 方法,作者 SitePoint (@SitePoint),在CodePen。

这个方法虽然很容易实现,但是缺乏可访问性。这是因为display设置成none的元素会被屏幕阅读器忽略。当visibility设置成hidden时,同样的问题也会发生,所以你也不能用那个。你可以设置opacity为0。这样将会隐藏元素,同时保持它仍然可以被屏幕阅读器访问。

使用 Overflow — Leon Dwyer 方法
我们已经在增加一些内边距之后,使用过overflow属性来隐藏文本。这次我们将仅仅使用overflow属性来彻底隐藏元素。使用这个技术需要,你将你的文本像之前那种方法一样包裹进一个元素中。这次我们的CSS看起来像这样:

图片.png

我们将span元素的宽和高都设置成0。这会强制元素内的文本移到它的盒子外。接着文本会被overflow: hidden属性隐藏。这里有一个CodePen演示说明了这项技术:
查看笔记 图像替换 – Overflow 方法,作者 SitePoint (@SitePoint),在 CodePen。
文本仍然可以被屏幕阅读器访问。因此,这里不会有可访问性的问题。

使用绝对定位 — Levin 方法
这个方法也需要一个额外的元素来工作。然而,这个元素不是包裹在文本周围的,而是用于定位我们的图像。这里是这个方法的标记:

图片.png

这是CSS:

图片.png

使用绝对定位来图像置换的演示可以在下面看到:
查看笔记 图像替换 – 绝对定位方法,作者 SitePoint (@SitePoint),在 CodePen。

注意,为了完全覆盖我们的标题元素,宽和高都设置成了100% 。这个方法的唯一问题是你使用的图片必须是完全不透明的。如果不是这样的话,用户将可以透过你的图像看到文本。

使用一个伪造的图像 — Radu Darvas Shim
这个方法除了我们平常的元素之外,还需要一个伪造的图像来正常工作。这个图像是一个 1×1 像素、透明的 GIF。它的主要目的是如果图片不能显示,将显示给用户替代的文本。标记如下:

图片.png

这是你需要应用的CSS:

图片.png

下面的演示应该会让你清楚明白这个方法是如何起效的:
查看笔记 图像替换 – 伪造图像方法,作者 SitePoint (@SitePoint),在 CodePen。

尽管真实的文本被隐藏了,屏幕阅读器仍然可以读到替换的标签。所以,这个方法不会造成任何可访问性的问题。唯一的问题就是这里的标签是非语义化的和伪造的。此外,如果CSS和图像都被关闭的话,你将会看到这个文本两次。

使用真实的图像 — 使用内联图像的 Phark 方法
这次,我们将使用一个真实的图像来做图像替换。这个图像有替换的文本,在图像不能显示时会显示出来。标记如下:

图片.png

下面的CSS做了真正的替换:

图片.png

下面的演示说明了这个技术是如何工作的:
查看笔记 图像替换 – 真实图像技术,作者 SitePoint (@SitePoint),在 CodePen。

你将会看到的图像不是来自标签,而是来自background属性。除了我们之前讨论过的使用大的负文本缩进带来的问题,这项技术似乎也不利于SEO。这项技术优于其他方法的一个优点是,在CSS关闭的情况下图像依然可见并且保持存在,但是问题是你为什么不直接使用它自己的图像呢...

使用 Clip-path
属性clip-path可以隐藏你指定的路径之外的所有东西。我们可以用它裁剪文本并将它隐藏。这个文本仍然可以被屏幕阅读器访问,只是被视觉上隐藏了。标记如下:

图片.png

这是你需要应用的 CSS :

图片.png

你可以修改clip-path的值来看看文本是怎么被裁剪的:

这个方法的唯一问题就是浏览器目前还没有完全支持。SitePoint 最近关于clip-path属性发布了一篇文章,进行了更详细的论述。浏览器一旦开始支持它,图像替换技术就会变得多余且没有必要了。

使用伪元素 — Nash 图像替换
这个技术使用一个伪元素把文本抛到一边。标记如下:

图片.png

下面的 CSS 使这项技术生效:

这里有一个技术演示:

图片.png

这个伪元素将文本挤到一边。文本溢出,会被overflow: hidden 属性隐藏。这项技术的一个问题是它只能工作在InternetExplorer 8 及以上。

总结
这个作者还写了:
在CSS中隐藏元素的五种方法
全面讨论jQuery中的事件

上述讨论的每个方法都有自己的优缺点。总的来说,他们都将不利于SEO,如果你可以完全避免使用它 — 那么现在是时候摆脱它们了!在 SitePoint 接下来的一篇文章中,我们将会看到行业里是如何摆脱他们的,并且了解目前最好的方法是什么。如果你想到了任何其他的方法,或者你对于我们讨论的技术有所补充,可以在下面评论。

来自 PatCat (30/06/2016) 的更新: 这篇文章起初说到在网站标题中使用图像可能会对SEO和可访问性有负面影响。这不是真的。实际上,由于Google正在为图像替换做准备工作,情况可能相反。我已经修改了这篇文章, 谢谢你们的评论!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容