На страницах коллекций нашего сайта Shopify кнопки СМОТРЕТЬ ДЕТАЛИ на каждой карточке продукта смещены из-за разной длины названия продукта. Чтобы выровнять их, мы решили установить минимальную высоту названий продуктов всех карточек продуктов подряд на самую высокую из трех в одной строке, используя чистый JavaScript. Ниже приведена полная логика для достижения этого.
Логика:
Идеально - делать это построчно окно.innerWidth 768px и выше — 3 столбца еще 2 столбца
Приведенный ниже код — это только первая часть решения. Вывод, который я получаю в консоли, это Max Height: NaN вместо фактической высоты, потому что на странице коллекции, указанной ниже, есть 15 продуктов с их названиями.
Код JavaScript:
// Find All selectors of ".card__info"
let allCardInfo = document.querySelectorAll(".card__info");
// Set number of cards per row, to check based on window.innerWidth
var numCardsPerRow = ((window.innerWidth >= 768) ? 3 : 2);
var maxHeight = 0; // Set max height = 0;
// Foreach card__info selector, execute the following:
allCardInfo.forEach(element => {
let cardTitle = element.querySelector(".card__title"); // Get the card__title
let cardTitleHeight = cardTitle.height; // Get the height.
// Set max height = max (max_height, new height)
maxHeight = Math.max(maxHeight, cardTitleHeight);
console.info('Max Height: ' + maxHeight);
});
Большое спасибо, это помогло. пусть cardTitleHeight = cardTitle.height(); говорит, что высота не является функцией? здесь есть поправка?
let cardTitleHeight = cardTitle.height;
Попробуйте let cardTitleHeight = cardTitle.clientHeight;
@Джеймс, не могли бы вы сказать мне, какую функцию использовать для установки минимальной высоты того же элемента cardTitle?
.height
не является свойством html-элементов в JS, поэтому вы можете использовать
getComputedStyle(element)[0].height
вместо этого,
getComputedStyle
— хороший метод объекта окна, который помогает вам получить ВСЕ стили элемента (независимо от того, являются ли они встроенными, внутренними или внешними)
Я также проверил, что @James сказал в комментариях о
let cardTitleHeight = cardTitle.clientHeight;
тоже работает...
Вы также можете использовать element.getClientRects
, чтобы получить высоту вашего элемента
Махдия, не могли бы вы сказать мне, какую функцию использовать для установки минимальной высоты того же элемента cardTitle?
Тебе не нужна функция, element.style.minHeight = "100px"
должен быть document.querySelector