【问题标题】:should link icons be rendered as images or with css background-image url's?应该将链接图标呈现为图像还是使用 css 背景图像 url?
【发布时间】:2011-06-10 16:57:30
【问题描述】:

我想在 Web UI 中使用图标,同时保留单击链接将实现的上下文语言,但可能不显示文本和拥挤的 UI 空间。例如,使用 CRUD 屏幕,我想显示一个用于添加项目的加号图标,一个用于删除它的减号图标,一个用于编辑它的铅笔图标,以及一个用于搜索不同项目的放大镜。有几种方法可以实现这一点。

  1. anchor 内渲染一个img 元素。 img alt 属性将描述图标所代表的内容(alt="pencil icon"),而 title 属性将描述预期结果(即“单击此处编辑此小部件”)。

  2. 仅渲染anchor 标签,并使用css 将图像显示为背景。在这种情况下,锚的内容应该描述预期的结果,但是it needs to be wrapped in a span element so that its display style can be set to none。锚点还应该包含与内容匹配的标题属性(当然没有周围的跨度)。

在我看来,选项 #2 更容易在 asp.net mvc 应用程序中实现。由于图标是设计问题而不是标记问题,因此在 CSS 中定义图像是有意义的。从代码维护的角度来看,它也使事情变得更容易......更改 img src 位置只需要更改 CSS 文件,而不需要更改视图文件。删除 CSS 也会导致应用程序回退到全文可访问性。

让我闻起来很有趣的是关于将链接内容嵌套到跨度中的部分,以便它可以在 css 中设置disply: none;。另一件事是,如果我使用 :hover 选择器来交换图像并提供翻转/滚动效果,则图像的交换时间似乎比使用 javascript 时要长。

我错过了什么吗?

【问题讨论】:

    标签: css asp.net-mvc icons background-image image


    【解决方案1】:

    我们经常使用选项 #2,但方式不同。不要将锚内容包装在跨度中,而是使用 CSS 将锚设置为 display: blockinline-block,然后将其 text-indent 设置为 -1000em(或类似,只需选择一个大值)。我认为您还必须将overflow 设置为hidden

    如果您将背景图像作为精灵(其中包含非悬停和悬停状态的单个图像)并使用:hover 重新定位背景,您应该避免您可能会看到的闪烁/延迟现在。这也会减少一个单独的请求访问您的 Web 服务器。

    请注意,这还需要在 CSS 中明确设置锚点的 widthheight 以匹配您的图标大小。

    【讨论】:

    • 这两方面都不错。我没有想过使用文本缩进或精灵,但我相信两者都会有所改进。 a 已经 display:inline-block 具有明确的高度和宽度。
    【解决方案2】:

    如果图标传达的信息不重复文档中已有的信息,那么它应该是一个真实的<img>

    但是,alt 属性应该包含图像的替代项,而不是对其的描述。

    alt="Edit this widget"
    

    title 属性应该只用于提供咨询信息(想想“可选的附加功能”),并且您应该避免使用特定于实现的术语(例如“单击此处”)。

    让我觉得很有趣的是关于将链接内容嵌套到一个跨度中以便它可以显示的部分:无;在css中设置

    如果您确实采取了将 content 放在 背景 图像中并隐藏真实文本的路线,那么至少是负面的text-indent 它看不见而不是display: none并使其对屏幕阅读器不可见。

    【讨论】:

    • 您是否有任何文档支持 alt vs title 规则?我曾经使用 alt 来描述将 img 包裹在锚点中时的预期动作,但我可以发誓我在某处读到过,即使图像被包裹在锚点中,您也应该使用 alt 来描述图像内容。此外,您不会在带有 alt 的悬停时获得工具提示弹出窗口,它只带有标题,我希望非残疾用户的工具提示存在。这是否意味着我必须在 alt 和 title 属性中复制相同的内容?
    • 尝试查看 Lynx 中的网页,您会发现对图像的描述通常是多么荒谬(alanflavell.org.uk/alt/alt-text.html#howlers)。如果您需要工具提示,则需要复制信息(但这意味着图像可能信息不足)。
    • ¿Qué? - 感谢您的链接,这是一些非常有趣的东西。那么 Lynx / 屏幕阅读器是否会忽略标题属性(图像或锚标签)?
    • 标题属性提供咨询信息(为了理解内容,这不应该是强制性的)。我不知道 Lynx 是否提供了访问它的方法,一些屏幕阅读器会这样做,但不能保证用户会使用该选项(我认为这是某些屏幕阅读器的全局偏好)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2011-08-07
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    相关资源
    最近更新 更多