我正在尝试使用子菜单创建一个垂直下拉菜单,例如:
1-
1-
2-
1-
3-
我已经提供了下面的功能,但即使使用以下内容在页面上定义了CSS,也没有应用CSS:
<link href="estilo.css" rel="stylesheet" type="text/css" media="screen" />
我做错了什么?
function display_menus($menuIdPai = 0) {
$query = mysql_query("SELECT * FROM menu WHERE menuIdPai = ".$menuIdPai) or die(mysql_error());
if (mysql_num_rows($query) > 0) {
echo "<ul>";
while ($row = mysql_fetch_array($query)) {
echo "<li> <a href='percentagem.php'>".$row['id'].$row['menuNome']."</a>";
display_menus($row['menuId']);
echo "</li>";
}
echo "</ul>";
}
}
<ul id="nav">
<?php display_menus(); ?>
</ul>
ul {
margin: 0;
padding: 0;
list-style: none;
width: 150px;
}
ul li {
position: relative;
}
li ul {
position: absolute;
left: 149px;
top: 0;
display: none;
}
ul li a {
display: block;
text-decoration: none;
color: #E2144A;
background: #fff;
padding: 5px;
border: 1px solid #ccc;
}
li:hover ul {
display: block;
}
答案 0 :(得分:1)
由于您的HTML输出不正确,因此未应用CSS。在以下代码中:
<ul id="nav">
<?php display_menus(); ?>
</ul>
对display_menus()
的调用会生成自己的<ul>...</ul>
标记,因此您最终得到:
<ul id="nav"><ul> ...
</ul></ul>
这当然不是有效的HTML。对此的一个解决方案是跳过HTML中的<ul>...</ul>
标记:
<?php display_menus(); ?>
并调整display_menus()
仅将id="nav"
属性输出到根菜单($menuIdPai == 0
时):
function display_menus($menuIdPai = 0) {
/* Added $id variable: */
$id = ($menuIdPai == 0 ? ' id="nav"' : ''); /* Note space before id */
$query = mysql_query("SELECT * FROM menu WHERE menuIdPai = ".$menuIdPai) or die(mysql_error());
if (mysql_num_rows($query) > 0) {
/* Added $id here: */
echo "<ul$id>";
while ($row = mysql_fetch_array($query)) {
echo "<li> <a href='percentagem.php'>".$row['id'].$row['menuNome']."</a>";
display_menus($row['menuId']);
echo "</li>";
}
echo "</ul>";
}
}
请注意,如果$row['id']
或$row['menuNome']
恰好包含<
或&
个字符,您也会生成错误的HTML。你应该用htmlspecialchars($row['menuNome'])
来逃避后者。可能不是第一个,取决于您对id
的价值观。