Как работает: до работы в css?

0

в коде:

<!DOCTYPE html>
<html>
<head>
<style>
.parent {
    position: absolute;
    top:500px;  
    width:400px;
    border:1px solid green;
} 

.parent:before {
    z-index:-1;
    content:'';
    position:absolute;

    opacity:0.5;
    width:400px;
    height:200px;
    background-image:url('wallpaper324845.jpg');
    border:1px solid red;
}

.child {
    Color:black;
    border:1px solid black;
}
</style>
</head>

<body>
<div class="parent">
    <div class="child">Hello I am child</div>
</div>
</body>

</html>

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

Глядя на код с 4-го ответа. Как это работает, я путаюсь с использованием .parent и .parent:before. Я бы подумал, что это создаст элемент .parent:before перед каждым родительским элементом. Действительно запутался, как это работает?

Теги:
pseudo-element
css-content

4 ответа

1
Лучший ответ

:before созданием виртуального контента с использованием CSS, поэтому в приведенном выше случае автор использует ниже фрагменты

.parent:before{
   z-index:-1;
   content:'';
   position:absolute;
   opacity:0.5;
   width:400px;
   height:200px;
   background-image:url('wallpaper324845.jpg');
   border:1px solid red;
}

Он создает виртуальный элемент, используя :before, который затем он присваивает absolute, назначает некоторые измерения и назначает background, чтобы убедиться, что он остается ниже содержимого div, он использует z-index: -1;


Другими словами :before :after - не что иное, как предполагают вложенные два элемента span внутри вашего div, но, используя pseudo, вам не нужно иметь span поскольку вы можете достичь того же самого с псевдоэлементами.

У вас есть что-то вроде этого

<div>
    Hello
    <span></span>
</div>

div {
   position: relative; 
}

div span {
    position: absolute;
    width: 100%;
    height: 100%;
    background: #f00;
    z-index: -1;
    left: 0;
    top: 0;
}

демонстрация

Может быть также достигнуто с использованием :before или :after, разметка остается неизменной, но CSS идет как

div {
   position: relative; 
}

div:after {
    content: "";
    position: absolute;
    width: 100%;
    height: 100%;
    background: #f00;
    z-index: -1;
    left: 0;
    top: 0;
}

демонстрация

Таким образом, он просто сохраняет ваш пустой элемент в вашем HTML, но если вы посмотрите на вышеприведенный CSS, я использую свойство content которое ВСЕГДА связано с :before или :after и да, это необходимо, даже если вы сохраняете его пустым,


Также обратите внимание, что :before и :after сгенерированного содержимого являются встроенными, поэтому, чтобы сделать height, width работы, вам нужно явно указать display: block; или display: inline-block; если вы хотите сделать его блочным уровнем, но в этом конкретном случае вам не понадобится, поскольку псевдоэлемент будет помещен как absolute

div:after {
    content: "Hello";
    margin-top: 20px; /* This wont work as pseudo is inline by default */
}

демонстрация


Поэтому сделайте block или inline-block

демонстрация

  • 0
    Спасибо за объяснение. Просто чтобы уточнить один момент: «вам нужно явно упомянуть display: block; или display: inline-block;» Автор не использует это в своем примере, и вы тоже не используете его. Можете ли вы объяснить, почему
  • 0
    @ user3247608 Потому что он использует position: absolute; :) так что вам не нужно определять display: block;
Показать ещё 2 комментария
1

Авторы определяют стиль и расположение сгенерированного контента с помощью: before и: after псевдоэлементов. Как показывают их имена, псевдовые элементы: before и: after определяют местоположение содержимого до и после содержимого дерева элементов элемента. Свойство "content", в сочетании с этими псевдоэлементами, указывает, что вставлено.

Ниже представлено дерево документов с HTML как root.

HTML
.HEAD    
..TITLE
.BODY
..H1
..P
..UL
...LI
...LI
...LI

Например, следующее правило вставляет строку "Примечание:" перед содержимым каждого элемента P, чей атрибут "class" имеет значение "note":

p.note:before { content: "Note: " }

Объекты форматирования (например, ящики), сгенерированные элементом, включают сгенерированный контент. Так, например, изменение указанной таблицы стилей на:

p.note:before { content: "Note: " }
p.note        { border: solid green }

приведет к созданию сплошной зеленой границы вокруг всего абзаца, включая начальную строку.

Псевдоэлементы: before и: after наследуют любые наследуемые свойства от элемента в дереве документов, к которому они прикреплены.

Например, следующие правила вставляют открытую метку кавычки перед каждым элементом Q. Цвет метки кавычки будет красным, но шрифт будет таким же, как и шрифт остальной части элемента Q:

q:before {
  content: open-quote;
  color: red
}

В a: before или: после объявления псевдоэлемента непривитые свойства принимают свои начальные значения.

Так, например, поскольку начальное значение свойства "display" является "inline", цитата в предыдущем примере вставляется как встроенное поле (то есть в той же строке, что и исходное текстовое содержимое элемента). Следующий пример явно устанавливает свойство display для "block", так что вставленный текст становится блоком:

body:after {
    content: "The End";
    display: block;
    margin-top: 2em;
    text-align: center;
}

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

Например, следующий фрагмент документа и таблица стилей:

<h2> Header </h2>               h2 { display: run-in; }
<p> Text </p>                   p:before { display: block; content: 'Some'; }

... будет отображаться точно так же, как следующий фрагмент документа и таблица стилей:

<h2> Header </h2>            h2 { display: run-in; }
<p><span>Some</span> Text </p>  span { display: block }

Аналогичным образом, следующий фрагмент документа и таблица стилей:

<h2> Header </h2>     h2 { display: run-in; }
                      h2:after { display: block; content: 'Thing'; }
<p> Text </p>

... будет отображаться точно так же, как следующий фрагмент документа и таблица стилей:

<h2> Header <span>Thing</span></h2>   h2 { display: block; }
                                      span { display: block; }
<p> Text </p>
  • 0
    Вы просто скопировали и вставили сюда всю статью W3C? Лучше, если бы вы прокомментировали ссылку на вопрос
  • 0
    мне жаль, подумал я, скорее, побывав там и прочитав, тот, кто задал вопрос, получит все под капотом вместе с другими ответами.
0

Попробуйте взглянуть на эту статью. он объясняет, как: до и: после псевдоселекторов работают:

http://coding.smashingmagazine.com/2011/07/13/learning-to-use-the-before-and-after-pseudo-elements-in-css/

0

В основном :before (например: after) является псевдоэлементом CSS. Так что это почти как встроенный элемент HTML. Почти.

Чтобы играть с псевдоэлементами, вам нужно content свойство content (в большинстве случаев - пустая строка). Обратите внимание, что это встроенный элемент по умолчанию, поэтому он не может иметь ширину/высоту. Вам нужно установить display: block (или встроенный блок или что-то еще).

Я думаю, вы пропустили установку relative позиции на родительский элемент (.parent). Вот он:

.parent{
  position: relative;
  top:500px;  
  width:400px;
  border:1px solid green;
} 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню