@julith

Как при наведении мыши раскрыть блок с подробной информацией?

При наведении элемент массива должен раскрыться, показав элементы, помеченные классом "hide", не могу реализовать. Пробовала через стили :hover, и через отдельные функции, не работает.

<body>
    <ul class="products"></ul>
    <script src="scripts.js"></script>
</body>

body{
    font-family: 'Courier New', Courier, monospace;
    margin: 20px;
}
.item{
    border: 3px solid rgb(42, 69, 165);
    color: rgb(18, 36, 100);
    background-color: rgb(175, 183, 214);
    border-radius: 20px;
    width: calc(100% - 40%);
    margin: 20px;
    padding: 0 15px 0 15px;
    text-align: center;
}

.hide{
    visibility: hidden; 
    width: 0px;
    height: 0px;
}
.hide:hover{//1 способ не работает
    visibility: visible; 
    width: max-content;
    height: max-content;
}
div{
    margin: 10px;
}

p{
    margin: 0px;
    padding: 0px;
    text-align: left;
}

ul {
    list-style-type: none;
}

async function getResponse() {
    let response = await fetch('https://dummyjson.com/products') 
    let jsonList = await response.json()
    let list = document.querySelector('.products')
    let key
    let elements = jsonList.products
    elements = elements.splice(0, 3)
    for (key in elements) {
    
        //console.log(elements[key])
        list.innerHTML += 
        `<li class="item">
            <div>
                <h5>${elements[key].title}</h5>
               <img class="hide" src="${elements[key].images[key]}" alt="${elements[key].description}" width="200"></img>
                <p class="hide">brand: ${elements[key].brand}</p>
                <p class="hide">category: ${elements[key].category}</p>
                <p class="hide">${elements[key].description}</p>
                <p class="hide">discount percentage: ${elements[key].discountPercentage} %</p>
                <p class="hide">price: ${elements[key].price} usd</p>
                <p class="hide">rating: ${elements[key].rating}</p>
                <p class="hide">stock: ${elements[key].stock}</p>
            </div>
        </li>`
    }
}
window.onload = function () { // 2й способ не работает
    let list = document.getElementsByClassName('item')
    let hide = document.getElementsByClassName('hide')

    list.onmouseover = function() {mouseOver()};
    list.onmouseout = function() {mouseOut()};
    
    function mouseOver() {
        hide.style.visibility = 'visible'
        hide.width = 'max-content'
        hide.height = 'max-content'
    }
    function mouseOut() {
        hide.style.visibility = 'hidden'
        hide.width = '0'
        hide.height = '0'
    }
}

getResponse()
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
@WhiteDazzle
.hide:hover{//1 способ не работает
    visibility: visible; 
    width: max-content;
    height: max-content;
}


Проблема в том, что псевдокласс установлен на элемент с нулевыми размерами. Лечится добавлением hover на родительский класс item:
.item:hover .hide{
    visibility: visible;
    width: max-content;
    height: max-content;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы