【问题标题】:Keep tab active state, and open tab by default保持标签页活跃状态,默认打开标签页
【发布时间】:2015-07-13 23:19:47
【问题描述】:

我在这里做了一个粗略的设置:

https://jsfiddle.net/9h5eqsuy/1/

a) 我的问题是我的标签工作得相当好,但是一旦点击它就不会保持活动的紫色状态。我尝试了一些解决方案都无济于事。

b) 此外,我不知道如何在加载页面时默认打开“项目 1”选项卡。

如果可能,我想避免使用 javascript。任何想法都会很棒。

HTML

<p>
  <div class="tabbuttonsdiv">
    <a href="#item1" class="tabbuttons">item 1</a>
    <a href="#item2" class="tabbuttons">item 2</a>
    <a href="#item3" class="tabbuttons">item 3</a>
  </div>

  <div class="items">
    <p id="item1" class="tabcontent">... item 1...
    <p id="item2" class="tabcontent">... item 2...
    <p id="item3" class="tabcontent">...      
  </div>
</p>

CSS

div.items p {
    display: none;
}

div.items p:target {
    display: block;
}

.tabbuttons{
    color: #fff;
    background-color:#3195c1;
    border: none;
    padding: 10px;
}

.tabbuttons:hover {
    background-color:PURPLE;
}
.tabcontent{
    background: #ddd;
    min-height: 100px;
}

最后一个问题是否有人感到慷慨:

c) 目前我不能将 div 或任何内容放在下面的“这里”中:

<p id="item1" class="tabcontent">... "here"... </p>

它似乎只喜欢文本,并且会删除我粘贴到其中的任何内容。他们有什么简单的方法可以解决这个问题吗?

【问题讨论】:

    标签: jquery html css tabs


    【解决方案1】:

    a) 您可以在当前活动标签中添加class="active",以保持颜色

    b) 您可以使用相同的active 类默认显示选项卡。

    c) 你不能将&lt;div&gt; 嵌套在&lt;p&gt; 下,但是你没有理由不能将你的&lt;p class="tabcontent"&gt; 放入&lt;div class="tabcontent"&gt;

    我已经更新了小提琴:https://jsfiddle.net/9h5eqsuy/2/

    【讨论】:

    • 你将如何在没有 Javascript(或 jQuery)的情况下添加 active 类?这就是 OP 想要的,我真的很好奇它是否可能:D
    • 哦!您可以通过在按钮和选项卡上使用相同的类,并以类名为目标,使用 css 更改按钮的背景来做到这一点。我看看能不能模拟一下。
    • 所以,我认为最接近没有 javascript 的选项卡的功能是使用单选按钮。我试图把这样的东西放在一起,但它非常有问题。 jsfiddle.net/9h5eqsuy/7点击文字会改变按钮/高亮,但是点击框会激活锚链接... buggy。
    【解决方案2】:

    由于您在问题中标记了 jQuery,我想出了这个解决方案。

    CSS:

    div.items p {display: none}
    div.items p:first-child {display: block; } /* solution for b. */
    
    .tabbuttons{
        color: #fff;
        background-color:#3195c1;
        border: none;
        padding: 10px;
    }
    
    .tabbuttons:hover {
        background-color:PURPLE;
    }
    .tabcontent{
     background: #ddd;
        min-height: 100px;
    }
    
    .activeTab { background-color:PURPLE } /* solution for a. */
    .activeItem { display: block; }
    

    jQuery

    $(function() {    
        $('.tabbuttons').on('click', function() {
            $('.tabbuttons').removeClass('activeTab'); /* solution for a. */
            $(this).addClass('activeTab'); /* solution for a. */
            var i = $(this).attr('href');
            $('.items p').hide();
            $(i).show();
        });
    });
    

    Updated Fiddle

    对于问题 c.:使用 div 而不是段落...

    【讨论】:

    • 谢谢,这似乎几乎可以工作了——尽管你能重写 jquery 部分以包括对 jquery 的调用吗?我似乎无法让 js 工作 - 在我的设置中我只能有一个 html 文件、一个 css 文件和一个 js 文件。
    • 你确实需要 jQuery。将其添加到 HTML 文件的头部 &lt;script src=" http://code.jquery.com/jquery-2.1.4.min.js"&gt;&lt;/script&gt;
    • 抱歉 LinkinTED,我的意思是说我的 html 中不能包含任何 js,只能包含原始 html 文件和原始 js 文件。我可以将该代码与您的原始 js 一起包含在 js 文件中吗?
    【解决方案3】:

    它很接近,但不完全在那里(正如我旁注的那样,我可能会选择一个 javascript 选项)

    您需要做的是在链接和目标之间创建层次关系。为此,请将链接及其相关目标放入容器中。然后我使用绝对定位将目标定位在stage 容器中。我还保持item1 始终显示,以便在页面加载时显示,但z-index 比其他项目低,因此它们显示在其顶部。

    问题在于 itme1 选项卡在页面加载时未突出显示

    div.items p {
      display: none
    }
    div.items p:target {
      display: block
    }
    #stage {
      position: releative;
    }
    #stage>div {
      display: inline-block;
    }
    #stage .item {
      position: absolute;
      z-index: 10;
      display: none;
      left: 8px;
      width: 90%
    }
    #stage #item1 .item {
      display: block;
      z-index: 1;
    }
    #stage>div:target .item {
      display: block;
    }
    .tabbuttons {
      color: #fff;
      background-color: #3195c1;
      border: none;
      padding: 10px;
    }
    .tabbuttons:hover,
    :target .tabbuttons {
      background-color: PURPLE;
    }
    .tabcontent {
      background: #ddd;
      min-height: 100px;
    }
    <div id="stage">
      <div id="item1">
        <a href="#item1" class="tabbuttons">item 1</a>
        <div class="item">
          <p class="tabcontent">... item 1...</p>
        </div>
      </div>
      <div id="item2">
        <a href="#item2" class="tabbuttons">item 2</a>
        <div class="item">
          <p class="tabcontent">... item 2...</p>
        </div>
      </div>
      <div id="item3">
        <a href="#item3" class="tabbuttons">item 3</a>
        <div class="item">
          <p id="item3" class="tabcontent">...</p>
        </div>
      </div>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2020-05-13
      • 2019-12-28
      • 2019-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多