【发布时间】:2025-12-24 14:00:17
【问题描述】:
我知道使用 Javascript 很容易,但是……有什么办法只使用 CSS 吗?
假设我们在父元素(米色)中有两个元素(绿色和红色)。红色元素应始终位于绿色元素的右侧,除非绿色元素(由于内容)太大而无法容纳父元素,在这种情况下,红色元素将超过绿色元素(正常行为是红色元素停留在绿色元素的右侧,因此由于父元素的溢出而被隐藏)
换句话说:red.x = min(green.x + green.w, beige.x+beige.w-red.w)
更多信息,这里是具体的 HTML:
<div class="beige" style="width:250px"> <!-- parent with a given width (unknown until the page is rendered) & overflow hidden -->
<a class="green"> <!-- link with display:inline -->
content
<em class="red"></em> <!-- actually a button, 15 px width -->
</a>
</div>
编辑: @kyledws 的答案很棒,但我会用更多信息(需要的东西)更新问题,例如:
- 只有在 green:hover 时才会显示红色(这就是它在绿色内部的原因)
- 您不知道 CSS 中的米色宽度(在现实世界中,米色在具有定义宽度但在页面渲染之前不知道的内部)
- 绿色内容为变长文本,红色被推送的原因
- 如果绿色内容不适合父级,则应显示省略号(文本溢出:省略号;溢出:隐藏)
- 必须在 IE8+ 中工作
【问题讨论】:
-
可以将
em.red移到a.green之外还是完全不改变结构? -
对于这个应用程序,语义上最好将 em 放在 a 中,因为在现实世界中,em 是在新窗口中打开链接的按钮,但我想你可以将它移出如果有帮助...