У меня есть следующий фрагмент HTML для строки меню:
#menubar {
display: block;
background: #FFFFFF;
}
#menubar ul li a.menubutton {
display: none;
/* dont show burger symbol (mobile menu symbol) */
}
#menubar ul {
display: block;
width: 2em;
/* restrict burger symbol */
padding: 0.9em;
}
#menubar ul li {
display: inline;
}
#menubar ul li ul li {
display: none;
}
/*Header*/
header {
display: block;
background: #2F2C2C;
text-align: center;
}
/* Navigation */
nav {
display: block;
height: 2.5em;
background: #FFFFFF;
text-align: center;
}
nav ul {
display: block;
}
nav ul li {
display: inline;
margin: 0em 0.188em 0em 0.188em;
}
nav ul li a {
color: #454040;
font-size: 1.125em;
line-height: 2.5em;
padding: 0.563em 0.938em 0.375em 0.983em;
transition: background 0.2s;
/* nice transition effect */
-webkit-transition: background 0.2s;
}
nav ul li a:hover {
background: #DBD9D8;
border-bottom: 0.188em solid #FF0000;
}
nav ul li a.active {
border-bottom: 0.188em solid #E7590B;
}
nav ul li ul {
display: none;
}
nav ul li:hover ul.submenu {
text-align: center;
position: fixed;
display: block;
margin-left: 40%;
}
nav ul li ul li:hover {
background: #DBD9D8;
border-bottom: 0.188em solid #FF0000;
}<nav class = "nav">
<ul>
<li><a href = "./index.html" class = "active">Start</a></li>
<li><a href = "./meetings.html">Termine</a></li>
<li><a href = "./organisation.html">Organisation</a>
<ul class = "submenu">
<li><a href = "./organisation/page1.html">Page1</a></li>
<li><a href = "./organisation/page2.html">Page2</a></li>
<li><a href = "./organisation/page3.html">Page3</a></li>
</ul>
</li>
<li><a href = "./about.html">About</a>
<ul class = "submenu">
<li><a href = "./about/page1.html">Page1</a></li>
<li><a href = "./about/page2.html">Page2</a></li>
<li><a href = "./about/page3.html">Page3</a></li>
</ul>
</li>
<li><a href = "./contact.html">Contact</a></li>
</ul>
</nav>ul #submenu отображаются при наведении курсора.
Мне удалось центрировать подменю со всей страницей, используя left: 40% в правиле nav ul li:hover ul.submenu. Однако я хочу расположить подменю по центру их родительских компонентов, поэтому, например, если взять организацию, я бы хотел, чтобы подменю страницы 2 было сосредоточено с полем родительской организации и примерно так же.
Как я могу добиться центрирования относительно родительского компонента?






Добавьте position: relative в пункты меню, в которых есть подменю (то есть в селектор nav ul li), и измените position: fixed на position: absolute для подменю, то есть в селектор nav ul li:hover ul.submenu.
Это делает положение подменю «относительным» к их родительскому элементу (элемент главного меню), поэтому вам следует соответствующим образом настроить параметры left и top в правиле CSS подменю.
#menubar {
display: block;
background: #FFFFFF;
}
#menubar ul li a.menubutton {
display: none;
/* dont show burger symbol (mobile menu symbol) */
}
#menubar ul {
display: block;
width: 2em;
/* restrict burger symbol */
padding: 0.9em;
}
#menubar ul li {
display: inline;
}
#menubar ul li ul li {
display: none;
}
/*Header*/
header {
display: block;
background: #2F2C2C;
text-align: center;
}
/* Navigation */
nav {
display: block;
height: 2.5em;
background: #FFFFFF;
text-align: center;
}
nav ul {
display: block;
}
nav ul li {
display: inline;
margin: 0em 0.188em 0em 0.188em;
position: relative;
}
nav ul li a {
color: #454040;
font-size: 1.125em;
line-height: 2.5em;
padding: 0.563em 0.938em 0.375em 0.983em;
transition: background 0.2s;
/* nice transition effect */
-webkit-transition: background 0.2s;
}
nav ul li a:hover {
background: #DBD9D8;
border-bottom: 0.188em solid #FF0000;
}
nav ul li a.active {
border-bottom: 0.188em solid #E7590B;
}
nav ul li ul {
display: none;
}
nav ul li:hover ul.submenu {
text-align: center;
position: absolute;
display: block;
left: -50%;
}
nav ul li ul li:hover {
background: #DBD9D8;
border-bottom: 0.188em solid #FF0000;
}<nav class = "nav">
<ul>
<li><a href = "./index.html" class = "active">Start</a></li>
<li><a href = "./meetings.html">Termine</a></li>
<li><a href = "./organisation.html">Organisation</a>
<ul class = "submenu">
<li><a href = "./organisation/page1.html">Page1</a></li>
<li><a href = "./organisation/page2.html">Page2</a></li>
<li><a href = "./organisation/page3.html">Page3</a></li>
</ul>
</li>
<li><a href = "./about.html">About</a>
<ul class = "submenu">
<li><a href = "./about/page1.html">Page1</a></li>
<li><a href = "./about/page2.html">Page2</a></li>
<li><a href = "./about/page3.html">Page3</a></li>
</ul>
</li>
<li><a href = "./contact.html">Contact</a></li>
</ul>
</nav>звучит так, будто вы что-то забыли ... Существенными являются position: relative для элементов главного меню li и position: absolute для их дочерних элементов ul. И не забудьте стереть position: fixed, который у вас был раньше. (Вы можете видеть, что это работает в моем фрагменте, который является лишь небольшой модификацией вашего предыдущего кода)
нет, просто скопировал вашу часть в мою и все такое же поведение, и я почти уверен, что нет другого правила, мешающего
Ну, если вы просто скопировано это, вы не стирали / не меняли position: fixed, о котором я упоминал
только что проверил и искал исправленное в css, единственное исправление - в моем сеансе нижнего колонтитула
вы удалили margin-left, который у вас был раньше?
Мне очень жаль, у меня были старые правила в css для содержимого индекса (idk, почему ...). можно ли выровнять подменю слева направо?
теоретически да, если вы добавите display: inline-block к этим элементам li. Но вам также придется добавить ширину исправлено к абсолютно позиционированным подменю ul, что не будет одинаковым для всех подменю и, следовательно, не будет работать должным образом.
так что нет возможности создать прочную рабочую встроенную версию, центрированную по родительскому компоненту?
вам нужно будет определить фиксированную ширину отдельно для каждого подменю ul, чтобы все его элементы li поместились в него - тогда вы можете расположить этот блок по своему усмотрению
это звучит не очень хорошо. есть ли возможность (с вашим решением) получить подменю над содержанием сайта?
Привет, я только что прочитал твой вопрос. Так что вам придется реализовать это с вашими собственными именами классов. Но вот как центрировать дочерние элементы внутри их соответствующих родителей.
.child-class{
width:max-content;
margin:0px auto;
}
Чтобы это работало, у вас должна быть ширина. Это автоматически выровняет ваш div или любой другой тег, который вы используете.
Я рекомендую этот метод, а не относительное положение, потому что что действительно удобно в использовании этого метода, так это то, что он будет выравнивать ваш контент по центру равномерно, даже если разные теги li имеют разную ширину. Что удобно для мобильной оптимизации. :)
Спасибо за этот комментарий, но кажется, что левое правило подменю не работает, оно прилипает либо к левому, либо к правому краю сайта. если я удалю левое правило, оно снова будет центрировано по всему сайту: /