Что означает «+» (знак плюс) CSS-селектор?

751

Например:

p + p {
  /* Some declarations */
}

Я не знаю, что +значит. В чем разница между этим и просто определением стиля pбез + p?

Gday
источник
На практике это в основном полезно для применения полей или отступов между элементами списка одного типа, поэтому для первого или последнего элемента не требуется особый случай.
Кристоф Русси

Ответы:

750

Смотрите смежные селекторы на W3.org.

В этом случае селектор означает, что стиль применяется только к абзацам, непосредственно следующим за другим абзацем.

Простой pселектор будет применять стиль к каждому абзацу на странице.


Это будет работать только на IE7 или выше. В IE6 стиль не будет применяться ни к каким элементам. >Кстати, это касается и комбинатора.

См. Также обзор Microsoft по совместимости CSS в Internet Explorer .

Торарин
источник
Я считаю полезным не сворачивать элемент, когда он скрыт. Поэтому более подходящий способ скрыть это - использовать visibility : hidden/visibleвместо display : none/block. Смотрите эту ссылку .
KFL
6
в чем будет разница между p + p и p> p
Мухаммед Ризван
7
@MuhammadRizwan p > pозначает вложенный p, pто есть любой, который находится непосредственно под другим p, например <p><p>This paragraph</p></p>.
банан
203

Это соседний селектор брата.

Из блога Splash of Style.

Чтобы определить смежный селектор CSS, используется знак плюс.

h1+p {color:blue;}

Приведенный выше код CSS отформатирует первый абзац после (не внутри) любых заголовков h1 как синий.

h1>pвыбирает любой pэлемент, который является прямым (первым поколением) дочерним (внутри) h1элемента.

  • h1>pспички <h1> <p></p> </h1>( <p>внутри <h1>)

h1+pвыберет первый pэлемент, который является родным (на том же уровне домена), как h1элемент.

  • h1+pсовпадения <h1></h1> <p><p/>( <p>рядом с / после <h1>)
Мэтью Вайнс
источник
3
Я запутался между plus signи greater sign. Если я использую h1>pвместо h1+p, это дает мне тот же результат? Не могли бы вы немного объяснить, насколько они отличаются?
Иварают
91
В ваших примерах h1>pвыбирается любой pэлемент, который является прямым (первое поколение) дочерним h1элементом элемента. h1+pвыберет первый pэлемент, который является родным (на том же уровне домена), как h1элемент. h1>pматчи <h1><p><p></h1>, h1+pматчи<h1></h1><p><p/>
Мэтью Вайнс
1
@MatthewVines вы должны добавить, что h1> p и h1 + p к вашему ответу
MonsterMMORPG
По сути, в вашем примере он будет соответствовать первому <p> после <h1>, но будет ли он совпадать с тем же <p>, если он предшествовал <h1>? Или это только после?
Винсент
54

В +означает знак выбор «смежные родственный»

Например, этот стиль будет применяться со второго <p>:

p + p {
   font-weight: bold;
} 
<div>
   <p>Paragraph 1</p>
   <p>Paragraph 2</p>
</div>


пример

Посмотрите этот JSFiddle, и вы поймете это: http://jsfiddle.net/7c05m7tv/ (Другой JSFiddle: http://jsfiddle.net/7c05m7tv/70/ )


Поддержка браузера

Селекторы смежных братьев и сестер поддерживаются во всех современных браузерах.


Учить больше

Кас Блум
источник
42

«+» - это соседний селектор брата. Он выберет любой p ПРЯМО ПОСЛЕ ap (не дочерний или родительский, хотя, брат или сестра).

Гордон Густафсон
источник
23

+селектор называется Adjacent Sibling Selector.

Например, селектор p + pвыбирает pэлементы сразу после pэлементов

Его можно рассматривать как looking outsideселектор, который проверяет непосредственно следующий элемент.

Вот образец фрагмента, чтобы прояснить ситуацию:

body {
  font-family: Tahoma;
  font-size: 12px;
}
p + p {
  margin-left: 10px;
}
<div>
  <p>Header paragraph</p>
  <p>This is a paragraph</p>
  <p>This is another paragraph</p>
  <p>This is yet another paragraph</p>
  <hr>
  <p>Footer paragraph</p>
</div>

Поскольку мы являемся одной и той же темой, стоит упомянуть еще один селектор, ~селектор, которыйGeneral Sibling Selector

Например, p ~ pвыбирает все, pчто следует p, независимо от того, где он находится, но оба pдолжны иметь одного и того же родителя.

Вот как это выглядит с той же разметкой:

body {
  font-family: Tahoma;
  font-size: 12px;
}
p ~ p {
  margin-left: 10px;
}
<div>
  <p>Header paragraph</p>
  <p>This is a paragraph</p>
  <p>This is another paragraph</p>
  <p>This is yet another paragraph</p>
  <hr>
  <p>Footer paragraph</p>
</div>

Обратите внимание, что последний pтакже соответствует в этом примере.

Лихо Джозеф
источник
8

+представляет один из относительных селекторов. Список всех относительных селекторов:

div p- Все <p>элементы внутри <div>элементов выбраны.

div > p- Все <p>элементы, чей прямой родитель <div>выбран. Это работает и в обратном направлении ( p < div)

div + p- Все <p>элементы размещаются сразу после <div>выбора элемента.

div ~ p- Все <p>элементы, которым предшествует <div>элемент, выделены.

Подробнее о селекторах смотрите здесь .

Неша Зорич
источник
Последний селектор ошибочен. Согласно MDN : общий братский комбинатор (~) разделяет два селектора и соответствует второму элементу, только если он следует за первым элементом (хотя и не обязательно сразу), и оба являются
Carles Alcolea
2

Он выбирает следующий абзац и выравнивает начало абзаца слева, как в Microsoft Word.

Фло
источник
2
p+p{
//styling the code
}

p+p{
} simply mean find all the adjacent/sibling paragraphs with respect to first paragraph in DOM body.

    <div>
    <input type="text" placeholder="something">
    <p>This is first paragraph</p>
    <button>Button </button>
    <p> This is second paragraph</p>
    <p>This is third paragraph</p>
    </div>

    Styling part 
    <style type="text/css">
        p+p{
            color: red;
            font-weight: bolder;
        }
    </style>

   It will style all sibling paragraph with red color.

конечный результат выглядит так

введите описание изображения здесь

ИМРА
источник
1

Плюс (+) выберет первый непосредственный элемент. Когда вы используете + селектор, вы должны указать два параметра. Это станет более понятным на примере: здесь div и span являются параметрами, поэтому в этом случае будет использоваться только первый span после div.

 div+ span{
   color: green;
   padding :100px;
}

     <div>The top or first element  </div>
       <span >this is span immediately after div, this will be selected</span>
       <span>This will not be selected</span>

Выше стиль будет применяться только к первому промежутку после div. Важно отметить, что второй диапазон не будет выбран.


источник