【问题标题】:Can I specify css ::before selector style in Rails view?我可以在 Rails 视图中指定 css ::before 选择器样式吗?
【发布时间】:2015-08-06 21:46:47
【问题描述】:

在我的 css 我有这个:

.inner-class {
  content: '';
}

.inner-class:before {
  background: url(http://www.fillmurray.com/500/500.jpg);
  content: '';
}

在我看来,html.erb,我有这个:

<div class="outer-class">
  <div class="inner-class">
    ::before
  </div>
</div>

我想使用 Rails 更改 ::before 选择器的属性。通常,我会这样做:

<div class="outer-class">
  <div class="inner-class" style:"background: url(<% image_path %>)">
    ::before
  </div>
</div>

但是,这不会改变 inner-class:before 的属性。我该怎么做?

【问题讨论】:

  • 你不能内联。可以将样式标签附加到头部

标签: jquery html css ruby-on-rails


【解决方案1】:

你应该做的是添加一个额外的 CSS 类,并在那里更改 ::before 伪,然后有条件地将该类应用到父元素。

  1. 从您的 ERB 中删除 ::before 文本。
  2. 像这样添加一个 CSS 类:
 .inner-class.do-something:before {
   background: url(http://www.fillmurray.com/300/300.jpg);
   content: '';
  1. 像这样在 ERB 中添加条件:
 <div class="outer-class">
   <div class="inner-class" class="<% 'do-something' if my_condition %>">

   </div>
 </div>

编辑

根据您的评论,您正在寻找类似的东西。 公平警告这可能是我能想象到的在 Rails 中动态显示图像的最糟糕的方式,此时我建议您只为头像图像设置一个单独的元素。

<div class='inner-class' data-image="<% ActiveSupport::Base64.encode64(open(article.user.avatar_url) { |io| io.read }) %>"></div>

你的 CSS 应该是

 .inner-class:before { 
   content: url(attr(data-image)); 
   height: 40px; 
   width: 40px;  /* Whatever the expected height and width of the image are */`
 }

【讨论】:

  • 我不确定这在这种特殊情况下是否对我有帮助。我想在视图中动态生成图像,而不是在 css 中设置它。因此,&lt;% article.user.avatar_url %&gt; 之类的内容将被设置为 ::before 元素中的背景图像。
  • 我想我已经决定在阅读你的 cmets 后寻求另一种显示图像的方式,但我想我会尝试你的方法,看看我是否可以让它工作。以这种方式尝试会给我一个“未初始化的常量 ActiveSupport::Base64”错误。
  • require 'base64'了吗?
  • 在您使用 ActiveSupport::Base64 的任何文件的顶部。
  • 如果在这种情况下是 `article.rb',那么是的。抱歉,我不太了解它的工作原理。
猜你喜欢
  • 2011-04-12
  • 2020-08-06
  • 1970-01-01
  • 2012-07-02
  • 2015-10-12
  • 2011-09-11
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
相关资源
最近更新 更多