我的朋友 Richard 昨天遇到了一个有趣的问题。 他正在使用某种 API 返回一个大型公司列表。 每家公司都有 **文本**,大多数(但并非全部)也都有 **图片**。 他想使用图片(如果有),但如果显示了图片,他也不想显示文本。 解决方案必须是同时输出图片和文本,然后尝试在可能的情况下隐藏文本。
以下是一个示例,展示了输出 HTML 可能的样子
<img src="images/image-110.png" alt="image" />
<span>Text</span>
<br /><br />
<img src="images/image-110.png" alt="image" />
<span>Text</span>
<br /><br />
<span>Text</span>
在这里,您可以看到前两个“组”都包含图片和文本,而最后一个组只包含文本。 **这是相邻兄弟选择器的理想场景!** 每个 CSS 极客的梦想! 我们真正需要做的是只定位紧随图片之后的跨度。 我们可以做到这一点,并解决这个问题,如下所示
img {
vertical-align: middle;
z-index: 9999;
position: relative;
}
span {
z-index: 1;
}
img+span {
margin-left: -110px;
}
相邻兄弟选择器语句的通俗解释是“查找紧随图片之后的跨度,并将它们移到左侧”。 独立存在的跨度不受影响,但前两个被移到了左侧。 负左边距负责移动,并且由于高 z-index 值,能够将文本塞到 **图片下方**。 相对定位实际上在这里是必需的,以启动 z-index 的实际工作。
我选择了负边距解决方案,因为在这种方法中,即使图片被关闭,仍然可以提供可访问的数据。 但是,如果要隐藏的文本太大而无法容纳在图片后面(或者图片是透明的),这将是一个问题。 您也可以考虑使用“visibility: hidden;” 或“display: none” 而不是负左边距,这绝对有效,但可访问性较差。
不错!
使用 CSS 2 规范时,这种技术是否可用? 还是只有 CSS 3 支持?
我在 Safari、Opera、Firefox 和 IE 7 中测试了它,它似乎在所有浏览器中都正常工作。 应该是 CSS 2.1 =)
不错。 这可能会非常有用。 Chris,干得漂亮 - 发现得真棒!
嗨,Chris,css-tricks.com 非常有用,我有一次偶然间来到了这里,但不能抱怨,我喜欢最后一个技巧。 愿所有 CSS-Tricks 用户都安好。
您能告诉我,在您的演示中,单词“image”使用的字体是什么吗?
很高兴再次看到一些 CSS,并从整个 JavaScript 场景中稍微偏离一下。 顺便说一句,做得很好!
@Noddy: 我认为是 Agenda-SemiBold,但以那种大小,它看起来非常像 Trebuchet MS(全大写,字母间距 1px)
相邻兄弟选择器 在 IE6 中不起作用 …尽管如此,它仍然是选择器的有效使用方式。
这是一个关于相邻兄弟选择器的简洁明了的示例。 做得好。
非常有用…但在 IE6 中不起作用。 相邻选择器在 CSS 规范中已经存在很长时间了,但只有现代浏览器才支持它。
这太 f’n 棒了! 这正是解决我遇到的不同标题和段落组合问题的方案; 例如,H1 很大,所以您希望它具有比 H3 更多的 margin-bottom,但在嵌套在标题下的标题中,则更多...等等。
我很久以前就把这个问题认定为一个问题,并认为没有解决方案。 我很高兴在这些情况下被证明是错误的。
是的,只有 *现代* 浏览器才支持 - IE6 不支持。 不过,您需要在某个地方划清界线 :) IE6 多大了,有 7 年了吗? 我已经到了确保我的网站在 IE6 下可访问的地步,但它们并不总是必须像素完美。
很棒的技术,我实际上可以在当前项目中使用完全相同的功能! 仅供参考,sitepoint CSS 参考中指出 Safari 和 Firefox 具有完全支持,IE6 不支持,IE7 和 Opera 支持有错误(尽管从阅读中可以看出,它在 IE7 和 Opera 中对大多数用途来说是安全的)。