当前位置: 首页 > 知识库问答 >
问题:

SASS嵌套导致IE的特定选择器过多

蒋星雨
2023-03-14

我最近在写CSS的时候用了SASS。我在WordPress上建网站。我开发了一种CSS编写方法,我认为这是一种通过特定的Wordpress“页面”组织CSS的聪明方法。我的方法是:

1)通过一些php魔法,我给每个新的Wordpress“page”一个独特的类,一直在body标签上。所以如果我的站点有4个页面,每个页面上的body标签都有一个独特的类,如:,等。

我想这会给我一个很好的“捷径”来设计出现在多个页面上的CSS元素,但我需要在每个页面上设置一些不同的样式。例如,假设我在我的站点的所有4个页面上都有这个标记:

<section class="module">
    <div class="price">
        <div class="cenetered">
            <p>some text <span>text</span></p>
        </div>
    </div>
</section>

但是,我需要在p标签内的跨度,以不同的样式在第4页。我想,很容易。我说,我只需要使用我唯一的页面主体类来完成以下操作:

.page1, .page2, .page3 {

    .module {
        color:red;

        .price {
            color:blue;

            .centered {
                color:green;

                p span {color:yellow}

            }
        }   
    }
}

.page4 {

    .module {
        color:black;

        .price {
            color:black;

            .centered {
                color:black;

                p span {color:black}

            }
        }   
    }
}

所以第一个SASS块用于我的前3页,第二个块用于我的第4页。它完全按照我想要的方式对所有内容进行样式化,并且对我来说组织意义在于基本上用我的SASS嵌套来模拟我的html嵌套。当然,由于我对我的SASS嵌套非常具体,如果我想在我的SASS页面下覆盖CSS规则,我需要对我的嵌套也同样具体(或者使用我喜欢避免的!重要规则)。

我认为这个方法一切都很好--在我所有的浏览器中看起来都很棒,直到我在IE9上看到。我在IE9开发工具中注意到,我的CSS文件在中途“停止”了,我的一半规则甚至都没有加载。我检查了更多,我注意到我的SASS方法为我尝试样式化的每个元素输出了大量的选择器/规则。

仅.page1、.page2、.page3嵌套中的span标记的上述示例就输出了几十条规则。我有点意识到这会发生,但我不认为这有问题,因为我的CSS是100%有效的。

所以我的问题是:

>

  • 这仅仅是一种糟糕的CSS编写方法吗?(我需要重写所有的东西来消除这么多的嵌套吗?)

    为什么IE9(以及以下版本)会停止读取我的CSS,如果它遇到一个有太多选择器的CSS规则呢?

    我使用过各种“选择器计数器”工具,根据它们的说法,我的CSS表完全不受IE9的限制:它们告诉我,我的样式表有1744个选择器。

    这是我的工作表:http://wallstreetprep2.com/wp-content/themes/wallstreetprep/style.css

    我担心我需要重写我的SASS和摆脱嵌套到身体标签级别?

  • 共有1个答案

    祁鸿哲
    2023-03-14

    这仅仅是一种糟糕的CSS编写方法吗?(我需要重写所有的东西来消除这么多的嵌套吗?)

    如果某些标记具有大多数页面的基本样式,那么就不需要在.page1、.page2、.page3选择器中包装所有.module

    我更愿意建议(作为一种通用方法)为基本样式使用简短且不太具体的选择符

    .module {
        color : red;
        .price {
    
        }        
    } 
    

    然后重写异常的样式,将.module类包装到.page4

    .page4 {
        .module {
           color : red;
           .price {
              ...
           }        
        }
    } 
    

    *为什么IE9(及以下版本)会停止读取我的CSS,如果CSS规则中有太多的选择器?*

    这可能是一个解析问题,可能是由于样式表中的392个验证错误中的一个或多个,和/或可能是由于使用SASS生成的长度为4400字符的巨大规则的存在,例如。

    .selfstudy .products ul li .module h2 .courseicon, .selfstudy
    .products ul li .bluemodule h2 .courseicon, .selfstudy .products ul li
    .page-template-page- 1col-php .customersspeak .speak_small p h2
    .courseicon, .page-template-page- 1col-php .customersspeak
    .speak_small .selfstudy .products ul li p h2 .courseicon, .selfstudy
    .products ul li .wspblog #sidebar .widget_text h2 .courseicon,
    .wspblog #sidebar .selfstudy .products ul li .widget_text h2
    .courseicon, .selfstudy .products ul li .single-blogposts #sidebar
    .widget_text h2 .courseicon, .single-blogposts #sidebar .selfstudy
    .products ul li .widget_text h2 .courseicon, .selfstudy .products ul
    li .archive #sidebar .widget_text h2 .courseicon, .archive #sidebar
    .selfstudy .products ul li .widget_text h2 .courseicon, .selfstudy
    .products ul li .page-id-2310 .pricebox h2 .courseicon, .page-id-2310
    .selfstudy .products ul li .pricebox h2 .courseicon, .selfstudy
    .products ul li .page-id-2406 .pricebox h2 .courseicon, .page-id-2406
    .selfstudy .products ul li .pricebox h2 .courseicon, .selfstudy
    .products ul li .excel a[title="pdf"] h2 .courseicon, .excel
    .selfstudy .products ul li a[title="pdf"] h2 .courseicon, .selfstudy
    .products ul li .excel a[title="pdf2"] h2 .courseicon, .excel
    .selfstudy .products ul li a[title="pdf2"] h2 .courseicon, .selfstudy
    .products ul li .mycourses form h2 .courseicon, .mycourses .selfstudy
    .products ul li form h2 .courseicon, .mycourses .products ul li
    .module h2 .courseicon, .mycourses .products ul li .bluemodule h2
    .courseicon, .mycourses .products ul li .page- template-page-1col-php
    .customersspeak .speak_small p h2 .courseicon, .page- template-page-
    1col-php .customersspeak .speak_small .mycourses .products ul li p h2
    .courseicon, .mycourses .products ul li .wspblog #sidebar .widget_text
    h2 .courseicon, .wspblog #sidebar .mycourses .products ul li
    .widget_text h2 .courseicon, .mycourses .products ul li .single-
    blogposts #sidebar .widget_text h2 .courseicon, .single-blogposts
    #sidebar .mycourses .products ul li .widget_text h2 .courseicon,
    .mycourses .products ul li .archive #sidebar .widget_text h2
    .courseicon, .archive #sidebar .mycourses .products ul li .widget_text
    h2 .courseicon,  .mycourses .products ul li .page-id-2310 .pricebox h2
    .courseicon, .page-id-2310 .mycourses .products ul li .pricebox h2
    .courseicon, .mycourses .products ul li .page-id-2406 .pricebox h2
    .courseicon, .page-id-2406 .mycourses .products ul li .pricebox h2
    .courseicon, .mycourses .products ul li .excel a[title="pdf"] h2
    .courseicon, .excel .mycourses .products ul li a[title="pdf"] h2
    .courseicon, .mycourses .products ul li .excel a[title="pdf2"] h2
    .courseicon, .excel .mycourses .products ul li a[title="pdf2"] h2
    .courseicon, .mycourses .products ul li form h2 .courseicon, .single-
    partnerpages .products ul li .module h2 .courseicon, .single-
    partnerpages .products ul li .bluemodule h2 .courseicon, .single-
    partnerpages .products ul li .page-template-page-1col-php
    .customersspeak .speak_small p h2 .courseicon, .page-template-page-
    1col-php .customersspeak .speak_small .single-partnerpages .products
    ul li p h2 .courseicon, .single-partnerpages .products ul li .wspblog
    #sidebar .widget_text h2 .courseicon, .wspblog #sidebar .single-
    partnerpages .products ul li .widget_text h2 .courseicon, .single-
    partnerpages .products ul li .single-blogposts #sidebar .widget_text
    h2 .courseicon, .single-blogposts #sidebar .single-partnerpages
    .products ul li .widget_text h2 .courseicon, .single-partnerpages
    .products ul li .archive #sidebar .widget_text h2 .courseicon,
    .archive #sidebar .single-partnerpages .products ul li .widget_text h2
    .courseicon, .single-partnerpages .products ul li .page- id-2310
    .pricebox h2 .courseicon, .page-id-2310 .single-partnerpages .products
    ul li .pricebox h2 .courseicon, .single-partnerpages .products ul li
    .page- id-2406 .pricebox h2 .courseicon, .page-id-2406 .single-
    partnerpages .products ul li .pricebox h2 .courseicon, .single-
    partnerpages .products ul li .excel a[title="pdf"] h2 .courseicon,
    .excel .single-partnerpages .products ul li a[title="pdf"] h2
    .courseicon, .single-partnerpages .products ul li .excel
    a[title="pdf2"] h2 .courseicon, .excel .single-partnerpages .products
    ul li a[title="pdf2"] h2 .courseicon, .single-partnerpages .products
    ul li .mycourses form h2 .courseicon, .mycourses .single-partnerpages
    .products ul li form h2 .courseicon
    
     类似资料:
    • scss 第二个子选择器失效问题 有如下代码,它无法按照预期运行: html: scss: 但若改成: 它便生效了!(顺带一提,使用last-child也没有生效,!important也试过,应该不是优先级问题),有大佬知道是什么原因吗?

    • 下面嵌套的ElasticSearch查询返回一些不应该命中的结果。许多结果不包含请求的订单号,但仍然列出了。我没有得到所有的文档,所以查询肯定会在某种程度上减少结果集。 查询结果(截断): 正如您所看到的,有一个点击(实际上,有相当多的点击)不应该出现,因为没有一个订单包含请求的订单号。 这是的映射: 最后,以下是澄清上述映射中所述的分析器的设置:

    • 描述 (Description) 使用extend选择器匹配嵌套选择器。 例子 (Example) 以下示例演示了如何在LESS文件中使用扩展嵌套选择器 - extend_syntax.htm <!doctype html> <head> <link rel = "stylesheet" href = "style.css" type = "text/css" /> </h

    • 让我们以这三个选择器为例,从最高的特异性到最低的特异性排序: 许多CSS专家建议不要像第一个选择器那样进行嵌套,因为它的特异性非常高,您无法用这样的简单类重写它。我想找到一种方法来实现嵌套,就像一样,但不增加特定性。类似于这样: 使用诸如之类的简单选择符,将默认值应用于排版和文档范围内是非常安全的。但是,我希望更改特定节的默认值,类似于,而不必使用hacks来增加选择器的特异性,如。我宁愿使用ha

    • 问题内容: 好的,所以我有一个带有嵌套选择器的占位符: 我想扩展它并添加到类中: 我想要的答案是这样的: 但是,我得到的答案是这样的: 我是在做错什么,还是这只是工作原理?为了澄清,我想将其合并。如果我直接在中添加一些内容,并且像添加了同样扩展%block的其他内容一样,则它们合并不会出现任何问题。 问题答案: Sass没有“合并”重复选择器的功能。编译CSS之后,您需要找到另一个实用程序来执行此

    • 问题内容: 假设我的一些文档具有以下结构: 是否有MangoJSON选择器可以成功选择值?它在数组内部(我知道它在数组中的位置)。我也对过滤结果感兴趣,所以我只能得到结果。 我已经尝试了很多东西,包括$ elemMatch,但是所有东西大多数都返回“无效的json”。 那是芒果的用例还是我应该坚持观点? 问题答案: 使用Cloudant Query(Mango)选择器语句,您仍然需要在查询之前定义