Я нашел там решение: https://amp -demos.glitch.me / sticky-header.html Он отличается от того, что мне нужно, он выбирает пункт меню в зависимости от части статьи, которая в данный момент читается с использованиеманимация и аддоны наблюдателей.Однако я нашел это легко изменить.В моем примере меню движется как надо, и есть пункты подменю.Анимации удалены, ставить их легко, просто сравните две версии.
CSS:
:root {
--header-height: 3em;
}
.sticky-header {
position: sticky;
position: -webkit-sticky;
top: 0;
left: 0;
right: 0;
height: var(--header-height);
z-index: 1000;
}
.sticky-header .item {
position: relative;
}
.sticky-header .item > * {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
line-height: var(--header-height);
}
.sticky-header .item .selected {
opacity: 0;
}
/* move anchor sections below the sticky header */
:target {
display: block;
position: relative;
top: calc(-1 * var(--header-height) - 8px);
visibility: hidden;
}
/* general styling */
h1 {
text-align: center;
}
h1, main {
margin: 1rem;
}
a, a:visited {
color: inherit;
text-decoration: inherit;
background-color: inherit;
}
.sticky-header {
display: flex;
align-items: center;
justify-content: space-around;
background-color: inherit;
}
.sticky-header .item {
height: 100%;
width: 100%;
}
.sticky-header .item > * {
text-align: center;
color: inherit;
}
.sticky-header .item .selected {
color: red;
}
.submenu {
display:none;
}
.item:hover .submenu {
display: block;
position: relative;
top: var(--header-height);
line-height: 2em; //calc(1em + 12px);
background: black;
}
.item:hover .submenu a {
display: block;
}
HTML-часть, упрощенная:
<div class="sticky-header">
<div class="item" tabindex="0" role="button">
<a href="#item1">Item 1</a>
<div class="submenu">
<div tabindex="0" role="button"><a href="#s1">Sub menu</a></div>
<div><a href="#s2">Sub menu</a></div>
<div><a href="#s3">Sub menu</a></div>
</div>
</div>
<div class="item" tabindex="0" role="button">
<a href="#item2">Item 2</a>
</div>
<div class="item" tabindex="0" role="button">
<a href="#item3">Item 3</a>
</div>
@ Райан предоставил свой собственный метод в комментариях, но мне было трудно проверить сайт на наличие необходимого кода, а затем просто небольшой простой пример.