Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CSS选项卡控件-如何仅显示第一个div?_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript CSS选项卡控件-如何仅显示第一个div?

Javascript CSS选项卡控件-如何仅显示第一个div?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,好的…我知道已经有很多纯CSS选项卡控件了 这是我的HTML <div class="tabs"> <ul> <li><a href="#tabPage1">One</a></li> <li><a href="#tabPage2">Two</a></li> <li><a href="#tabPage3">Three<

好的…我知道已经有很多纯CSS选项卡控件了

这是我的HTML

<div class="tabs">
    <ul>
    <li><a href="#tabPage1">One</a></li>
    <li><a href="#tabPage2">Two</a></li>
    <li><a href="#tabPage3">Three</a></li>
    </ul>
    <div id="tabPage1">
    <p>
        Hello World
    </p>
    </div>
    <div id="tabPage2">
    <p>
        Goodbye World
    </p>
    </div>
    <div id="tabPage3">
    <p>
        Another World, somewhere far, far away!
    </p>
    </div>
</div>
这个例子没有样式,因为我只关心行为

你可以在这里试试

如何让它显示第一个div,直到单击锚? 我如何让它保持显示的div…显示,即使我将锚点更改为其他内容,如tabPage4…如果这有意义的话? 从中,可以使最后一个在开始时显示,如下所示


只需将第一个标签页移动到最后一个。

这是一个有趣的挑战。不幸的是,我不相信纯粹用CSS就能达到预期的效果

我们可以使用以下工具轻松显示第一个div:

div:first-of-type { display: block; }
但我不知道有什么方法可以选择我们以前的版本:不使用JavaScript的目标div

在这里,我设置了一些jQuery来应用class.active在任何id等于单击的锚href的div上。从那里我们可以覆盖显示:无;在该类的div上使用一些简单的CSS:

$('li a').each(function () {
    $(this).click(function () {
        var active = $(this).attr('href');
        $(active).addClass('active');
    });
});
下面是相关的CSS:

div:first-of-type, div:target { display: block; }
div { display: none; }
.active { display: block; }

还有一个工作示例:

显示加载时的第一个选项卡应该没有那么难。您可以使用pseudo类的:first类型。大概是这样的:

.tabs > div{
    display: none;
}
.tabs > div:first-of-type,
.tabs > div:target {
    display: block;
}
第二个问题有点难。当目标移动到选项卡外的锚点时,第一个选项卡将再次显示。你需要一些方法来保持状态。“现实生活”的解决方案是添加几行javascript来实现这一点,正如@StuartKershaw所建议的那样

如果你坚持完全使用css,你可以使用一个隐藏的单选按钮来保存状态。这是一个有点黑客的输入不是为了那个,你们将不得不改变你们的标记一点,但它应该是可行的

我的意思可以在这里找到一个例子:

注意,我在选项卡之间放置了一些隐藏的单选按钮。我将标签的链接替换为引用这些收音机的标签。然后,我使用:checked和+选择器的组合使事情正常进行。加载时可见的选项卡是具有选中属性的选项卡

同样,这不是我推荐的方式。您添加标记的唯一目的是实现特定的布局,这应该是css的任务。此外,您需要添加的内容在语义上远远不正确

div:first-of-type, div:target { display: block; }
div { display: none; }
.active { display: block; }
.tabs > div{
    display: none;
}
.tabs > div:first-of-type,
.tabs > div:target {
    display: block;
}