У меня есть меню с изображением png в качестве псевдоэлемента ::before
, и вместо того, чтобы прилипать к пунктам меню, оно идет сверху.
const menu_button = $('img');
const menu_nav = $('#myNav');
menu_button.click(function(){
menu_nav.toggleClass('menu_open')
});
.overlay {
height: 0%;
width: 100%;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: #d6cece;
overflow-y: auto;
transition: 0.5s;
}
.overlay-content {
position: relative;
top: 10%;
width: 100%;
margin-top: 50px;
}
.overlay a {
padding-left: 30px;
padding-bottom: 5px;
padding-top: 5px;
text-decoration: none;
font-size: 27px;
display: block;
transition: 0.3s;
font-style: italic;
color: black;
}
.overlay-content a:before {
width: 6px;
content: " ";
background-image: url(https://picsum.photos/5);
background-repeat: no-repeat;
position: absolute;
left: 18px;
top: 18px;
height: 20px;
}
.menu_open {
height: 100%;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<img src = "https://picsum.photos/100">
<div id = "myNav" class = "overlay">
<div class = "overlay-content">
<a href = "#">Test</a>
<a href = "#">Test</a>
<a href = "#">Test</a>
<a href = "#">Test</a>
</div>
</div>
Почему такое поведение? Он работает без меню, но не когда элементы выровнены по вертикали. Пожалуйста, проверьте фрагмент, который я быстро сделал.
наверное должно быть что-то вроде этого
.overlay-content > a:before {
content: "";
display: block;
background: url("https://picsum.photos/5") no-repeat;
width: 20px;
height: 20px;
float: left;
margin: 0 6px 0 0;
}
а затем измените это на
.overlay-content a:before {
width: 6px;
content: " ";
background-image: url(https://picsum.photos/5);
background-repeat: no-repeat;
position: absolute;
left: 18px;
top: 18px;
height: 20px;
}
Я только что предположил, что вы пытаетесь применить значения только к тегам a внутри родителей с классом .overlay. Я посмотрю повнимательнее и обновлю свой ответ.
это сработало для вас? если да, подтвердите ответ
Не совсем, извините.
элементы идут «сверху», потому что вы устанавливаете top
на 18px
для всех элементов.
это не было бы проблемой, если бы контекст позиционирования для абсолютного позиционирования был установлен правильно (элемент a вместо overlay-content
div).
вы должны установить контекст позиционирования для самого элемента:
.overlay a {
position: relative;
}
Я не понимаю, это вообще не изменило поведение ::before, просто меню выглядело совершенно по-другому, не хотите уточнить?