我正在创建一个导航栏(在 Boostrap 中),但当我将鼠标移到某个项目上(例如在公司上)以显示下面的下拉菜单时遇到问题。
问题是绿色选择矩形的位置太靠近“公司”(几乎就像在它下划线一样),相反,我想将绿色矩形定位得更低,并且精确地位于导航栏的下边缘。因此,我还想改进下拉菜单,因为它似乎位于导航栏上方太多并与导航栏重叠。我想要得到的结果是这样的:
我认为问题与:
或者也许问题是别的,我不知道,我无法解决。
document.addEventListener("DOMContentLoaded", function () {
const dropdowns = document.querySelectorAll(".nav-item.dropdown");
dropdowns.forEach(dropdown => {
dropdown.addEventListener("mouseenter", function () {
const menu = this.querySelector(".dropdown-menu-horizontal");
if (menu) menu.style.display = "flex";
});
dropdown.addEventListener("mouseleave", function () {
const menu = this.querySelector(".dropdown-menu-horizontal");
if (menu) menu.style.display = "none";
});
});
});
* {
box-sizing: border-box;
}
/* Navbar */
.navbar {
background-color: #000033;
padding: 0px 0; /* Imposta il padding verticale invece dell'altezza */
display: flex;
align-items: center;
position: relative;
z-index: 1000;
}
/* Stile logo e testo del brand */
.logo {
height: 80px;
margin-right: 10px;
}
.brand-text {
color: #ffffff;
display: flex;
flex-direction: column;
justify-content: center;
text-align: left;
line-height: 1;
}
.fondazione {
font-size: 0.80em;
font-weight: normal;
letter-spacing: 0.28em;
}
.surname {
font-size: 2.4rem;
font-weight: bold;
letter-spacing: 0.05em;
}
/* Rettangolino colorato sotto le voci della navbar */
.navbar-nav .nav-link {
color: #ffffff;
margin-right: 10px;
padding: 0 10px; /* Gestisce lo spazio tra i link */
line-height: normal; /* Usa la line-height di default */
position: relative;
}
.navbar-nav .nav-link:hover::after {
content: '';
display: block;
width: 100%;
height: 3px; /* Altezza del rettangolo */
background-color: #459439;
position: absolute;
bottom: 0; /* Allineato al bordo inferiore */
left: 0;
z-index: 1000;
}
/* Rimozione della freccia dropdown */
.nav-link.dropdown-toggle::after {
display: none;
}
/* Dropdown orizzontale */
.dropdown-menu-horizontal {
display: none;
background-color: #000033 !important;
padding: 20px !important;
min-width: 100%;
border-radius: 0;
position: absolute;
left: 0;
top: 100%;
z-index: 9999;
}
.dropdown-item-horizontal {
color: #ffffff;
display: inline-flex;
align-items: center;
padding: 10px 20px;
margin-right: 30px;
white-space: nowrap;
}
.dropdown-item-horizontal img {
width: 50px;
height: 50px;
margin-right: 15px;
}
.dropdown-item-horizontal:hover {
color: #d4d4ff;
text-decoration: none;
}
/* Mostra il menu a tendina al passaggio del mouse */
.nav-item:hover .dropdown-menu-horizontal {
display: flex;
justify-content: space-around;
}
/* Responsive per dispositivi mobili */
@media (max-width: 768px) {
.navbar-expand-md .navbar-nav .nav-link {
padding-top: 20px;
padding-bottom: 20px;
}
}
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Example</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="styles.css">
</head>
<body>
<!-- Navbar con logo e link -->
<nav class="navbar navbar-expand-md navbar-dark mb-0">
<div class="container">
<a class="navbar-brand d-flex align-items-center" href="#">
<img src="img/..." alt="Logo" class="logo">
<div class="brand-text">
<span class="fondazione">AAAAAAA</span>
<span class="surname">XXXX</span>
</div>
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ml-auto">
<li class="nav-item dropdown">
<a class="nav-link" href="#" id="fondazioneDropdown">COMPANY</a>
<div class="dropdown-menu dropdown-menu-horizontal" aria-labelledby="fondazioneDropdown">
<a class="dropdown-item-horizontal" href="#"><img src="..." alt="Logo 1"> Example 1</a>
<a class="dropdown-item-horizontal" href="#"><img src="..." alt="Logo 2"> Example 2</a>
<a class="dropdown-item-horizontal" href="#"><img src="..." alt="Logo 3"> Example 3</a>
</div>
</li>
<li class="nav-item"><a class="nav-link" href="#">Item 2</a></li>
<li class="nav-item"><a class="nav-link" href="#">Item 3</a></li>
<li class="nav-item"><a class="nav-link" href="#">Item 4</a></li>
<li class="nav-item"><a class="nav-link" href="#">Item 5</a></li>
<li class="nav-item"><a class="nav-link" href="#">Item 6</a></li>
<li class="nav-item"><a class="nav-link" href="#">Item 7</a></li>
<li class="nav-item"><a class="nav-link" href="#">Item 8</a></li>
</ul>
</div>
</div>
</nav>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<script src="script.js"></script>
</body>
</html>
我将 div 包裹在您的链接周围并因此更改了您的规则:
/* Rettangolino colorato sotto le voci della navbar */
.navbar-nav > li > div {
color: #ffffff;
margin-right: 10px;
padding: 0 10px; /* Gestisce lo spazio tra i link */
line-height: normal; /* Usa la line-height di default */
position: relative;
height: 100%;
}
.navbar-nav > li > div:hover::after {
content: '';
display: block;
width: 100%;
height: 3px; /* Altezza del rettangolo */
background-color: #459439;
position: absolute;
bottom: 0; /* Allineato al bordo inferiore */
left: 0;
z-index: 1000;
}
请注意,选择器现在是
div
,并且它有 height: 100%;
规则。
document.addEventListener("DOMContentLoaded", function () {
const dropdowns = document.querySelectorAll(".nav-item.dropdown");
dropdowns.forEach(dropdown => {
dropdown.addEventListener("mouseenter", function () {
const menu = this.querySelector(".dropdown-menu-horizontal");
if (menu) menu.style.display = "flex";
});
dropdown.addEventListener("mouseleave", function () {
const menu = this.querySelector(".dropdown-menu-horizontal");
if (menu) menu.style.display = "none";
});
});
});
* {
box-sizing: border-box;
}
/* Navbar */
.navbar {
background-color: #000033;
padding: 0px 0; /* Imposta il padding verticale invece dell'altezza */
display: flex;
align-items: center;
position: relative;
z-index: 1000;
}
/* Stile logo e testo del brand */
.logo {
height: 80px;
margin-right: 10px;
}
.brand-text {
color: #ffffff;
display: flex;
flex-direction: column;
justify-content: center;
text-align: left;
line-height: 1;
}
.fondazione {
font-size: 0.80em;
font-weight: normal;
letter-spacing: 0.28em;
}
.surname {
font-size: 2.4rem;
font-weight: bold;
letter-spacing: 0.05em;
}
/* Rettangolino colorato sotto le voci della navbar */
.navbar-nav > li > div {
color: #ffffff;
margin-right: 10px;
padding: 0 10px; /* Gestisce lo spazio tra i link */
line-height: normal; /* Usa la line-height di default */
position: relative;
height: 100%;
}
.navbar-nav > li > div:hover::after {
content: '';
display: block;
width: 100%;
height: 3px; /* Altezza del rettangolo */
background-color: #459439;
position: absolute;
bottom: 0; /* Allineato al bordo inferiore */
left: 0;
z-index: 1000;
}
/* Rimozione della freccia dropdown */
.nav-link.dropdown-toggle::after {
display: none;
}
/* Dropdown orizzontale */
.dropdown-menu-horizontal {
display: none;
background-color: #000033 !important;
padding: 20px !important;
min-width: 100%;
border-radius: 0;
position: absolute;
left: 0;
top: 100%;
z-index: 9999;
}
.dropdown-item-horizontal {
color: #ffffff;
display: inline-flex;
align-items: center;
padding: 10px 20px;
margin-right: 30px;
white-space: nowrap;
}
.dropdown-item-horizontal img {
width: 50px;
height: 50px;
margin-right: 15px;
}
.dropdown-item-horizontal:hover {
color: #d4d4ff;
text-decoration: none;
}
/* Mostra il menu a tendina al passaggio del mouse */
.nav-item:hover .dropdown-menu-horizontal {
display: flex;
justify-content: space-around;
}
/* Responsive per dispositivi mobili */
@media (max-width: 768px) {
.navbar-expand-md .navbar-nav .nav-link {
padding-top: 20px;
padding-bottom: 20px;
}
}
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Example</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="styles.css">
</head>
<body>
<!-- Navbar con logo e link -->
<nav class="navbar navbar-expand-md navbar-dark mb-0">
<div class="container">
<a class="navbar-brand d-flex align-items-center" href="#">
<img src="img/..." alt="Logo" class="logo">
<div class="brand-text">
<span class="fondazione">AAAAAAA</span>
<span class="surname">XXXX</span>
</div>
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ml-auto">
<li class="nav-item dropdown">
<div>
<a class="nav-link" href="#" id="fondazioneDropdown">COMPANY</a>
</div>
<div class="dropdown-menu dropdown-menu-horizontal" aria-labelledby="fondazioneDropdown">
<a class="dropdown-item-horizontal" href="#"><img src="..." alt="Logo 1"> Example 1</a>
<a class="dropdown-item-horizontal" href="#"><img src="..." alt="Logo 2"> Example 2</a>
<a class="dropdown-item-horizontal" href="#"><img src="..." alt="Logo 3"> Example 3</a>
</div>
</li>
<li class="nav-item"><div><a class="nav-link" href="#">Item 2</a></div></li>
<li class="nav-item"><div><a class="nav-link" href="#">Item 3</a></div></li>
<li class="nav-item"><div><a class="nav-link" href="#">Item 4</a></div></li>
<li class="nav-item"><div><a class="nav-link" href="#">Item 5</a></div></li>
<li class="nav-item"><div><a class="nav-link" href="#">Item 6</a></div></li>
<li class="nav-item"><div><a class="nav-link" href="#">Item 7</a></div></li>
<li class="nav-item"><div><a class="nav-link" href="#">Item 8</a></div></li>
</ul>
</div>
</div>
</nav>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<script src="script.js"></script>
</body>
</html>