span {
background: linear-gradient(to right, #ccc 0%, #ccc 50%, #fff 50%, #fff);
background-size: 200% 100%;
background-position: 100% 0;
transition: background-position .5s cubic-bezier(.56,.08,.42,.7);
}
span:hover {
background-position: 0 0;
}
body {
width: 450px;
margin: 0;
padding: 10px;
font-family: Arial, sans-serif;
font-size: 14px;
}
.logo,
.contacts,
.about-us,
.main-menu,
.footer {
padding: 10px 20px 10px 20px;
background-color: #f5f5f5;
border: 2px solid #cccccc;
}
/* Собственные стили блоков */
.header {
min-height: 40px;
margin-bottom: 20px;
}
.logo {
float: left;
width: 230px;
text-align: center;
background-color: #333333;
color: #ffffff;
font-weight: bold;
}
.contacts {
float: right;
width: 110px;
text-align: center;
background-color: #333333;
color: #ffffff;
font-style: italic;
}
.about-us {
width: 230px;
margin-bottom: 20px;
font-size: 10px;
float: left;
}
.about-us h1 {
font-size: 20px;
}
.about-us p {
font-size: 12px;
}
.main-menu {
float: right;
width: 110px;
}
.footer {
clear: both;
background-color: #333333;
color: #ffffff;
}
const cardSelector = '.post';
const buttonSelector = '.post > img';
const menuSelector = '.post-info';
const activeClass = 'active';
document.addEventListener('click', ({ target: t }) => {
if (!t.closest(menuSelector)) {
document.querySelectorAll(menuSelector).forEach(n => n.classList.remove(activeClass));
}
if (t.matches(buttonSelector)) {
t.closest(cardSelector).querySelector(menuSelector).classList.add(activeClass);
}
});
.test ul {
color: red;
}
.test ul ul {
color: black;
}
это решение требует, постоянно сбрасывать стили по умолчанию
.test ul ul
, пусть будетul {
color: initial;
}