CSS-DIV导航菜单取代了旧的TABLE菜单,元素大小问题



在过去的几周里,我花了一些时间来更新我的HTML/CSS知识。因此,我一直在学习如何实现布局,这是我以前用表所做的,而不是用DIV。

在大多数情况下,它都很好,但我在尝试复制使用以下代码作为表的导航菜单样式时遇到了一些障碍:

HTML:

<div class="navigation">
    <table>
        <tr>
            <td><a href="index.php">home</a></td>
            <td>&nbsp;</td>
            <td><a href="about.php">about</a></td>
            <td>&nbsp;</td>
            <td><a href="music.php">music</a></td>
            <td>&nbsp;</td>
            <td><a href="geeking.php">geeking</a></td>
            <td>&nbsp;</td>
            <td><a href="contact.php">contact</a></td>
        </tr>
    </table>
</div>

CSS:

div.navigation{
    text-align: center;
    color: hsla(200,50%,45%,0.6);
    margin: auto;
    font-family: monospace;
    letter-spacing: 2px;
    position: relative;
    top: -13px;
    margin: 20px auto 20px auto;
    width: 60%;
}
.navigation table{
    height: 70px;
}
th{
text-align: center;
color: hsla(180,50%,45%,0.4);
font-size: 1.1em;
}
table{
border-collapse: collapse;
margin: auto;
margin-top: 0px;
}
table,th{
border: 0px solid black;
padding: 5px;
}    

.navigation a{
    text-decoration: none;
    color: hsla(200,50%,45%,0.6);
    background-color: transparent, white;
    text-transform: lowercase;
    font-size: 1.2em;
    -webkit-transition: all 0.4s linear; 
    -moz-transition: all 0.4s linear; 
    -o-transition: all 0.4s linear; 
    -ms-transition: all 0.4s linear; 
    transition: all 0.4s linear;
    letter-spacing: 0px;
    width: 50px;
    height: 100px;
}
.navigation a:hover{
    color: white;
    -webkit-transition: all 0.2s linear; 
    -moz-transition: all 0.2s linear; 
    -o-transition: all 0.2s linear; 
    -ms-transition: all 0.2s linear; 
    transition: all 0.2s linear;
    width: auto;
    height: auto;
    font-size: 2em;
    font-weight: bold;
    letter-spacing: 2px;
    text-shadow:    0 0 20px hsla(180,50%,40%,.6),
                    0 0 40px hsla(200,50%,45%,.8);
}

您可以在此处实时查看此页面:http://benjaminsherwood.co.uk/index.php需要明确的是,这是我想要的菜单行为,悬停在上面的元素可以增加大小和字母间距,并左右推动其他元素,但保持在同一垂直平面上。这是垂直的平原部分,我被卡住了。

以下是我尝试使用DIVs:创建相同菜单时使用的代码

HTML:

<div class="menu">
    <ul>
        <li><a href="index.php">Home</a></li>
        <li><a href="">About</a></li>
        <li><a href="">Music</a></li>
        <li><a href="">Geeking</a></li>
        <li><a href="">Contact</a></li>
    </ul>
</div>

CSS:

.menu{
    position: fixed;
    left:0; 
    right:0; 
    top:0;
    margin: auto;
    text-transform: lowercase;
    text-align: center;
}
.navigation table{
    height: 70px;
}
.menu li{
    list-style: none outside none;
    display: inline;
}
.menu a{
    text-decoration: none;
    color: hsla(200,50%,45%,0.6);
    font-size:  1.2em;
    letter-spacing: 0px;
    -webkit-transition: all 0.4s ease; 
    -moz-transition: all 0.4s ease; 
    -o-transition: all 0.4s ease; 
    -ms-transition: all 0.4s ease; 
    transition: all 0.4s ease;
}

.menu a:hover{
    color: white;
    font-size: 2em;
    font-weight: 600;
    letter-spacing: 2px;
    -webkit-transition: all 0.2s ease; 
    -moz-transition: all 0.2s ease; 
    -o-transition: all 0.2s ease; 
    -ms-transition: all 0.2s ease; 
    transition: all 0.2s ease;
    text-shadow:    0 0 20px hsla(180,50%,40%,.6),
            0 0 40px hsla(200,50%,45%,.8);
}

您可以在此处实时查看此页面:http://benjaminsherwood.co.uk/test.php

我整个周末都在努力解决这个问题——我到处寻找解决方案,并应用了不同的方法来创建水平菜单布局,甚至最终找到了一位非常擅长CSS的朋友——但是,无论我尝试什么,我都无法找到如何实现与TABLE相同的基于DIV的布局。

这几乎就像基于TABLE的布局从TD元素的中心将更改应用到元素,而基于DIV的布局则从上角应用它。因此,基于DIV的布局似乎只是向下增长,而不是扩展,因此,它两侧的元素不会像TABLE布局那样在同一水平面上向左和向右流动,而是向左或向右推动,也会向下推动。

老实说,我知道解决方案很可能只是接受它在DIV样式中的不同工作方式,或者继续使用TABLE样式。。。但我相信这应该是可能的,我只是错过了一些东西。

TABLE样式曾经做过类似的事情,直到我定义:

.navigation table{
    height: 70px;
}

之后,它开始行动起来。我不知道在DIV布局中做同样的事情是否能解决这个问题。。。我试过设置各种元素的高度,但似乎没有什么不同。

抱歉问了这么长的问题。我真的避免了自己问问题,但我真的只是碰壁了。

.menu ul {
    display: table;
    text-align: center;
    height: 70px;
    padding: 0px;
    margin-top: 0px;
    margin-right: auto;
    margin-bottom: 0px;
    margin-left: auto;
    width: auto;
}
.menu li {
    display: table-cell;
    list-style-image: none;
    list-style-type: none;
    text-align: center;
    vertical-align: middle;
    padding-right: 6px;
    padding-left: 6px;
    padding-top: 0px;
    padding-bottom: 0px;
    margin: 0px;
}

http://jsfiddle.net/Nfs46/

您没有为锚点设置高度,因此高度是从字体大小继承的。

如果将高度和线高度添加到锚点,它几乎可以工作;试着玩这个:

.menu a {
    height: 50px;
    line-height: 50px;
}
.menu a {
  vertical-align: middle;
}

最新更新