在css / scss或JavaScript

时间:2017-06-15 15:56:36

标签: ruby-on-rails sass

在我的rails应用程序中,我有两个模型,Users和Goals。用户可以拥有多个目标,目标属于用户。我有一个页面列出了用户显示页面中的所有用户目标。这是使用.each循环完成的,在这个循环中我创建了一个动态类名,将goal_id放入类名。

我希望能够在我的css / scss文件夹中定位这些单独的类,以便我可以,例如,当我将鼠标悬停在它上面时,只会突出显示第一个目标。

应用程序/视图/用户/ show.html.erb

<div class="user-goals-mouse-events">
<% @user.goals.each do |goal| %>
    <%= link_to goal_path(goal), class: "user-goals-hover-#{goal.id}" do %>
            <div class="row">
                <div class="col-md-4">
                    <h2 class="color-light-blue"><%= goal.name %></h2>
                </div>
                <div class="col-md-8 user-goals-description">
                    <h4><%= goal.description %></h4>
                </div>
            </div>
            <h6 class="hide-username-<%= goal.id %>"><%= @user.username %></h6>
    <% end %>
<% end %>

Scss目前无法正常工作,但它可能有助于展示我正在尝试做的事情。 应用程序/资产/样式表/ custom.css.scss

.user-goals-mouse-events > a {
    border-bottom-style: solid;
    border-bottom-color: black;
    border-bottom-width: 1px;
    //background-color: black;
    &:hover {
        background-color: #26AEFF;
        color: gold;
    }
}

.user-goals-mouse-events > div > h6 {
    opacity: 0;
}

.color-light-blue {
    color: #26AEFF;
    &:hover {
        color: white;
    }
}

如果以不同的方式(例如使用javascript)以更好的方式完成此问题的更好解决方案,那么请让我知道,因为我想以最有效的方式执行此操作。

2 个答案:

答案 0 :(得分:0)

尝试使用attribute-value-begin-with selector:

a[class^=user-goals-hover] {
  border-bottom-style: solid;
  border-bottom-color: black;
  border-bottom-width: 1px;
  //background-color: black;

  &:hover {
    background-color: #26AEFF;
    color: gold;
  }
}

答案 1 :(得分:0)

@hashrocket的答案很好,但是我建议您在课堂上更明确。当您需要一个两者类用于样式和定位时,这是一种代码味道。

是的,CSS中也有代码异味! :)

我将拥有一个用于样式的常量类,以及一个用于定位的动态或什至完全不同的属性:

<%= link_to goal_path(goal), class: "user-goals", data: {goal_id: goal.id} do %>

将呈现为

<a href="/goals/42" class="user-goals" data-goal-id="42">

而CSS就是

.user-goals {
  //...

  &:hover {
    //...
  }
}