Пользовательский horiz.menu CSS трюк с нижней границей?необходимый - PullRequest
0 голосов
/ 17 января 2011

Встроенная картинка описывает мой макет.Как видите, проблема в моем горизонтальном меню.Сначала он выравнивается по правому краю, а затем выбранная вкладка не имеет нижней границы (что создает эффект обложки).Если вы выберете вторую вкладку, то у 2nd li не будет нижней границы, а остальные будут связаны.

Проблема в том, как этого добиться?Единственное решение, которое я могу придумать, - это: hover img, который будет пустым, чтобы стереть выбранную нижнюю границу.

CSS layout preview

Код пока:

body
{
font:100% 'century gothic', Verdana, Arial, Helvetica, sans-serif;
color:#3F3F3F;
}
#wrapper
{
width:960px;
height:700px; /*temp*/
margin:0 auto;  
background:#FFF;
}

#header   /*not visible on the embedded layout*/
{
width:960px;
height:91px;
}

#nav-bar
{
width:960px;
height:50px;

border-bottom:#000070 1px solid;  
    /*
       If only <ul> has bottom border then i wouldn't have the bottom border for 
       the whole #nav-right. But this is also a problem for the selected 
       tab that doesn't have any
    */
}
#nav-left
{
    float:left;
width:73px;
height:50px;
border-right:1px #000070 solid;
}
#nav-right
{
float:left;
width:882px;
height:50px;

display:inline-block;
position:relative;  
    /*now i can use absolute on the <ul> for bottom-right positioning*/
}
#nav-right ul
{
list-style: none;
/*padding: ...  ;*/

position:absolute;
bottom:0px;
right:5px;

border-top:1px solid #000070;
border-left:1px solid #000070;
border-right:1px solid #000070;
 }
 #nav-right li 
 {
    display:inline-block;
/*padding: ...;*/
 }
 #nav-right li a 
 {
/*padding: ...;*/
text-decoration:none;
margin:0;
color:#CCC;
 }
 #nav-right li a:hover 
 {
color:#000070;
font-weight:bold;                
 }
 #content
 {
    width:960px;
clear:both;
 }
    #con-left{/*...*/}
     #con-right{/*...*/}



 HTML STRUCTURE:

<body>
<div id="wrapper">

    <div id="header"><img src="#" /></div>

    <div id="nav-bar">
        <div id="nav-left"></div>
        <div id="nav-right">
            <ul>
                <li><a href="#">Home</a></li>
                <li><a href="#">Services</a></li>
                <li><a href="#">Items</a></li>
                <li><a href="#">Contact</a></li>
            </ul>
        </div>
    </div>  <!--END: nav-bar-->

    <div id="content">
        <div id="con-left"></div>
        <div id="con-right">
            <p>
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ultrices semper orci in euismod. Proin sed justo at lectus dapibus <br> 
            interdum. Donec quis elit massa, id porttitor eros. Nullam vel consectetur diam. <br>
            Phasellus bibendum, justo sed vehicula luctus, velit lectus rhoncus velit, at placerat nibh sapien quis felis. Mauris id aliquet. <br>  
            Integer mattis convallis luctus. Vivamus suscipit euismod sodales. Suspendisse cursus, erat eu egestas gravida, est mi semper ,<br> 
            quis sagittis purus mi sit amet nisl. Praesent adipiscing molestie sem. Mauris vitae arcu nibh, tristique laoreet nisi. Proin quis<br>
            id sapien condimentum facilisis et at odio. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. <br>
            Morbi eget est elit, nec rutrum enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.<br>
            </p>     
        </div>
    </div>


</div><!--END: wrapper-->

Есть какие-нибудь предложения о том, как добиться эффекта отсутствия нижней границы для выбранных вкладок?

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

Ответы [ 2 ]

3 голосов
/ 17 января 2011

Вы можете добавить следующее css:

ul li:hover {
    border-bottom: 1px solid white;
    margin-bottom: -1px;
}

Таким образом, при наведении на li меню белая граница перекрывает синюю границу контейнера div.

Пример: http://jsbin.com/ujomi5/3

1 голос
/ 17 января 2011

Как насчет определения выбранного класса CSS и его применения только к выбранному в данный момент элементу li в ul. Удалите ли это границу, которая в целом применяется ко всем элементам ul? Я предполагаю, что любой механизм навигации между страницами также будет иметь возможность добавлять этот класс CSS к соответствующему элементу li.

Вы используете специфичные для id селекторы css, когда использование селекторов классов может быть более мощным. Скажем, у вас есть следующие стили:

.nav-left { border-bottom: 1px solid black; }
.nav-selected { border-bottom: 0 solid black; color:blue; }
#nav-item-1 { background-color: red; }   
#nav-item-2 { background-color: green; }
#nav-item-2 .nav-selected { color: orange; }

У вас может быть несколько спецификаторов классов в элементах, если вы хотите визуализировать вывод и не применяете ваши стили на стороне клиента с такой инфраструктурой, как jQuery.

<li id="nav-item-1" class="nav-left nav-selected">
<li id="nav-item-2" class="nav-left">

Порядок атрибутов класса переопределяет предыдущие селекторы класса, поэтому nav-selected удалит границу, примененную с nav-left. Добавление селекторов идентификаторов даст вам синий на красном и оранжевый на зеленом соответственно для ваших элементов item-1 и item-2.

...