.apSquare {
min-width: max-content;
height: max-content;
border-radius: 4px;
width: 3rem;
float: left;
cursor: pointer;
position: relative;
}
.apNo {
position: absolute;
display: inline-block;
max-width: max-content;
top: 5px;
right: 5px;
}
p
.small
используют не для того, чтобы нарисовать текст меньшего размера, а чтобы указать что он содержит заявления об отказе от ответственности, оговорки, юридические ограничения или авторские права. small также иногда используется для указания авторства или соответствия лицензионным требованиям.
var cards = document.querySelectorAll('.sold') // нашли все элементы с классом sold
cards.forEach(addCardClickHandler) // для каждого элемента вызываем функцию addCardClickHandler
function addCardClickHandler (card) { // которая принимает на вход элемент card (см. документацию для forEach)
card.addEventListener('click', cardClickHandler) // и добавляет элементу обработчик клика функцию clickHandler
}
function cardClickHandler(evt) { // функция обработчика клика принимает на вход объект события.
var cardID = evt.target.getAttribute('id') //evt.target - элемент, на котором произошёл клик. Получили его id.
// код, который у вас в функции showAppInfo
}
1) Зачем два разных класса? apSquare и sold? (Возможно, этот вопрос возникает в связи с тем, что код в демке вырван из общего контекста)
2) Почему классы в разном стиле - kebab-case и cammelCase
4) Некоторые стили ещё и заинлайнены в style атрибут. (Допускаю что тут была какая то анимация, но это можно сделать не инлайня стили в элементы, а с помощью переключения классов и css transition)
opacity: 0.25;
и pointer-events: none;