Как стилизовать элемент на основе изменений другого элемента без JavaScript?

Мне нужно создать элемент управления вводом на основе класса поля выбора. Если поле выбора имеет класс «ошибка», мне нужна красная рамка на элементе управления вводом. Как я могу сделать это с помощью SASS? Общего обтекания нет, единственное, что обтекание элемента управления вводом (.select-input-wrap) примыкает к полю выбора. Вот структура DOM.

<select class = "form-select error"></select>
<div class = "select-input-wrap">
  <input class = "select-input" name = "select-input" />
</div>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
86
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

В чистом CSS (как и в SASS) вы можете ориентироваться на одноуровневые элементы с помощью оператора +. Например:

.form-select.error + .select-input-wrap input {
    border: 3px solid red;
}

Связанная песочница: http://www.cssdesk.com/r8Dh8

О да, не надо родителей!

Frish 09.07.2019 07:28

Если ваши элементы select и div имеют общего родителя, вы можете стилизовать на основе этого:

.parent .error + .select-input-wrap input {
  border: 1px solid red;
}
<div class = "parent">
  <select id = "some-sel" class = "form-select error">  </select>
  <div class = "select-input-wrap">
    <input class = "select-input" name = "select-input" />
  </div>
  
    <select id = "another-sel" class = "form-select">  </select>
  <div class = "select-input-wrap">
    <input class = "select-input" name = "select-input" />
  </div>
</div>

Для версии SASS просто уберите лишние знаки препинания!

Ответ принят как подходящий

Вам нужно стилизовать родственный элемент, попробуйте приведенный ниже код в файле SASS.

$red: #f00;

.error {

  &.form-select {

    + .select-input-wrap {

      > .select-input {
        border: 1px solid $red;
      }
    }
  }
}

Это css-решение. Надеюсь, вы сможете преобразовать структуру в sass.

.error~.select-input-wrap input{
  border: solid 1px red;
}
<select class = "form-select error"></select>
<div class = "select-input-wrap">
  <input class = "select-input" name = "select-input" />
</div>

Другие вопросы по теме