css - Rails 应用程序中的主题

标签 css ruby-on-rails templates styles

我想制作一个 Rails 应用程序,让用户输入数据,然后允许他们更改页面的主题。这样,他们的数据可以根据他们选择的主题进行不同的样式设置。我该怎么做呢?

  1. 更改样式表?
  2. 具有不同类/元素的两个独立 View ?
  3. 仅动态更改类/id/选择器?
  4. ?

谢谢

最佳答案

为网站设置主题的最简单方法是简单地链接到不同的样式表。您可以使用类似以下内容动态地执行此操作:

# in app/views/layouts/application.html.erb
<%= stylesheet_link_tag :application %>
<%= stylesheet_link_tag #{current_theme} %>

# in app/helpers/application_helper
def current_theme
  # You'll have to implement the logic for a user choosing a theme
  # and how to record that in the model.
  # Also, come up with a better name for your default theme, like 'twentyeleven' ;)
  current_user.theme || 'default'
end

然后您可以有几个主题 list 。例如,您的 Assets 目录可能如下所示:

  • 应用程序/ Assets /样式表
    • 应用程序.css
    • 按钮.css
    • 主题1/
      • index.css
      • 按钮.css
    • 主题2/
      • index.css
      • 按钮.css

这将使您开始使用纯 CSS 主题。在某些时候,您可能还需要它们的 javascript 和 html 布局。当你开始发现需要在你的 html 中做这样的事情时:

<% if current_theme == 'theme1' %>
  <li>...
<% elsif current_theme == 'theme2' %>
  <b>...
<% end %>

那么是时候实现更强大的主题框架了:

  • 按主题命名您的 html 模板(例如 app/views/themes/theme1/users/index.html.erb)并呈现主题版本而不是默认版本
  • 仅按模板命名空间部分(例如 app/views/themes/theme1/users/_form.html.erb)并添加辅助方法,如 render_themed_pa​​rtial
  • 类似于上述方法,但是当主题变得非常大时,您应该考虑将它们作为 rails 引擎放入自己的 gem 中

注意:这都是针对静态主题的。对于动态主题(例如,管理员可以登录并编辑样式表或 html),您必须将主题信息存储在数据库中。根据您的体系结构,您可以提供一组静态主题,然后提供另一个从数据库中动态获取样式数据的主题。然而,此时您正在开发 CMS,因此它不在本答案的范围内 :)

关于css - Rails 应用程序中的主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11928476/

相关文章:

c++ - 模板 + friend (致命组合)

jquery - 如何通过 jquery 更改按钮的位置和页面高度?

ruby-on-rails - 如何将宽度和高度的 img 内联样式转换为属性

ruby-on-rails - 从 Windows 机器进行 Rails 部署

ruby-on-rails - 如何将无效记录添加到has_many :through association

c++ - static_pointer_cast 通过继承和模板

html - <div> 在另一个 <div> 内相同百分比但内部重叠?

css - 在没有 Javascript 的情况下获取鼠标指针在 CSS 中的位置

css - Flexbox:如果其他列不能收缩,为什么内容会拉伸(stretch)列?

c++ - 如何让 vc++ 和 g++ 在依赖限定类型的类型名方面表现相同?