Когда я должен определить селекторы классов CSS внутри других определений селекторов классов?

#css

Вопрос:

РЕДАКТИРОВАТЬ 1 Основываясь на предложениях, я попробовал это:

 .lower-container {
    justify-content: center;
    position: absolute;
    width: 92vw;
//    height: 46vh; <--- no height defined

/* nested for adding classes to change position and height of lower-container */
    .lower-container.lower-full {
      height: 92vh;
      top: 0;
    }

    .lower-container.lower-mid {
      height: 46vh;
      top: 46vh;
    }

    .lower-container.lower-closed {
      height: 1vh;
      top: 91vh;
    }
}

 

На панели «Элементы» я вижу:
введите описание изображения здесь

Но на панели Стилей у меня есть: введите описание изображения здесь

Поэтому, хотя я применяю дополнительный класс, высота не устанавливается, и дополнительный класс не отображается в стилях.


Оригинальный вопрос Я определяю некоторые классы внутри других, подобных этому:

 .lower-container {
    height: 46vh;
    display: flex;
    justify-content: center;
    ...

    .lower-full {
        height: 92vh;
    }
}
 

Затем, когда придет время менять высоту, я сделаю:

     lowerContainerElement.classList.add('lower-full')
 

Но на консоли этот элемент не имеет .нижний-полный стиль на панели»Стили»,
хотя на панели «Элементы» отображается class= «{другие классы} нижний-полный».

Что я делаю не так?

Комментарии:

1. CSS сам по себе не имеет вложенных определений. Вероятно, вы смотрите на какой-то файл SASS или МЕНЬШЕ, который будет предварительно обработан перед развертыванием, поскольку они были созданы для преодоления этого (и других) недостатков CSS

2. @blurfus извините, я использую файлы SASS / .scss да. Но все равно я не могу изменить высоту или увидеть новый класс на панели стилей, только на панели Элементов в консоли браузера.

Ответ №1:

Вы не можете определить селектор CSS внутри другого только с помощью ванильного CSS, вам понадобится такой препроцессор, как SASS.

С помощью CSS вы можете указать свойства, когда элемент имеет только .нижний контейнер или когда в нем есть и то, и другое. Это будет эквивалентом того, что вы пытались выполнить в своем исходном коде.

 .lower-container {
   height: 46vh;
   display: flex;
   justify-content: center;
   ...
}

.lower-container.lower-full {
    height: 92vh;
}
 

Если вы уже используете файлы SCSS, то вы используете неправильный синтаксис

 .lower-container {
    height: 46vh;
    display: flex;
    justify-content: center;
    ...

    amp;.lower-full {
        height: 92vh;
   }
}
 

Редактирование на основе новейшего редактирования: Код должен выглядеть следующим образом:

 .lower-container {
    justify-content: center;
    position: absolute;
    width: 92vw;
//    height: 46vh; <--- no height defined

/* nested for adding classes to change position and height of lower-container */
    amp;.lower-full {
      height: 92vh;
      top: 0;
    }

    amp;.lower-mid {
      height: 46vh;
      top: 46vh;
    }

    amp;.lower-closed {
      height: 1vh;
      top: 91vh;
    }
}
 

Комментарии:

1. Да, извините, я использую файлы scss и SASS. Я не заставляю новый класс появляться на панели стилей в консоли браузера.

2. Я добавил решение SCSS в свой ответ, вы используете неправильный синтаксис для селекторов вложенности

3. Да, именно так это и будет работать.

4. Вы все еще делаете это неправильно, посмотрите на разницу между моим селектором и вашим. Вы делаете «.нижний контейнер.нижний-полный», когда я делаю «amp;.нижний-полный». Вы можете либо сделать «.нижний контейнер.нижний заполненный» как собственный «внешний» селектор, либо вы можете сделать «amp;.нижний заполненный» как «вложенный» селектор.

5. Я отредактировал свой ответ с помощью вашего новейшего кода.