Я пытаюсь сделать вертикальное раскрывающееся меню с подменю, например:
1-
1-
2-
1-
3-
Я придумал функцию ниже, но 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;
}
CSS не применяется, потому что ваш вывод HTML неверен. В следующем коде:
<ul id="nav">
<?php display_menus(); ?>
</ul>
призыв к display_menus()
производит свой собственный <ul>...</ul>
теги, так что вы в конечном итоге с:
<ul id="nav"><ul> ...
</ul></ul>
Это, конечно, не верный HTML. Одним из решений этой проблемы является пропустить <ul>...</ul>
теги в HTML:
<?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>";
}
}
Обратите внимание, что вы также получите неправильный HTML, если $row['id']
или же $row['menuNome']
бывает содержать <
или же &
персонажи. Вы, вероятно, должны избежать последнего с htmlspecialchars($row['menuNome'])
. Вероятно, не первый, в зависимости от того, какие значения у вас есть для id
«S.
Обратите внимание также что расширение MySQL устарело и больше не поддерживается. Вы должны использовать MySQLi или же PDO Эти дни.
Других решений пока нет …