【问题标题】:How can I choose content layouts based on body class AND media queries?如何根据正文类和媒体查询选择内容布局?
【发布时间】:2012-11-22 08:01:46
【问题描述】:

所以这就是问题所在。我对 Susy 有点陌生,所以我不完全确定完成此任务的最佳方法,但我希望根据 body 类和已在下面设置的媒体查询将布局应用于 .hfeed div .

原因如下。我正在为 WordPress 执行此操作,并且使用应用于正文的 CSS 类来设置不同的布局。具体来说,这两个类是 .full-width-content 和 .content-sidebar。我需要选择器跨越整个容器或分别位于当前定义的区域中。因此,我想要设置样式的特定选择器将是“.full-width-content .hfeed”和“.content-sidebar .hfeed”。我尝试将它们设置为包含不同的容器,但这不起作用。

我是否应该简单地将这部分从定义的网格中分离出来并按类选择 THEN 进行媒体查询?

在 susy 中完成此任务的最佳方法是什么?

//susy grid definitions, footer sits outside the susy grid def

#wrap {
    @include container( $total-columns, $break-tablet, $break-desktop );

    @include at-breakpoint( $break-tablet ) {
        #header     { @include span-columns( $break-tablet omega ); }
        #title-area { @include span-columns( 5, $break-tablet ); }
        #header .widget-area { @include span-columns( 4 omega, $break-tablet ); }
        #nav        { @include span-columns( $break-tablet omega ); }
        .hfeed      { @include span-columns( 6, $break-tablet ); }
        #sidebar    { @include span-columns( 3 omega, $break-tablet ); }
    }

    @include at-breakpoint( $break-desktop ) {
        #header     { @include span-columns( $break-desktop omega ); }
        #title-area { @include span-columns( 5, $break-desktop ); }
        #header .widget-area { @include span-columns( 5 omega, $break-desktop ); }
        #nav        { @include span-columns( $break-desktop omega ); }
        .hfeed      { @include span-columns( 7, $break-desktop ); }
        #sidebar    { @include span-columns( 4 omega, $break-desktop ); }
    }
}

【问题讨论】:

    标签: responsive-design media-queries compass-sass fluid-layout susy-compass


    【解决方案1】:

    对我来说,这是一个 CSS 特殊性的顺序问题。我从 WordPress 的悲惨经历中知道,如果您从 21-11 之类的东西制作儿童主题,您将为此付出很多努力。因此,如果您尝试进行更改但不起作用 - 请确保检查您的元素并查看您的规则是否被其他样式应用或覆盖。我相信您已经发现我们的 WordPress 主题存在很多这样的问题。

    取决于您如何设置 CSS 结构:

    • 移动优先 - 最小屏幕到最大屏幕 • 从大屏幕到小屏幕

    您的代码可能如下所示:

    css 顶部的大屏幕或小屏幕的默认样式 - 首先进行处理 > 然后 > 媒体查询以在屏幕尺寸更改时覆盖这些指令 > 发生这种情况时会更改的任何内容都在这里。

    /* 默认样式 */ 身体{...}

    /* 智能手机样式 */

    @媒体查询 {

    body.class .container { ... }

    }

    我不确定这是否对您有帮助,我只是想帮助您指明方向。我很想看看其他人对此有什么看法。

    在使用 WordPress 主题和 SASS 时要记住的一点是,确保您了解 CSS 特定性的成本 - 您越具体,生成页面的时间就越长。使用 SASS 很容易变得过于具体。

    祝我的朋友好运。抱歉,如果这没有帮助。

    【讨论】:

    • 特殊性是我放弃使用类 .hfeed 来应用样式而不是 id #content 的原因。除了用于布局的根父级#wrap 之外,父类上没有其他关于布局的定义。这确实是现在的全部代码。我认为在如何按类有条件地定义列方面我缺少一些东西。我尝试在第二个类定义中使用 reset-columns mixin 重置列,但这似乎也不起作用。
    • Jeremy,你在特异性方面是完全正确的。这是仔细查看代码后的原因。当您在 Susy 中定义一组布局定义时,它会将定义编译为,在此示例中为 #wrap .hfeed,因此这意味着为了具体起见,任何覆盖都必须包含 #wrap。虽然我最初关于更改定义的想法是正确的,但我做错了。解决方案是将此代码直接放在网格定义之后。 .full-width-content #wrap .hfeed { width: 100%; }
    • @PaulGraham 非常感谢,这几乎是我第一次真正帮助回答有关 StackOverflow 的问题 :) 所以,我很自豪我终于能够提供帮助回馈一个对我帮助很大的社区。但这不是重点。作为一个使用过 WordPress 和 Susy(因此是 Compass/SASS)的人,我会非常乐意加入您的 GoogleTalk 或其他任何东西以加快周转时间 - 如果您想再睁眼 - 只是问:)跨度>
    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2021-02-01
    • 2014-10-19
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多