Я создаю сайт Wordpress, на котором некоторые разделы разметки недоступны для непосредственного редактирования, потому что тема, которую я адаптирую, создается для их динамического создания с помощью JavaScript, что мне не известно.
С этим ограничением я пытаюсь применить простую анимацию, которая перемещает текст элемента подменю, наведя курсор на него.
Обычно я просто оборачиваю текст каждого подменю в промежуток и анимирую этот промежуток при наведении, но теперь мне нужно найти способ сделать это, не касаясь разметки HTML.
Вот соответствующий CSS для меню:
.primary-menu,
.primary-menu ul {
margin: 0;
padding: 0;
list-style: none
}
.primary-menu {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
margin-left: calc(var(--menuItemsSpacing) / -2);
margin-right: calc(var(--menuItemsSpacing) / -2)
}
.primary-menu a {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
text-align: initial
}
.primary-menu>li {
font-size: 18px;
font-family: 'Open Sans', sans-serif;
font-weight: 400;
position:relative;
margin-bottom: 20px;
}
.primary-menu>li a {
padding: 10px 25px 10px 25px;
-webkit-transform: perspective(1px) translateZ(0);
transform: perspective(1px) translateZ(0);
box-shadow: 0 0 1px rgba(0, 0, 0, 0);
-webkit-transition-duration: 0.3s;
transition-duration: 0.3s;
-webkit-transition-property: color, background-color;
transition-property: color, background-color;
}
.primary-menu>li:hover a,
.primary-menu>li:focus a,
.primary-menu>li:active a {
background-color: #000;
color: #FFF;
}
.primary-menu .sub-menu {
position: absolute;
left: calc(var(--menuItemsSpacing) / -4);
top: 100%;
margin-top: var(--dropdownTopOffset);
min-width: 100%;
display:block;
margin-left:6px;
border-radius: 2px;
width: var(--dropdownMenuWidth);
background: var(--dropDownBackground);
-webkit-box-shadow: 0px 10px 20px 0px rgba(41, 51, 61, 0.1);
box-shadow: 0px 10px 20px 0px rgba(41, 51, 61, 0.1)
}
.primary-menu .sub-menu li {
font-size: 16px;
font-weight: 400;
text-transform: initial;
line-height: 1.6;
}
.primary-menu .sub-menu li a {
padding: 13px 25px;
}
.primary-menu .sub-menu li a:hover {
color: var(--menuHoverColor);
}
.primary-menu .sub-menu:before {
position: absolute;
content: '';
width: 100%;
height: var(--dropdownTopOffset);
top: calc(var(--dropdownTopOffset) * -1);
left: 0
}
А вот кропотливо упрощенная версия сгенерированной разметки HTML:
<nav class="main-navigation">
<ul id="primary-menu" class="primary-menu menu">
<li class="menu-item"><a href="http://localhost/wordpress">Home</a></li>
<li class="menu-item"><a href="http://localhost/wordpress/about">About</a>
<ul class="sub-menu">
<li class="menu-item"><a href="http://localhost/wordpress/about/history/">History</a></li>
<li class="menu-item"><a href="http://localhost/wordpress/about/people">People</a></li>
</ul>
</li>
<li class="menu-item"><a href="http://localhost/wordpress/services/">Services</a></li>
<li class="menu-item"><a href="http://localhost/wordpress/what-we-do">What We Do</a></li>
<li class="menu-item"><a href="http://localhost/wordpress/the-library/">The Library</a>
<ul class="sub-menu">
<li class="menu-item"><a href="http://localhost/wordpress/the-library/gallery/">Gallery</a></li>
<li id="menu-item" class="menu-item"><a href="http://localhost/wordpress/audio-and-video/">Audio and Video</a></li>
</ul>
</li>
<li class="menu-item"><a href="http://localhost/wordpress/donate/">Donate</a></li>
<li class="menu-item"><a href="http://localhost/wordpress/contact/">Contact</a></li>
</ul>
</nav>
Я боролся с этим какое-то время, но пока не могу понять, как этого можно добиться с помощью текущей разметки, поэтому я очень признателен за помощь.