【发布时间】:2014-10-14 12:22:32
【问题描述】:
我正在寻找一种纯 CSS 的方式来定位 :after 伪元素中的内容绝对相对于另一个元素 - 可能是多行 - 元素的顶部边缘。结果应如下所示:
通常不涉及任何火箭科学来实现这一点,但我想找到一个同时满足以下标准的解决方案:
- 不要使用
:before伪元素(这已经是实现一些其他独立事物所必需的), - 不要在内联元素上使用
display: block/inline-block;(因为它会在文本流中造成难看的漏洞), - 允许将元素的宽度定义为包含元素的百分比(至少在应用三规则之后),
- 不要以任何方式硬编码
:after-伪元素的顶部位置/边距/填充,使其依赖于父元素在祖父元素中的位置、父元素的高度或实际元素的高度(或简而言之:不要让任何内容依赖于内容), - 不要插入额外的 HTML 元素,并且
- 不要添加JS。
我创建了一个Codepen ,希望它能让我更容易掌握我的目标。
我知道通过违反上面列出的限制之一(如 Codepen 中所示)很容易获得结果,但我正在寻找解决此问题的优雅不需要的地方。
在玩了很长时间之后,我会说这是不可能的,但如果有人能说服我相反,那就太好了 - 或者至少正式证明这实际上是不可能的。非常感谢您提前提供的任何帮助。
【问题讨论】:
-
对于位置敏感的东西也需要
::before吗?否则你可以使用它。 -
::after的宽度应该是相对于<p>而它的top应该相对于<span>,对吗?我相信这是最难的部分...... -
感谢您的 cmets。 @Terry:这个问题的想法是在不使用
:before的情况下找到解决方案,例如如果这已经用于其他用途。 @Luizgrs:是的,我认为这是问题的本质。我很感兴趣是否有某种技巧或解决方法与这两个元素相关,一个用于宽度,另一个用于水平放置。 -
为什么必须是
::after伪元素?不能是像codepen.io/HerrSerker/pen/GwJhu这样的真实元素吗? -
使用纯 CSS 无法满足您提出的要求
标签: css layout css-position pseudo-element