Как сделать фиксирующие подчеркивание?
Всем привет! Такая проблема, что не могу зафиксировать нижнее подчеркивание. На css сделал нижнее подчеркивание с помощью before. Все работает. Но мне нужно, чтоб при клике на этот элемент списка, подчеркивание фиксировалось.
.m-cat ul{
padding: 0;
}
.m-cat li{
padding: 10px 0;
position: relative;
cursor: pointer;
}
.m-cat li::before{
content: "";
height: 1.5px;
background: #999;
width: 0;
position: absolute;
bottom: 0;
left:0;
transition: .2s ease;
}
.m-cat li:hover::before{
width: 100%;
}
<aside class="m-cat">
<nav>
<ul id="m-cat-ul">
<li data-url="/">Все товары</li>
<li>Электроника</li>
<li>Дом</li>
<li>Автотовары</li>
<li>Спорт и развлечения</li>
</ul>
</nav>
</aside>
Я попробовал добавить класс с помощью js, к элементу списка, но выглядит не очень. Как уже при клике удалить прежние свойства? Код:
let list = document.getElementById('m-cat-ul');
list.addEventListener('click',(event)=>{
let item = event.target;
item.classList.add('m-cat-li__active');
})
.m-cat ul{
padding: 0;
}
.m-cat li{
padding: 10px 0;
position: relative;
cursor: pointer;
}
.m-cat li::before{
content: "";
height: 1.5px;
background: #999;
width: 0;
position: absolute;
bottom: 0;
left:0;
transition: .2s ease;
}
.m-cat li:hover::before{
width: 100%;
}
.m-cat-li__active{
border-bottom: 1.5px solid #999;
}
<aside class="m-cat">
<nav>
<ul id="m-cat-ul">
<li data-url="/">Все товары</li>
<li>Электроника</li>
<li>Дом</li>
<li>Автотовары</li>
<li>Спорт и развлечения</li>
</ul>
</nav>
</aside>
Ответы (1 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
document.getElementById('m-cat-ul').addEventListener('click', function(e) {
if( !e.target.matches('li') ) return;
let active = this.querySelector('.m-cat-li__active');
// this ссылается на объект, в контексте которого вызвана функция.
// здесь, это 'm-cat-ul'
if( active ) active.classList.remove('m-cat-li__active');
e.target.classList.add('m-cat-li__active');
});
.m-cat ul {
padding: 0;
}
.m-cat li {
padding: 10px 0;
position: relative;
cursor: pointer;
}
.m-cat li::before {
content: "";
height: 1.5px;
background: #999;
width: 0;
position: absolute;
bottom: 0;
left: 0;
transition: .2s ease;
}
.m-cat li:not(.m-cat-li__active):hover::before {
width: 100%;
}
.m-cat-li__active {
border-bottom: 1.5px solid #999;
}
<aside class="m-cat">
<nav>
<ul id="m-cat-ul">
<li data-url="/">Все товары</li>
<li>Электроника</li>
<li>Дом</li>
<li>Автотовары</li>
<li>Спорт и развлечения</li>
</ul>
</nav>
</aside>
P.s. а у стрелочных функций нет своего this) Поэтому не стоит везде их использовать. Они задуманы именно для коротеньких функций из одной-двух строчек.