2016-01-16 2 views
1

Прежде чем перейти к моему вопросу, я знаю, как работают селекторы :before и :after. (не дубликат what is ::before or ::after expression). Мой вопрос касается использования.Когда использовать: до или: после

Я видел некоторые несоответствия на протяжении многих лет, когда эти селекторы использовались для отображения того же самого. Те же результаты, разные подходы. В некоторых конкретных случаях, таких как добавление шрифта удивительный значок в li до a селектор :before имеет смысл. Я не спрашиваю об этом, потому что это достаточно интуитивно понятно. Но возьмите речевой пузырь для всплывающей подсказки, например. Я видел треугольник, помещенный с :before, а также с :after, а в некоторых случаях они используют оба! Я смущен.

Каков определяющий фактор при выборе, какой селектор следует использовать для присоединения элемента, такого как треугольник на речевом пузыре?

Позвольте мне продемонстрировать:

HTML

<div class="container"> 
    <div class="bubble">This is my text in a bubble using :after</div> 
    <div class="bubble2">This is my text in a bubble using :before</div> 
</div> 

CSS

.bubble{ 
    position: relative; 
    padding: 15px; 
    margin: 1em 0 3em; 
    color: #000; 
    background: #f3961c; 
    border-radius: 10px; 
    background: linear-gradient(top, #f9d835, #f3961c); 
} 

.bubble:after { 
    content: ""; 
    display: block; 
    position: absolute; 
    bottom: -15px; 
    left: 50px; 
    width: 0; 
    border-width: 15px 15px 0; 
    border-style: solid; 
    border-color: #f3961c transparent; 
} 


.bubble2 { 
    position: relative; 
    padding: 15px; 
    margin: 1em 0 3em; 
    color: #000; 
    background: #f3961c; 
    border-radius: 10px; 
    background: linear-gradient(top, #f9d835, #f3961c); 
} 

.bubble2:before { 
    content: ""; 
    display: block; 
    position: absolute; 
    bottom: -15px; 
    left: 50px; 
    width: 0; 
    border-width: 15px 15px 0; 
    border-style: solid; 
    border-color: #f3961c transparent; 
} 

IMG

enter image description here

Пожалуйста, не говорите мне, что это всего лишь вопрос предпочтения. лол

DEMO

+2

Это вопрос предпочтения, LOL. – deceze

+1

Ну, серьезно, в хакерских случаях, таких как добавление речевых пузырьков треугольников, либо работает, так как это не действительно «до» или «после». В других ситуациях, когда вы действительно добавляете что-то до или после * текста *, это имеет значение. – deceze

+0

Когда вы используете абсолютное позиционирование .... это вопрос предпочтения – vals

ответ

2

Номенклатура ::before и ::after не является совершенно произвольным, но это только действительно имеет смысл, когда отображается содержание этих псевдо элементов рядный, непосредственно перед или после того, как содержание к элементу, к которому они прикреплены.

Как только вы используете

position: absolute; 

в псевдо-элемента (который является полностью законным), он больше не имеет значения того, что псевдо-элемент назван ::before или ::after.

Его так же легко можно назвать ::presentational-frill-1 или ::presentational-frill-2.

+0

Ну, это все равно должно следовать синтаксису, не так ли?Поэтому, если я изменил его на: пустое или даже составило свое: прикрепите его, не получится – LOTUSMS

+1

Да, вы абсолютно правы, @LOTUSMS. Мое использование пассивного выше было неоднозначным - когда я писал _ «Его можно так же легко называть». Я не имел в виду вас, я имел в виду W3C. – Rounin

+0

gotcha. Ну, мне кажется, что W3C должен был придумать: прикрепить псевдоэлемент для таких ситуаций, как эти – LOTUSMS

Смежные вопросы