Как правильно обращаться к элементам при добавление класса?

Ссылка скопирована
9 апреля 2026 1 ответ

Нужно сделать вот такое появление блока с фильтрами

Как правильно обращаться к элементам при добавление класса?

Как правильно обращаться к элементам при добавление класса?

Проблема заключается в следующем: как в css прописать, если у блока catalog-filter есть класс active то делать следующие задать кнопке catalog__btn display:none, а кнопке catalog__btn-close display: block, также блоку catalog__wrapper margin-bottom: 50px., прикрепил код html и css:

<div class="catalog__info">     <div class="catalog__wrapper">         <h2 class="catalog__title custom-title">Каталог</h2>         <button class="catalog__btn custom-btn">Фильтр</button>         <button class="catalog__btn-close" id="catalogBtnClose">             <img src="./../../img/icons/close.svg" alt="Close">         </button>     </div>     <div class="catalog-filter">         <ul class="catalog-filter__column catalog-filter__face">             <h4 class="catalog-filter__title">Уход для лица</h4>             <li class="catalog-filter__item">                 <label>                     <input type="radio">                     <span>Крема</span>                 </label>             </li>             <li class="catalog-filter__item">                 <label>                     <input type="radio">                     <span>Сыворотки</span>                 </label>             </li>         </ul>     </div> </div>

<div class="catalog__info"> <div class="catalog__wrapper"> <h2 class="catalog__title custom-title">Каталог</h2> <button class="catalog__btn custom-btn">Фильтр</button> <button class="catalog__btn-close" id="catalogBtnClose"> <img src="./../../img/icons/close.svg" alt="Close"> </button> </div> <div class="catalog-filter"> <ul class="catalog-filter__column catalog-filter__face"> <h4 class="catalog-filter__title">Уход для лица</h4> <li class="catalog-filter__item"> <label> <input type="radio"> <span>Крема</span> </label> </li> <li class="catalog-filter__item"> <label> <input type="radio"> <span>Сыворотки</span> </label> </li> </ul> </div> </div>

.catalog-filter {   display: flex;   justify-content: center;   align-items: flex-start;   gap: 80px;   transform: scale(0);   height: 0;   overflow: hidden;   transition: transform 0.5s ease-in; }  .catalog-filter.active {   min-height: 316px;   transform: scale(1);   overflow: unset; }  .catalog-filter.active + .catalog__wrapper .catalog__btn {   display: none; }  .catalog-filter.active + .catalog__wrapper .catalog__btn-close {   display: block; }  .catalog-filter.active + .catalog__wrapper {   margin-bottom: 50px; }

.catalog-filter { display: flex; justify-content: center; align-items: flex-start; gap: 80px; transform: scale(0); height: 0; overflow: hidden; transition: transform 0.5s ease-in; } .catalog-filter.active { min-height: 316px; transform: scale(1); overflow: unset; } .catalog-filter.active + .catalog__wrapper .catalog__btn { display: none; } .catalog-filter.active + .catalog__wrapper .catalog__btn-close { display: block; } .catalog-filter.active + .catalog__wrapper { margin-bottom: 50px; }

Дополнительно:

если у блока catalog-filter есть класс active то делать следующие

Какие следующие? Что делать?

  • Алексей Уколов, Отредактировал :)
  • либо :has(), либо переделывать структуру/логику, т.к. CSS не умеет смотреть назад
  • Дмитрий Ярощук, можно так:
    .catalog__info:has(.catalog-filter.active) > .catalog__wrapper {     margin-bottom: 50px; }  .catalog__info:has(.catalog-filter.active) > .catalog__wrapper > .catalog__btn {     display: none; }  .catalog__info:has(.catalog-filter.active) > .catalog__wrapper > .catalog__btn-close {     display: block; }

    .catalog__info:has(.catalog-filter.active) > .catalog__wrapper { margin-bottom: 50px; } .catalog__info:has(.catalog-filter.active) > .catalog__wrapper > .catalog__btn { display: none; } .catalog__info:has(.catalog-filter.active) > .catalog__wrapper > .catalog__btn-close { display: block; }

  • 1. Совсем банальный: вешайте класс на родительский блок.

    2. Через :has

    .catalog__info:has(.catalog-filter.active)  .catalog__wrapper {     margin-bottom: 50px; }  .catalog__info:has(.catalog-filter.active)  .catalog__btn {     display: none; }

    .catalog__info:has(.catalog-filter.active) .catalog__wrapper { margin-bottom: 50px; } .catalog__info:has(.catalog-filter.active) .catalog__btn { display: none; }

    3. Самый интересный: с помощью кастомных свойств.

    .catalog-filter {   --open-btn-display: block;   --margin: 0; }  .catalog-filter.active {   --open-btn-display: none;   --margin: 50px; }  .catalog__wrapper {   margin-bottom: var(--margin); }  .catalog__btn {   display: var(--open-btn-display); }

    .catalog-filter { --open-btn-display: block; --margin: 0; } .catalog-filter.active { --open-btn-display: none; --margin: 50px; } .catalog__wrapper { margin-bottom: var(--margin); } .catalog__btn { display: var(--open-btn-display); }

    p.s. Зачем вам две кнопки, если они в одном месте в разметке, я не придумала. Меняете текст и стили и всё. Тогда уж логичнее закрывающую засунуть внутрь всего открываемого блока, тогда и не нужно с ней отдельных манипуляций.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Стас DB Ответ

    Для обращения к элементам и добавления класса в JavaScript можно использовать методы из стандартного API DOM (Document Object Model). Вот несколько способов, как это можно сделать:

    1. Через метод `querySelector`:

    ```html

    Пример элемента

    ```

    ```javascript
    let element = document.querySelector('#myElement');
    element.classList.add('myClass');
    ```

    2. Через метод `getElementById`:

    ```html

    Пример элемента

    ```

    ```javascript
    let element = document.getElementById('myElement');
    element.classList.add('myClass');
    ```

    3. Через метод `getElementsByClassName`:

    ```html

    Пример элемента
    Еще один элемент

    ```

    ```javascript
    let elements = document.getElementsByClassName('myElements');
    for (let i = 0; i < elements.length; i++) {
    elements[i].classList.add('myClass');
    }
    ```

    4. Через метод `getElementsByTagName`:

    ```html

    Пример элемента
    Еще один элемент

    ```

    ```javascript
    let elements = document.getElementsByTagName('div');
    for (let i = 0; i < elements.length; i++) {
    elements[i].classList.add('myClass');
    }
    ```

    5. Через метод `querySelectorAll`:

    ```html

    Пример элемента
    Еще один элемент

    ```

    ```javascript
    let elements = document.querySelectorAll('.myElements');
    elements.forEach(element => {
    element.classList.add('myClass');
    });
    ```

    Эти методы помогут вам обращаться к элементам на странице и добавлять классы к ним в зависимости от вашего конкретного случая использования. Надеюсь, это поможет вам решить вашу проблему!

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно