使用css和javascript的页面选项卡式视图

时间:2012-01-06 10:05:34

标签: html css tabs

我想创建一个类似于堆栈溢出的配置文件页面的页面的选项卡视图,如下图所示。

enter image description here

我已经能够创建一个标签式界面,但是我无法删除标签下面的边框,因为边框实际上已经给了下面的div。如果我将边框设置为标签,那么我就无法将边框扩展到没有标签的区域。

这是我正在使用的html

    <div id="centerDiv">
        <div id="centeredMenu">
            <ul class="tabs">
                <li><a class="active" href="#">Questions</a></li>
                <li><a href="#">Blogs</a></li>
                <li><a href="#">Posts</a></li>
            </ul>
        </div>

    </div>

    <div style="clear:both;"></div>

    <div class="favContentBox">
     <!-- The content goes here -->
    </div>

    <div class="favContentBox">
     <!-- The content goes here -->
    </div>

    <div class="favContentBox">
     <!-- The content goes here -->
    </div>

我有favContentBox ul个元素li。并且javascript是

$(document).ready(function(){

    var currentTab = 0; 

    function openTab(clickedTab) {
        var thisTab = $(".tabs a").index(clickedTab);
        $(".tabs li a").removeClass("active");
        $(".tabs li a:eq("+thisTab+")").addClass("active");
        $(".favContentBox").hide();
        $(".favContentBox:eq("+thisTab+")").show();
        currentTab = thisTab;
    }

    $(".tabs li a").click(function() { 
        openTab($(this)); 
        return false; 
    });

    $(".tabs li a:eq("+currentTab+")").click()

});

css就像这样

.favContentBox
{
    border:1px solid #808080;
    padding-left:20px;
    padding-right:20px;
    min-height: 500px;

}

.tabs
{
    margin:0 0 0 0;
    padding:0 0 0 0;
    left:50%;
    text-align:center;
    clear:left;
    position:relative;
    float:left;
}
.tabs li 
{
    list-style: none;
    float: left; 
    right:50%;
    display:block;
    position:relative;
}

.tabs li a
{
    display: block;
    color:black;
    font-weight: bold;
    text-align: center;
    text-decoration: none;
    width:100px;
    padding: 5px 0 5px 0;
    border-left: 1px solid #808080;
    border-top: 1px solid #808080;
    border-right: 1px solid #808080;
    margin-left:20px;
    background-color:#F0F0F0;
}

2 个答案:

答案 0 :(得分:2)

向选项卡添加白色底部边框,并使选项卡比其容器小一个像素(以考虑顶部边框)。这是用于选项卡悬停的所有CSS解决方案。

演示:http://jsfiddle.net/ThinkingStiff/sCgMg/

HTML:

<ul id="tabs"><!--
    --><li class="tab">summary</li><!--
    --><li class="tab selected">answers</li><!--
    --><li class="tab">questions</li><!--
    --><li class="tab">tags</li><!--
--></ul>

CSS:

#tabs {
    border-bottom: 1px solid #666666;
    font: bold 15px/15px Helvetica, Tahoma, Arial;
    height: 30px;  
    margin: 0;
    padding: 0; 
    padding-left: 10px; 
}

.tab {
    color: #777;
    cursor: pointer;
    display: inline-block; 
    height: 23px; 
    font-size: 13px;
    line-height: 13px;
    margin-left: 2px;
    margin-right: 2px;
    padding-top: 8px;
    text-align: center;
    vertical-align: top;
    width: 80px; 
}

.tab:hover {
    border: 1px solid #666666;
    border-bottom: 1px solid white;
    height: 22px;
    margin-top: 5px;
    padding-top: 2px;
    width: 78px; 
}

.selected {
    border: 1px solid #666666;
    border-bottom: 1px solid white;
    color: black;    
    font-size: 15px;
    line-height: 15px;
    padding-top: 6px;
    width: 78px; 
}

.selected:hover {
    height: 23px;
    margin-top: 0;
    padding-top: 6px;
    width: 78px; 
}

脚本:

$( ".tab" ).click( function () {

    $( ".selected" ).removeClass( "selected" );
    $( this ).addClass( "selected" );

} );

输出:

enter image description here

答案 1 :(得分:1)

(不要只是复制粘贴!首先阅读下面的解释!)

HTML:

<ul>
    <li><a href="#content1">Tab 1</a></li>
    <li><a href="#content2">Tab 2</a></li>
    <li><a href="#content3">Tab 3</a></li>
</ul>
<div class="content-boxes">
    <div class="content1">Content 1</div>
    <div class="content2">Content 2</div>
    <div class="content3">Content 3</div>
</div>

CSS:

ul li {
    /* I've left out all the floating and other obvious stuff,
    since you didn't ask for that */
    position: relative;
    top: 1px;
    background-color: #fff;
    border: solid 1px #808080;
    border-bottom: none;
    z-index: 2;
}
.content-boxes>div {
    position: relative;
    z-index: 1;
}

此代码的本质是:

  1. 将标签向下移动1个像素,同时保留内容框的位置,因为它们位于`position:relative;顶部:1px;`
  2. 为标签添加背景颜色以遮盖内容框的边框
  3. 使用`position:relative;对内容框顶部的标签进行z-index; z-index:1/2;`(z-index仅适用于定位元素)
  4. 我没有测试代码,所以你必须自己解决这些问题。例如,此代码会将所有标签向下推,而不仅仅是活动标签。但我认为你得到的基本方法。

    希望这有帮助。