Просмотр страниц с вкладками с использованием CSS и JavaScript - PullRequest
1 голос
/ 06 января 2012

Я хочу создать вкладки для страниц, похожих на страницы профиля при переполнении стека, как показано на рисунке ниже.

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 ]

2 голосов
/ 06 января 2012

Добавьте белую нижнюю границу к вкладке и сделайте вкладку на один пиксель меньше ее контейнера (чтобы учесть верхнюю границу). Вот все 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 голос
/ 06 января 2012

(Не просто копируйте и вставляйте! Сначала прочтите объяснение ниже!)

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: относительным;top: 1px; `
  2. Предоставление вкладкам фонового цвета для покрытия границ блоков содержимого
  3. z-индексирование вкладок в верхней части блоков содержимого с помощью` position :lative;z-index: 1/2; `(z-index работает только для позиционированных элементов)

Я не тестировал код, поэтому вам придется самостоятельно разбираться в деталях.Например, этот код будет нажимать все вкладки вниз, а не только активную.Но я думаю, что вы получаете базовый подход.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...