【问题标题】:How do I use pseudo-selectors to change a "Home" button to an icon using just CSS?如何使用伪选择器将“主页”按钮更改为仅使用 CSS 的图标?
【发布时间】:2013-05-25 02:07:12
【问题描述】:

我正在开发一个基于自定义 CMS 平台构建的网站,该网站的所有者希望我将“主页”导航菜单项替换为主页图标/图像。通常,这很容易,但我无权访问 HTML/PHP 文件,并且 CMS 不允许我向菜单项添加类。我也无法添加Javascript,所以我必须通过CSS来完成。

CMS 生成的 HTML 或多或少看起来像这样:

<header class="header">
  <nav>
    <ul>
      <li><a href="http://www.home.com/">Home</a></li>
      <li class="first"><a href="http://www.home.com/about">About</a>
        <ul>
          <li><a href="http://www.home.com/about/team">Team</a></li>
        </ul>
      </li>
      <li><a href="http://www.home.com/services">Services</a>
        <ul>
          <li><a href="http://www.home.com/services/financial">Financial</a></li>
        </ul>
      </li>
    </ul>
  </nav>
</header>

我想我可以通过这样的方式来完成它:

.header nav > ul > li:first-of-type {
  background: url('home.png') no-repeat center top;
  -webkit-transition: background-position 0.3s ease-in; 
     -moz-transition: background-position 0.3s ease-in; 
       -o-transition: background-position 0.3s ease-in; 
          transition: background-position 0.3s ease-in; 
}

.header nav > ul > li:first-of-type:hover {
  background-position: center bottom;
}

.header nav a[href="http://www.home.com/"] {
  color: transparent !important;
}

但这似乎并不奏效。我的语法在某处是错误的,还是我遗漏了什么?如果你有更好的方法通过直接的 CSS 来做到这一点,我会全力以赴。

您可以通过此JS Fiddle 查看完整代码。

谢谢!

【问题讨论】:

  • @Edward: "我无权访问 HTML/PHP 文件..." (这似乎是一个奇怪的限制,可以(重新)开发/更改任何东西,但即便如此)。
  • 同意。这是一个奇怪的限制......我不是一个大粉丝。这意味着我的 CSS 真的是 hack-ish 和恶心。
  • 标签: html css css-selectors pseudo-class


    【解决方案1】:

    一旦清除了班级的问题,只有 2 个问题悬而未决。 背景位置应该在左边而不是中心,并且 a 的选择器不起作用。您可以保留之前元素使用的样式,它更加清晰:

    .header nav > ul > li:first-of-type {
        background: url('http://placekitten.com/20/60') no-repeat left top;
        -webkit-transition: background-position 0.3s ease-in; 
        -moz-transition: background-position 0.3s ease-in; 
        -o-transition: background-position 0.3s ease-in; 
        transition: background-position 0.3s ease-in; 
    }
    
    
    .header nav > ul > li:first-of-type:hover {
        background-position: left bottom;
    }
    
    .header nav > ul > li:first-of-type a {
        color: transparent;
    }
    

    顺便说一句,重要的没必要

    demo

    (只需将小猫图像更改为更适合的另一个)

    【讨论】:

    • 谢谢!看起来你是对的 - 这会解决它。我发现有一个复杂的问题,这个 CMS 将 CSS 中的一些特殊字符转换为 ISO-8859-1,这会将 &gt; 转换为 &amp;#62;,这使得它无法在浏览器中工作。但这是我必须与 CMS 制造商一起解决的问题....感谢您的帮助!
    • 很高兴它对您有所帮助。我看过你的demo。我期待图像是 2 个精灵。如果不是这样,可能会更好地进行另一个过渡?但这是另一个故事......
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签