【问题标题】:Ruby on Rails - Override application.cssRuby on Rails - 覆盖 application.css
【发布时间】:2015-06-20 13:26:01
【问题描述】:

我正在尝试用包含在标题中的其他 css 覆盖我的 application.css。我想通过这种方式自定义我的 application.css。

我的标题

= stylesheet_link_tag 'application', media: 'all'
= stylesheet_link_tag 'customized_css', media: 'all'

实际

application.css.scss 正在覆盖我的 tour.css.scss,即使它在任何其他 css 之前加载

编辑

覆盖样式的文件顺序是正确的,但应用程序的选择器特异性优于游览,所以这就是原因。解决方案 - 改用 ID。

Documentation

Specificity calculator

感谢@tonyedwardspz 的解决方案

【问题讨论】:

  • 那么是什么阻止了你?
  • application.css 优先级更高,不管顺序
  • 你到底想做什么?
  • 可能。您已经以正确的顺序声明了样式表,tour.css 应该覆盖。您可以使用 id 来定位该元素以测试理论,它将覆盖所有其他选择器。
  • 我通常根据控制器和操作为我的 body 标签指定一个特定的 id 和类,因此如果需要,我可以为页面编写非常具体的 css。恕我直言更容易。并且一切都可以编译成一个application.css。

标签: css ruby-on-rails ruby-on-rails-4 haml


【解决方案1】:

您遇到的问题是 CSS 特异性。

您已经以正确的顺序声明了 css 文件。但是,tour.css.scss 中的规则具有较低级别的 css 特异性,因此无法覆盖 application.css.scss 中的声明。

要解决你可以做以下三件事之一:

  • 重写规则以获得更高的特异性。将类应用于元素并将其与tour.css.scss 中的现有规则相结合
  • 重写规则以匹配application.css.scss 中声明的选择器。这将使级联按您的预期工作,但可能会影响页面上的其他元素。
  • 将类应用于特定于每个页面的正文标记。然后,您可以仅将您的选择定位到一页。

您可以阅读有关 css 特异性的更多信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2012-07-08
    • 1970-01-01
    • 2016-07-05
    • 2016-07-23
    • 2019-01-19
    相关资源
    最近更新 更多