Есть ли какой-либо селектор css для следующего сценария

Мне нужно применить стили только для первого линиякласс в этой структуре, есть ли решение:

.headercontainer .line > *:first-child {
  border: 3px solid yellow;
}
<div class = "headercontainer">
  <div class = "header">step1</div>
  <div class = "line"></div>
  <div class = "header">step2</div>
  <div class = "line"></div>
</div>

Если я здесь что-то пропустил, предложите, пожалуйста.

Типичная ошибка селекторов :first-child / :first-of-type, потому что он ищет только положение элементов, но не класс.

VXp 18.04.2018 09:16

Кроме того, если вам нужно применить стили к самому элементу .line, не пишите .line > something.

Mr Lister 18.04.2018 09:18
Улучшение производительности загрузки с помощью 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
3
78
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

.headercontainer .line {
  border: 3px solid yellow;
}

.headercontainer .line ~ .line {
  border: none;
}
<div class = "headercontainer">
  <div class = "header">step1</div>
  <div class = "line"></div>

  <div class = "header">step2</div>
  <div class = "line"></div>
</div>

Надеюсь это поможет!


С другой стороны, каково назначение элементов .line? Если их единственная цель - служить линией, то ответ будет: не надо. Выбросьте их и вместо этого поставьте нижнюю границу на первом .header. Это упростило бы как HTML, так и CSS.

.headercontainer .header:first-child {
  border-bottom: 6px solid yellow;
}
<div class = "headercontainer">
  <div class = "header">step1</div>

  <div class = "header">step2</div>
</div>

Я думаю, что ваш второй фрагмент - это ответ настоящий

vals 18.04.2018 10:49

@val Да, но к тому времени, как я подумал об этом, мой исходный ответ уже был одобрен, так что я не хотел его выбрасывать!

Mr Lister 18.04.2018 12:38

Css не имеет селектора first-of-class для выбора первого класса данного элемента DOM. В вашем случае, когда классные порядки останутся. Тогда вы можете подать заявку

.headercontainer .header:first-child + .line {
   color:red;
}

.headercontainer .header:first-child + .line {
   color: red;
}

/* or:
.headercontainer .header:first-of-type + .line {
   color: red;
}
*/
<div class = "headercontainer">
  <div class = "header">step1</div>
  <div class = "line">red</div>

  <div class = "header">step2</div>
  <div class = "line">black</div>
</div>

Нет. Однако, если вы этого не сделаете, вы можете использовать другой HTML-элемент для элемента 'line'. вы можете использовать :first-of-type

.headercontainer p:first-of-type { 
       border:	3px solid yellow;
    }
 <div class = "headercontainer">
        <div class = "header">step1</div>
        <p class = "line">here</p>
        <div class = "header">step2</div>
        <p class = "line">there</p>
    </div>

 

    

Демо

first-of-type имеет хорошую поддержку браузерами. К сожалению, в CSS нет селектора :first-of-class.

Другой способ сделать это - использовать orderимущество, в котором используется Флексбокс / Сетка:

.headercontainer {
  display: flex; /* displays flex-items (children) inline */
  flex-direction: column; /* stacks them vertically */
}

.headercontainer .line:first-child {
  border: 3px solid yellow;
}

/* or:
.headercontainer .line:first-of-type {
  border: 3px solid yellow;
}
*/

.order {
  order: -1; /* puts the flex-item back to its desired position or above other siblings, because the default value of the "order" property is "0" */
}
<div class = "headercontainer">
  <div class = "line">border</div> <!-- needs to be positioned above other siblings in the DOM -->
  <div class = "header order">step1</div>
  <div class = "header">step2</div>
  <div class = "line">no border</div>
</div>

В других ответах конкретно объясняется, как написать селектор, который вы просите, однако на самом деле это не лучшая практика.

Чтобы сделать CSS и HTML более удобными в обслуживании и упростить работу для вашего механизма выбора CSS, вам лучше добавить новый класс к элементу, который вы хотите стилизовать по-другому.

Это упрощает изменение CSS и делает HTML более очевидным.

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