今天写二级列表的时候想起来在学习html+css的时候,刚开始用css写二级列表的时,犯了一个致命的错误,一级列表中用内容 + padding值撑开,在写二级列表的时候,我想都没想,也直接用内容 + 一级列表的padding值将内容同样撑开,哎,然后让二级列表里的内容和一级列表里的内容一样,发现没有问题啊。过了一天之后,我又想起来,不对啊,如果二级列表也用内容 + padding、值撑开的话,那如果字数不一样的话,它的宽度不是也不一样么?后来在网上也找了一些代码来看,最后还是自己找出来一个方法,解决了这个小bug(只怪当初太水啊!)
下面就给大家看一下当初解决问题的小方法吧,希望初学者在用css写二级列表的时候,不要和我当时的想法一样天真
用我之前错误的方法会呈现出如下问题:
图1
图2
1.当给二级列表设置一定的宽度时,二级列表的字数和一级列表的字数不一样的时候,会出现文本不居中一级文本溢出来的现象。
2.当没有给二级列表设置宽度时,它的宽度完全是由a标签中的内容 + padding值撑开的,所以当它的字数比一级列表字数多的时候将会出现图2的情况
要想解决如上的问题,很简单,就是给二级列表ul加宽度,但是这个宽度要是相对应的一级列表宽度的100%;并且二级列表不在用文本 + padding值来撑开(因为它已经有定宽了),只是吧a标签中的值进行水平垂直居中即可。
效果如图3:
图3
注:文中以及列表之间的竖线为了方便我用的是左边框,不建议大家这样写,建议大家写在 li下
全部代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
padding: 0;
margin: 0;
}
ul{
list-style: none;
}
a{
text-decoration: none;
}
.nav{
width: 100%;
height: 50px;
background-color: #f00;
}
.content{
width: 1000px;
height: 50px;
margin: 0 auto;
}
ul.ul1>li{
position: relative;
float: left;
line-height: 50px;
}
ul.ul1>li>a{
display: inline-block;
height: 50px;
color: #000;
padding-left: 30px;
padding-right: 30px;
border-left:1px solid #000;
}
ul.ul2{
display: none;
position: absolute;
width: 100%;
height: 150px;
top: 50px;
background-color: yellow;
}
ul.ul2>li{
line-height: 50px;
}
ul.ul2>li>a{
width: 100%;
display: block;
text-align: center;
}
ul.ul1>li:hover ul.ul2{
display: block;
}
ul.ul2>li a:hover{
background-color: red;
}
</style>
</head>
<body>
<div class="nav">
<div class="content">
<ul class="ul1">
<li>
<a style="border:none" href="#">link1</a>
<ul class="ul2">
<li><a href="#">link1link1</a></li>
<li><a href="#">link1</a></li>
<li><a href="#">link1</a></li>
</ul>
</li>
<li><a href="#">link1</a></li>
<li><a href="#">link1</a></li>
<li><a href="#">link1</a></li>
<li><a href="#">link1</a></li>
<li><a href="#">link1</a></li>
<li><a href="#">link1</a></li>
<li><a href="#">link1</a></li>
<li><a href="#">link1</a></li>
</ul>
</div>
</div>
</body>
</html>