【问题标题】:Styling navbar: interaction between different styling settings样式导航栏:不同样式设置之间的交互
【发布时间】:2015-06-15 13:37:08
【问题描述】:

我在设置导航栏样式时遇到问题,尤其是导航栏中的下拉菜单。下面的两个li 元素(链接到“个人资料”和“编辑个人资料”的元素没有正确显示。如您所见,我以两种不同的方式添加了my-dropdown-item 类,都具有相同的结果。导航栏代码:

<div class="container">
 <div class="header">
  <div class="top-nav">
      <ul class="nav1">
          <li class="hvr-bottom <%= 'active' if current_page?(root_path) %>"><%= link_to "Home".html_safe, root_path %></li>
          <li class="hvr-bottom <%= 'active' if current_page?(target_path) %>"><%= link_to "Target".html_safe, target_path %></li>

       # The dropdown menu #
       <li class="dropdown hvr-bottom" style="max-width:300px; width:auto;">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"> "Drop-down Menu"</a>
          <ul class="dropdown-menu" role="menu">
              <li><%= link_to "Profile", current_user, html_options = {class: "my-dropdown-item"} %></li>
              <li class="my-dropdown-item"><%= link_to "Edit profile", edit_user_path(current_user) %></li>
          </ul>
       </li>

      </ul>
  </div>
 </div>
</div>

结果是字体显示为白色,而它应该是黑色。在我的 css 文件中,我有:

.my-dropdown-item {
  width: 100%;
  color: #000;
}

使用检查器我可以看到颜色被.top-nav ul li a 的样式所取代(因此my-dropdown-item 指定的字体颜色被划线)。后一种样式存在于 css 文件 file1.css 中,而 .my-dropdown-item 存在于 file2.css 中。在application.css 中,我在*= require file2 行之前有:*= require file1。所以我不明白为什么.top-nav ul li a 推翻.my-dropdown-item知道如何找出原因以及如何解决吗?

【问题讨论】:

  • 在浏览器调试控制台中,您认为什么是字体显示错误的链接的贡献类?这将告诉您正在应用什么 css。
  • @Val_Asensio,您的建议与我在 OP 中提到的检查员不一样吗?正在应用的 css 是 .top-nav ul li a,它推翻了 .my-dropdown-item(如 OP 中所述)。还是你的意思是别的?
  • 我不确定检查员是否是这个意思...好吧。我有一个答案的想法。

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


【解决方案1】:

在 link_to 中添加覆盖类:

  <%= link_to "Edit profile", edit_user_path(current_user), class:"my-dropdown-item" %>

添加到 CSS

.my-dropdown-item {
  a {
  width: 100%;
  color: #000 !important;
  }
}

这可能需要一些调整,让我知道。

【讨论】:

  • 我试过了,但结果相同。我也认为它与我已经拥有的个人资料有些相似:&lt;%= link_to "Profile", current_user, html_options = {class: "my-dropdown-item"} %&gt;。我尝试了不同的组合:使用为li 元素和/或link_to 元素指定的类。在 css 文件 .my-dropdown-item {....my-dropdown-item { a { ... 中。结果都一样:.top-nav ul li a 的 css 覆盖了 .my-dropdown-item 的 css。
  • 啊,我最初忘记了css文件中的!important部分。添加这个解决了它。谢谢!
  • !important 对覆盖很重要。
【解决方案2】:

我假设您正试图将 &lt;li&gt; 内的链接涂成黑色。

您的问题是.top-nav ul li a 指向一个&lt;a&gt; 元素,而.my-dropdown-item 没有指向这个&lt;a&gt;

这意味着.my-dropdown-item 中的所有内容都将是黑色的,但是如果您将内容包装到一个新的包装器元素中,它将采用 this 的属性。

为了获得良好的表现,您必须包括 .top-nav .my-dropdown-item a 以及其他上一课。

为了更好的理解,我给你举了一个例子。

.top-nav ul li a {
  color: green
}

.top-nav .my-dropdown-item a{
  width: 100%;
  color: red;
}
<div class="container">
 <div class="header">
  <div class="top-nav">
      <ul class="nav1">
          <li class="hvr-bottom <%= 'active' if current_page?(root_path) %>"><%= link_to "Home".html_safe, root_path %></li>
          <li class="hvr-bottom <%= 'active' if current_page?(target_path) %>"><%= link_to "Target".html_safe, target_path %></li>

       # The dropdown menu #
       <li class="dropdown hvr-bottom" style="max-width:300px; width:auto;">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"> "Drop-down Menu"</a>
          <ul class="dropdown-menu" role="menu">
              <li><a>Profile</a></li>
              <li class="my-dropdown-item"><a>Edit Profile</a></li>
          </ul>
       </li>

      </ul>
  </div>
 </div>
</div>

【讨论】:

  • 不确定你的意思是它没有指向一个元素。我相信它确实指向一个元素。源代码证实了这一点;如果我查看它的开发服务器上的源代码:&lt;li&gt;&lt;a class="my-dropdown-item" href="/users/name"&gt;Profile&lt;/a&gt;&lt;/li&gt;&lt;li class="my-dropdown-item"&gt;&lt;a href="/users/name/edit"&gt;Edit profile&lt;/a&gt;&lt;/li&gt;
  • 我认为这个例子对你的问题非常不言自明
  • 我认为这不是正确的答案。 Rails 将link_to 方法转换为&lt;a&gt; 元素,我相信my-dropdown-item 确实 指向这个&lt;a&gt; 元素。
  • 检查新示例。你的“我的下拉项目”指向一个“
  • ”而不是一个“”。 '' 元素在你的内部 '.my-dropdown-item'
  • 查看我的第一条评论:&lt;li&gt;&lt;a class="my-dropdown-item" href="/users/name"&gt;Profile&lt;/a&gt;&lt;/li&gt;
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签