#html #css
#HTML #css
Вопрос:
Проблема: я впервые создаю выпадающее меню в CSS, и у меня возникают проблемы с его отображением. Текущий CSS, который у меня есть, делает так, что при наведении курсора на пункт меню «Проекты» на панели навигации выпадающий список открывается, как и должен, но когда вы переходите к выбору опции в выпадающей панели, он исчезает. Для меня это имеет большой смысл, поскольку вы перестаете нависать над пунктом меню «Проекты», к которому привязано свойство отображения. Он явно выполняет то, что я ему говорю, но я не знаю разумного решения этой проблемы.
Попытки решения:
- Я просмотрел другие сообщения StackOverflow, но не смог найти ни одного, который дал бы мне решение. Вероятно, это связано с моим невежеством, и если я укажу правильное направление, я уверен, что найду то, что мне нужно.
- Я добавил свойство display:block при наведении курсора на любой из выпадающих элементов, но это не работает, если вы не достаточно быстры, чтобы перейти от пункта меню навигации к выпадающему элементу.
Структура HTML:
<div>
<nav class="navbar">
<ul class="navbar-nav">
<li class="nav-item"><router-link to="/">Home</router-link></li>
<li class="nav-item">
<a href="">Projects</a>
<ul>
<li class="nav-item-dropdown">
<router-link to="/pokemon">Pokemon</router-link>
</li>
<li class="nav-item-dropdown">
<router-link to="/graphs">Graphs</router-link>
</li>
<li class="nav-item-dropdown"><router-link to="/data">Data</router-link></li>
</ul>
</li>
<li class="nav-item">
<router-link to="/contact">Contact</router-link>
</li>
<li class="nav-item"><img src="@/assets/github.png" id="logo" /></li>
<li class="nav-item">
<img src="@/assets/linkedin.png" id="logo" />
</li>
</ul>
</nav>
</div>
CSS:
.navbar {
display: flex;
height: 7vh;
align-items: center;
justify-content: center;
font-size: 1.2em;
border-bottom: 1px solid #52657a;
width: 100%;
}
.navbar-nav {
list-style: none;
display: flex;
align-items: center;
padding-top: 2vh;
padding-bottom: 2vh;
}
.nav-item {
padding-left: 1vw;
text-decoration: none;
}
.nav-link {
text-decoration: none;
color: white;
}
nav ul ul {
position: absolute;
list-style: none;
top: 60px;
padding: 0;
text-align: left;
display: none;
background: #0A141C;
}
nav ul ul li {
padding-bottom: 10px;
padding-top: 5px
}
nav ul li:hover > ul {
display: block;
}
.nav-link:hover {
text-decoration: none;
color: #536778;
}
.router-link {
text-decoration: none;
}
.router-link-exact-active {
color: rgb(26, 219, 219);
}
li a {
text-decoration: none;
color: white;
}
#logo {
max-width: 3.5vh;
max-height: 3.5vh;
}
Спасибо за ваше время и помощь.
Ответ №1:
Не могли бы вы ознакомиться с приведенным ниже кодом, надеюсь, он сработает для вас. Когда мы используем абсолютную позицию в любом элементе, мы должны указать его родительскую позицию как относительную позицию, после чего мы можем изменить абсолютную позицию элемента в соответствии с нашими требованиями.
Пожалуйста, обратитесь к этой ссылке https://jsfiddle.net/bve8ok53/2 /
.navbar {
display: flex;
height: 7vh;
align-items: center;
justify-content: center;
font-size: 1.2em;
border-bottom: 1px solid #52657a;
width: 100%;
}
.navbar-nav {
list-style: none;
display: flex;
align-items: center;
padding-top: 2vh;
padding-bottom: 2vh;
}
.nav-item {
padding-left: 1vw;
text-decoration: none;
position: relative;
}
.nav-link {
text-decoration: none;
color: red;
}
nav ul ul {
position: absolute;
list-style: none;
top: 100%;
padding: 0;
text-align: left;
display: none;
background: #0A141C;
}
nav ul ul li {
padding-bottom: 10px;
padding-top: 5px
}
nav ul li:hover > ul {
display: block;
}
.nav-link:hover {
text-decoration: none;
color: #536778;
}
.router-link {
text-decoration: none;
}
.router-link-exact-active {
color: rgb(26, 219, 219);
}
li a {
text-decoration: none;
color: black;
}
#logo {
max-width: 3.5vh;
max-height: 3.5vh;
}
<div>
<nav class="navbar">
<ul class="navbar-nav">
<li class="nav-item"><router-link to="/">Home</router-link></li>
<li class="nav-item">
<a href="">Projects</a>
<ul>
<li class="nav-item-dropdown">
<router-link to="/pokemon">Pokemon</router-link>
</li>
<li class="nav-item-dropdown">
<router-link to="/graphs">Graphs</router-link>
</li>
<li class="nav-item-dropdown"><router-link to="/data">Data</router-link></li>
</ul>
</li>
<li class="nav-item">
<router-link to="/contact">Contact</router-link>
</li>
<li class="nav-item"><img src="@/assets/github.png" id="logo" /></li>
<li class="nav-item">
<img src="@/assets/linkedin.png" id="logo" />
</li>
</ul>
</nav>
</div>
Ответ №2:
Измените position: absolute;
на position: relative;
in nav ul ul
, и я не уверен, был ли этот «пробел» между меню и выпадающим списком преднамеренным, но вы можете вернуть его, добавив немного пикселей в top
Take a look:
.navbar {
display: flex;
height: 7vh;
align-items: center;
justify-content: center;
font-size: 1.2em;
border-bottom: 1px solid #52657a;
width: 100%;
}
.navbar-nav {
list-style: none;
display: flex;
align-items: center;
padding-top: 2vh;
padding-bottom: 2vh;
}
.nav-item {
padding-left: 1vw;
text-decoration: none;
}
.nav-link {
text-decoration: none;
color: white;
}
nav ul ul {
position: relative;
list-style: none;
top: 80px;
padding: 0;
text-align: left;
display: none;
background: #0A141C;
}
nav ul ul li {
padding-bottom: 10px;
padding-top: 5px
}
nav ul li:hover ul {
display: block;
}
.nav-link:hover {
text-decoration: none;
color: #536778;
}
.router-link {
text-decoration: none;
}
.router-link-exact-active {
color: rgb(26, 219, 219);
}
li a {
text-decoration: none;
color: white;
}
#logo {
max-width: 3.5vh;
max-height: 3.5vh;
}
<div>
<nav class="navbar">
<ul class="navbar-nav">
<li class="nav-item"><router-link to="/">Home</router-link></li>
<li class="nav-item">
<a href="">Projects</a>
<ul>
<li class="nav-item-dropdown">
<router-link to="/pokemon">Pokemon</router-link>
</li>
<li class="nav-item-dropdown">
<router-link to="/graphs">Graphs</router-link>
</li>
<li class="nav-item-dropdown"><router-link to="/data">Data</router-link></li>
</ul>
</li>
<li class="nav-item">
<router-link to="/contact">Contact</router-link>
</li>
<li class="nav-item"><img src="@/assets/github.png" id="logo" /></li>
<li class="nav-item">
<img src="@/assets/linkedin.png" id="logo" />
</li>
</ul>
</nav>
</div>