【问题标题】:Is it possible to set a style of link that shows only when the linked webpage is being viewed?是否可以设置仅在查看链接网页时显示的链接样式?
【发布时间】:2010-09-16 18:30:56
【问题描述】:

我遇到了这样的问题(这是 html/css 菜单):

网上商城 |另一个eshop |另一个网店

客户希望它像这样工作:

用户访问网站,点击 Eshop。 Eshop 变为带有红色框轮廓的红色。用户决定访问另一个eshop,所以eshop会恢复正常颜色,没有红框轮廓,另一个eshop会再次做红色轮廓的把戏..

我知道有 A:visited 但我不希望所有访问过的菜单链接都显示为红色并带有红色框框。

感谢任何帮助:)

【问题讨论】:

  • 你能澄清一下用例吗,新网站会在新窗口/iframe 中打开吗?您只想突出显示最后选择的链接吗? Eshop网站关闭时是否需要取消选择?
  • 不,它们在同一个窗口中打开,是的,它应该在关闭网站后取消选择。我想突出显示“活动网站的链接”..

标签: css hyperlink visited


【解决方案1】:

Joe Skora 写的相同,但更具体:

.red {
    outline-color:red;
    outline-width:10px;
}

现在您可以在 click-event-handler 中使用 Javascript(在此示例中使用 jQuery):

$('.red').removeClass('red'); // removes class red from all items with class red
$(this).addClass('red'); // adds class red to the clicked item

另一种方法是使用伪选择器 :target。
有关它的信息:www.thinkvitamin.com

【讨论】:

  • 这依赖于不针对单个页面的链接,虽然可能,但不太可能
【解决方案2】:

您可以使用纯 CSS 和 HTML 来做到这一点。我们常用的一种方法是为每个导航项设置一个匹配的 ID 和类选择器。

这样做的好处是您不必修改每个页面的菜单代码,您可以修改页面本身,除非一切都是动态的。

它是这样工作的:

<!-- ... head, etc ... -->
<body>

<ul class="nav">
    <li><a href="home.html" class="nav-home">Home</a></li>
    <li><a href="art.html" class="nav-art">Art</a></li>
    <li><a href="contact.html" class="nav-contact">Contact</a></li>
</ul>

<!-- ... more page ... -->

</body>

然后你像这样设置一些 CSS:

#NAV-HOME .nav-home,
#NAV-ART .nav-art,
#NAV-CONTACT .nav-contact { color:red; }

要更改“当前”菜单项,您只需将相应的 ID 分配给文档结构中较高的元素即可。通常我将它添加到

标记中。

要突出显示“艺术”页面,您只需这样做:

<!-- The "Art" item will stand out. -->
<body id="NAV-ART">

<ul class="nav">
    <li><a href="home.html" class="nav-home">Home</a></li>
    <li><a href="art.html" class="nav-art">Art</a></li>
    <li><a href="contact.html" class="nav-contact">Contact</a></li>
</ul>

<!-- ... more page ... -->

</body>

【讨论】:

    【解决方案3】:

    您可以使用 CSS 类来做到这一点。例如,selected 类可以识别当前商店,改变颜色和轮廓。然后您可以通过在菜单项中添加/删除类来更改选择。

    看一下here,它介绍了有关构建 CSS 菜单的教程。

    【讨论】:

    • 你能说得更具体些吗?
    【解决方案4】:

    基本上,它不能单独使用 CSS 完成,必须执行一些脚本(服务器或客户端,最好是服务器)。正如其他人建议的那样,将“选定”类(或类似的东西)添加到活动链接,并在 CSS 中为其定义样式。

    例如链接:

     <a href="#">Eshop</a> | <a href="#" class="selected">Another eshop</a> | <a href="#">Another eshop</a>
    

    样式:

    .selected {
         font-weight:bold;
         color:#efefef;
    }
    

    链接将动态生成,例如使用 PHP:

     <?php
     foreach(array('eshop' => '#','another eshop' => '#','yet another eshop' => '#') as $title => $url) {
          echo '<a href="' . $url . '"' 
               . ($url == $_SERVER['REQUEST_URI'] ? ' class="selected"' : null) 
               . '>' . $title . '</a>'; 
     }
    

    【讨论】:

      【解决方案5】:

      如果您在相同浏览器窗口中移动到新页面,Zack MulgrewBobby Jack两者都有很好的答案。

      如果你是在新窗口打开eshop链接,单靠css是无能为力的,gs除了类名的选择(红色)。

      这是什么?

      【讨论】:

        【解决方案6】:

        据我所知,您只能通过为每个页面生成不同的代码(为当前页面设置不同的类)或在页面加载后使用 JavaScript 更改菜单来做到这一点。

        【讨论】:

          【解决方案7】:

          你可以像这样使用和属性选择器...

          a[href^="http:\\www.EShop"]:visted { color: red; }
          

          通过这样做,您是在说任何具有以 http:\Eshop.com 开头的 href 并已访问过的链接都应用此样式。

          【讨论】:

            【解决方案8】:

            这取决于你的页面是如何构建的,但经典的 CSS 是在正文和每个导航链接上都有一个 id,所以你可能会有这样的东西:

            eshop.html

            <body id="eshop">
              <ul>
                <li><a href="" id="link-eshop">Eshop</a></li>
                <li><a href="" id="link-aeshop">Another eshop</a></li>
                <li><a href="" id="link-eshop-three">Another eshop</a></li>
              </ul>
            </body>
            

            和相应的CSS:

            #eshop #link-eshop, #aeshop, #link-aeshop, #eshop-three #link-eshop-three
            {
                color: red;
                outline: 1px solid red;
            }
            

            导航是一致的;只有正文上的 id 会随着页面的变化而变化。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-05-24
              • 2021-11-26
              • 2021-11-09
              • 2014-12-17
              • 2010-10-11
              • 2019-04-26
              • 2014-07-04
              相关资源
              最近更新 更多