【问题标题】:Namespacing/Scoping in CSSCSS中的命名空间/范围
【发布时间】:2016-05-14 00:57:46
【问题描述】:

我想将 CSS 文件中的规则应用于某个 div/类,例如,events.css 的内容仅应用于名为 .events 的类的内容,而不是超出此范围而不需要将类 .events 添加到每个 css 规则的开头。

我认为这是不可能的 - 但你永远不知道。

如果不是,我正在考虑通过在上传/编辑后将 .events 前缀到 CSS 规则来实现相同的效果。我认为这应该是没有问题的,但是有人预见到任何问题吗?

【问题讨论】:

    标签: php html css scoping


    【解决方案1】:

    我认为这是不可能的

    确实如此。除非您将有问题的内容放在 iframe 中。然后你会得到一个完全独立的文档来设置不同的样式。

    我正在考虑通过在上传/编辑后将 .events 前缀到 CSS 规则来实现相同的效果。我认为这应该是没有问题的,但是有人预见到任何问题吗?

    以自动化方式?您需要能够解析 CSS 输入以确定选择器的开始位置。

    这并不像你想象的那么简单:

    /* This is my grate CSS
    .sausage { color: red; } adds a class rule
    /*/ .eggs, .bacon { color: red; }
    .potato:before { content: "; }
    .beans { content: "; }
    

    是一个难以解析的 CSS 示例。 .eggs.bacon.potato 开始选择器并需要 .events 前缀。 .sausage.beans 不是。

    【讨论】:

    • 最坏情况 css 文件的好例子!
    【解决方案2】:

    如果不是,我正在考虑实现 通过为 .events 加上前缀来达到同样的效果 到 CSS 规则之后 上传/编辑。我在想这个 应该是没有问题的,但是 有人预见到任何问题吗?

    这是唯一的方法,应该没问题。

    【讨论】:

      【解决方案3】:

      从维护的角度来看,在 CSS 规则中简单地包含“.event”会更安全。几个月后,您可能已经忘记了在这里为节省一点打字而玩的技巧。

      【讨论】:

        【解决方案4】:

        简而言之,唯一的方法就是在每个规则前面加上.events

        但我会避免自动执行此操作,因为很容易出错,例如手动将.events 添加到规则中,这会使它加倍。如果您想跨页面共享某些样式,例如 .events.special.aboutus.special,那么您需要将它们放在其他位置。

        通常最好使用一个样式表而不是每个部分一个样式表,这样用户在访问后续页面时会将其缓存起来。 (您可以在生产环境中对其进行压缩和 gzip 压缩以减少初始下载时间。)

        【讨论】:

          【解决方案5】:

          我会将“.events”类添加到选择器中。作为手动过程执行此操作存在人为错误的风险。这里是partially automating the process of adding a selector to all CSS classes的方式。

          您也可以使用这个automatic prefixer,但它似乎不能很好地处理您的选择器之间的空格。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-31
            • 2020-01-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多