1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
|
---
title: '::before (:before)'
slug: 'Web/CSS/::before'
tags:
- CSS
- Presentación
- Pseudo-elemento CSS
- Referencia
- Web
translation_of: 'Web/CSS/::before'
---
<div>{{CSSRef}}</div>
<p><span class="seoSummary">En CSS, <code>::before</code> crea un <a href="/es/docs/Web/CSS/Pseudo-elements">pseudoelemento</a> que es el primer hijo del elemento seleccionado. Es usado normalmente para añadir contenido estético a un elemento, usando la propiedad {{cssxref("content")}}. Este elemento se muestra en línea con el texto de forma predeterminada.</span></p>
<pre class="brush: css language-css notranslate"><code class="language-css"><span class="comment token">/* Añade un corazón antes de los enlaces */</span>
<span class="selector token">a<span class="pseudo-element token">::before</span></span> <span class="punctuation token">{</span>
<span class="property token">content</span><span class="punctuation token">:</span> "</code>♥<code class="language-css">"<span class="punctuation token">;</span>
<span class="punctuation token">}</span></code></pre>
<div class="note">
<p><strong>Nota:</strong> Los pseudoelementos generados por <code>::before</code> y <code>::after</code> son <a href="https://www.w3.org/TR/CSS2/generate.html#before-after-content">contenidos por la caja de formato del elemento</a>, y por lo tanto, no aplica a <em><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/CSS/Replaced_element">elementos de reemplazo</a></em> como los elementos {{htmlelement("img")}}, o {{htmlelement("br")}}.</p>
</div>
<h2 id="Sintaxis">Sintaxis</h2>
{{csssyntax}}
<div class="note">
<p><strong>Nota:</strong> CSS3 introdujo la notación <code>::before</code> (con doble dos puntos) para diferenciar <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes">pseudo-clases</a> con <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements">pseudo-elementos</a>. Los navegadores aceptan <code>:before</code>, añadido en CSS2.</p>
</div>
<h2 id="Ejemplos">Ejemplos</h2>
<h3 id="Añadiendo_comillas">Añadiendo comillas</h3>
<p>Un ejemplo simple del uso del pseudoelemento <code>::before</code> es el proporcionar comillas. Aquí, usamos <code>::before </code>y <code>{{Cssxref("::after")}}</code> para insertar caracteres de comillas.</p>
<h4 id="HTML">HTML</h4>
<pre class="brush:html notranslate"><q>Some quotes</q>, he said, <q>are better than none</q>.</pre>
<h4 id="CSS">CSS</h4>
<pre class="brush:css notranslate">q::before {
content: "«";
color: blue;
}
q::after {
content: "»";
color: red;
}</pre>
<h4 id="Resultado">Resultado</h4>
<p>{{EmbedLiveSample('Añadiendo_comillas', '500', '50', '')}}</p>
<h3 id="Ejemplo_decorativo">Ejemplo decorativo</h3>
<p>Podemos estilizar el texto o imágenes en la propiedad {{cssxref("content")}} de casi cualquier forma que queramos.</p>
<h4 id="HTML_2">HTML</h4>
<pre class="brush: html notranslate"><span class="ribbon">Notice where the orange box is.</span></pre>
<h4 id="CSS_2">CSS</h4>
<pre class="brush: css notranslate">.ribbon {
background-color: #5BC8F7;
}
.ribbon::before {
content: "Look at this orange box.";
background-color: #FFBA10;
border-color: black;
border-style: dotted;
}</pre>
<h4 id="Resultado_2">Resultado</h4>
<p>{{EmbedLiveSample('Ejemplo_decorativo', 450, 60)}}</p>
<h3 id="Lista_de_tareas">Lista de tareas</h3>
<p>En este ejemplo, creamos una lista de tareas simple usando pseudo-elementos. Este método puede ser usado comúnmente para añadir detalles a la interfaz y mejorar su experiencia de usuario.</p>
<h4 id="HTML_3">HTML</h4>
<pre class="brush: html notranslate"><ul>
<li>Buy milk</li>
<li>Take the dog for a walk</li>
<li>Exercise</li>
<li>Write code</li>
<li>Play music</li>
<li>Relax</li>
</ul>
</pre>
<h4 id="CSS_3">CSS</h4>
<pre class="brush: css notranslate">li {
list-style-type: none;
position: relative;
margin: 2px;
padding: 0.5em 0.5em 0.5em 2em;
background: lightgrey;
font-family: sans-serif;
}
li.done {
background: #CCFF99;
}
li.done::before {
content: '';
position: absolute;
border-color: #009933;
border-style: solid;
border-width: 0 0.3em 0.25em 0;
height: 1em;
top: 1.3em;
left: 0.6em;
margin-top: -1em;
transform: rotate(45deg);
width: 0.5em;
}</pre>
<h4 id="JavaScript">JavaScript</h4>
<pre class="brush: js notranslate">var list = document.querySelector('ul');
list.addEventListener('click', function(ev) {
if( ev.target.tagName === 'LI') {
ev.target.classList.toggle('done');
}
}, false);
</pre>
<p>Aquí se está ejecutando el ejemplo de arriba. Nótese que no se están usando íconos, y la marca de selección en realidad es el pseudoelemento <code>::before</code> que ha sido estilizado en CSS. Puedes interactuar con el ejemplo para ver los cambios.</p>
<h4 id="Resultado_3">Resultado</h4>
<p>{{EmbedLiveSample('Lista_de_tareas', 400, 300)}}</p>
<h3 id="Caracteres_especiales">Caracteres especiales</h3>
<p>Como esto es CSS y no HTML, <strong>no </strong>se pueden usar entidades de marcado en los valores del contenido. Si se necesita usar caracteres especiales, y no se puede ingresar literalmente en la cadena de contenido CSS, se utiliza una secuencia de escape unicode, consistiendo de una barra invertida seguida de un valor unicode hexadecimal.</p>
<h4 id="HTML_4">HTML</h4>
<pre class="brush: html line-numbers language-html notranslate"><code class="language-html"><span class="tag token"><span class="tag token"><span class="punctuation token"><</span>ol</span><span class="punctuation token">></span></span>
<span class="tag token"><span class="tag token"><span class="punctuation token"><</span>li</span><span class="punctuation token">></span></span>Crack Eggs into bowl<span class="tag token"><span class="tag token"><span class="punctuation token"></</span>li</span><span class="punctuation token">></span></span>
<span class="tag token"><span class="tag token"><span class="punctuation token"><</span>li</span><span class="punctuation token">></span></span>Add Milk<span class="tag token"><span class="tag token"><span class="punctuation token"></</span>li</span><span class="punctuation token">></span></span>
<span class="tag token"><span class="tag token"><span class="punctuation token"><</span>li</span><span class="punctuation token">></span></span>Add Flour<span class="tag token"><span class="tag token"><span class="punctuation token"></</span>li</span><span class="punctuation token">></span></span>
<span class="tag token"><span class="tag token"><span class="punctuation token"><</span>li</span> <span class="attr-name token">aria-current</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">'</span>step<span class="punctuation token">'</span></span><span class="punctuation token">></span></span>Mix thoroughly into a smooth batter<span class="tag token"><span class="tag token"><span class="punctuation token"></</span>li</span><span class="punctuation token">></span></span>
<span class="tag token"><span class="tag token"><span class="punctuation token"><</span>li</span><span class="punctuation token">></span></span>Pour a ladleful of batter onto a hot, greased, flat frying pan<span class="tag token"><span class="tag token"><span class="punctuation token"></</span>li</span><span class="punctuation token">></span></span>
<span class="tag token"><span class="tag token"><span class="punctuation token"><</span>li</span><span class="punctuation token">></span></span>Fry until the top of the pancake loses its gloss<span class="tag token"><span class="tag token"><span class="punctuation token"></</span>li</span><span class="punctuation token">></span></span>
<span class="tag token"><span class="tag token"><span class="punctuation token"><</span>li</span><span class="punctuation token">></span></span>Flip it over and fry for a couple more minutes<span class="tag token"><span class="tag token"><span class="punctuation token"></</span>li</span><span class="punctuation token">></span></span>
<span class="tag token"><span class="tag token"><span class="punctuation token"><</span>li</span><span class="punctuation token">></span></span>serve with your favorite topping<span class="tag token"><span class="tag token"><span class="punctuation token"></</span>li</span><span class="punctuation token">></span></span>
<span class="tag token"><span class="tag token"><span class="punctuation token"></</span>ol</span><span class="punctuation token">></span></span></code></pre>
<h4 id="CSS_4">CSS</h4>
<pre class="brush: css language-css notranslate"><code class="language-css">
<span class="selector token">li</span> <span class="punctuation token">{</span>
<span class="property token">padding</span><span class="punctuation token">:</span><span class="number token">0.5</span><span class="token unit">em</span><span class="punctuation token">;</span>
<span class="punctuation token">}</span>
<span class="selector token">li<span class="attribute token"><span class="punctuation token">[</span><span class="attribute token">aria-current</span><span class="operator token">=</span><span class="token value">'step'</span><span class="punctuation token">]</span></span></span> <span class="punctuation token">{</span>
<span class="property token">font-weight</span><span class="punctuation token">:</span>bold<span class="punctuation token">;</span>
<span class="punctuation token">}</span>
<span class="selector token">li<span class="attribute token"><span class="punctuation token">[</span><span class="attribute token">aria-current</span><span class="operator token">=</span><span class="token value">'step'</span><span class="punctuation token">]</span></span><span class="pseudo-element token">::after</span></span> <span class="punctuation token">{</span>
<span class="property token">content</span><span class="punctuation token">:</span> <span class="string token">" \21E6"</span><span class="punctuation token">;</span> <span class="comment token">/* Hexadecimal for Unicode Leftwards white arrow*/</span>
<span class="property token">display</span><span class="punctuation token">:</span> inline<span class="punctuation token">;</span>
<span class="punctuation token">}</span>
</code>
</pre>
<h2 id="Especificaciones">Especificaciones</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Especificación</th>
<th scope="col">Estatus</th>
<th scope="col">Comentarios</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('CSS4 Pseudo-Elements', '#selectordef-before', '::before')}}</td>
<td>{{Spec2('CSS4 Pseudo-Elements')}}</td>
<td>Sin cambios significativos desde la especificación previa.</td>
</tr>
<tr>
<td>{{Specname("CSS3 Transitions", "#animatable-properties", "")}}</td>
<td>{{Spec2("CSS3 Transitions")}}</td>
<td>Permite transiciones en propiedades definidas a los pseudo-elementos.</td>
</tr>
<tr>
<td>{{Specname("CSS3 Animations", "", "")}}</td>
<td>{{Spec2("CSS3 Animations")}}</td>
<td>Permite animaciones en propiedades definidas a los pseudo-elementos.</td>
</tr>
<tr>
<td>{{SpecName('CSS3 Selectors', '#gen-content', '::before')}}</td>
<td>{{Spec2('CSS3 Selectors')}}</td>
<td>Introduce la sintaxis de doble símbolo <code>:</code></td>
</tr>
<tr>
<td>{{SpecName('CSS2.1', 'generate.html#before-after-content', '::before')}}</td>
<td>{{Spec2('CSS2.1')}}</td>
<td>Definición inicial, usando la sintaxis de un símbolo <code>:</code></td>
</tr>
</tbody>
</table>
<h2 id="Compatibilidad_de_navegadores">Compatibilidad de navegadores</h2>
<div>
<p>{{Compat("css.selectors.before")}}</p>
</div>
<h2 id="Véase_también">Véase también</h2>
<ul>
<li>{{Cssxref("::after")}}</li>
<li>{{cssxref("content")}}</li>
</ul>
|