【问题标题】::before causes elements to be unselectable:before 导致元素不可选择
【发布时间】:2013-08-04 22:59:27
【问题描述】:

我使用 CSS 的 :before 选择器为我的 <blockquote> 加上引号。一切正常,它有效,但有 1 个问题。引号导致接近此标记的元素无法选择。或者,更准确地说,它们不能直接选择。引号位于它们的顶部,浏览器会尝试选择它(尽管无法选择 :before 元素)而不是位于它们后面的元素。

jsFiddle:http://jsfiddle.net/5z3YY/1/
尝试选择“blabla”或“foobar”。你不能(或者,更准确地说:只使用鼠标,你可以选择整个单词或什么都不选),但我想要做的是赋予能力。
在 Chrome 28 和 Firefox 22 上测试。

代码

HTML:

<blockquote><p>blabla</p></blockquote>
foobar

CSS:

blockquote {
    min-height: 60px;
    background-color: #fafafa;
    positon: relative;
    margin: 0;
}

blockquote:before {
    display: block;
    font-size: 120px;
    content: "\201D";
    height: 1px;
    position:absolute;
    top: -5px;
    color: rgba(0, 0, 0, 0.15);
}

问候。

【问题讨论】:

    标签: html css styles css-selectors stylesheet


    【解决方案1】:

    显然,最简单的解决方案是将overflow: hidden 应用于blockquote 元素。然后伪元素被剪裁,并且永远不会大于块引用本身。

    blockquote {
        overflow: hidden;
    }
    

    Fiddle

    【讨论】:

    • 你的最后一点是不正确的。请参阅:demo。块引用需要relative 位置,否则absolute 定位元素与具有给定位置的最近父元素(最后是视口)对齐。
    【解决方案2】:

    问题在于这条规则:position: absolute;

    您可以使用它使块引用中的元素再次可选择:

    blockquote p {
        position: relative;
    }
    

    此外,使用以下方法将您的 &lt;blockquote&gt; 包装在 &lt;div&gt; 中:

    div {
        position: relative;
        overflow: hidden;
    }
    

    在这种情况下,您可以从&lt;blockquote&gt; 中删除position: relative;

    演示

    Try before buy

    【讨论】:

    • 嗯...但是元素块引用之外呢? :)
    • Nirazul 的回答更适合我 - 我不必将我的块引用包装到 div 中。但是您的答案仍然很好(并且您发布的解决方案也有效),所以我赞成:)
    • @m4tx 谢谢。总是选择最合适的答案。但我很高兴我也可以投入两分钱。 :)
    猜你喜欢
    • 2015-01-25
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多