HTML y CSS Avanzado
HTML y CSS Avanzado
HTML y CSS Avanzado
<html>
<head>
<meta charset="UTF-8">
<title>Tu portfolio</title>
</head>
<body>
</div>
<div class="flex-row">
</div>
div{
.header{
display:flex;
height:95px;
.header-link{
margin:auto;
.project{
background-position:center;
background-size:cover;
.project_beginner {
width:636px;
height:430px;
}
Terminología de Flexbox
Hay dos términos principales que debes conocer cuando tratamos con
flexbox:
.header{
display:flex;
height:95px;
.header-link{
margin:auto;
.project{
background-position:center;
background-size:cover;
.project_beginner {
width:636px;
height:430px;
.project_music-album{
background-image:url(https://code.s3.yandex.net/web-code/album.png);
}
.project_design-principles{
background-image:url(https://code.s3.yandex.net/web-code/design.png);
.flex-row{
display:flex;
.flex-column{
width:636px;
height:557px;
.project_procrastinate{
width:636px;
height:557px;
}
Contenedores Flexibles Anidados
Los elementos flexibles se pueden convertir ellos mismos en contenedores
flexibles para controlar los elementos anidados en ellos. La autoridad de un
contenedor flexible solo se extiende hacia sus hijos directos. En otras
palabras, los elementos hijos escuchan a sus padres, pero no a sus abuelos.
Si bien cualquier cosa dentro de un contenedor flexible debe ser un elemento
flexible, un elemento hijo de un elemento flexible no lo será a menos que se
le aplique la declaración display: flex específicamente.
Dirección dentro de los contenedores
flexibles
De forma predeterminada, los elementos flexibles se muestran en una fila de
izquierda a derecha en el orden en que aparecen en el código HTML. Sin
embargo, flexbox nos permite cambiar las filas por columnas e invertir el
orden de los elementos para que vayan contracorriente. Para ello,
necesitamos aplicar la propiedad flex-direction al contenedor. Esta propiedad
puede tener los siguientes valores:
flex-start:
Los elementos flexibles se alinean al principio del contenedor
sin ningún espacio entre ellos. Si el valor de flex-direction es row, los
elementos flexibles se agruparán hacia el borde izquierdo del
contenedor, el espacio restante quedará a la derecha. Si el valor de la
propiedad flex-direction es column, los elementos se ordenarán de arriba a
abajo empezando por la parte superior del contenedor, dejando el
espacio vacío en la parte inferior.
flex-end: El espacio vacío viene primero y los elementos se alinean en el
otro extremo del contenedor. Con la declaración flex-direction: row, los
elementos aparecen a la derecha y el espacio vacío a la izquierda. Con
la declaración flex-direction: row-reverse, al revés.
center: los elementos flexibles se colocan en el medio del contenedor,
con la misma cantidad de espacio vacío a cada lado.
space-between: El primer elemento aparece en un extremo del contenedor y
el último y en el opuesto, los demás elementos se distribuyen
uniformemente entre ambos. Puede ser de utilidad para una barra de
menú que recorra el ancho de la página.
space-around: el espacio vacío se divide en intervalos iguales. Cada
elemento flexible tiene un margen en todas las direcciones que es igual
a este intervalo. Así pues, la distancia entre cada par de elementos
adyacentes es igual a dos espacios de margen, mientras que la
distancia entre los bordes derecho e izquierdo del contenedor y el
primer y último elemento respectivamente es igual a un espacio de
margen.
space-evenly: Todos los espacios vacíos tienen el mismo tamaño, tanto
entre elementos adyacentes como entre los bordes del contenedor y el
primer y último elemento.
Tanta explicación de golpe puede ser demasiado para asimilar, así que utiliza
el siguiente widget para ver estas propiedades en acción:
Alinear elementos flexibles en
contenedores
Ajuste de línea
De forma predeterminada, los contenedores flexibles mantienen los
elementos flexibles en una sola fila o columna. Esto significa que si haces la
ventana del navegador más pequeña, los elementos flexibles ajustarán
automáticamente sus dimensiones que quepan todos en el contenedor.
Podemos cambiar este comportamiento para que, en lugar de que cambien
las dimensiones predeterminadas de tus elementos, todo lo que no quepa
dentro de la pantalla se mueva a una nueva fila o columna.
Para ello, necesitamos aplicar la propiedad flex-wrap con un valor de wrap a un
contenedor flexible. Esto garantiza que los últimos elementos se ajusten a
una nueva fila o columna si no hay suficiente espacio para ellos con sus
dimensiones predeterminadas.
El valor de wrap-reverse hace lo mismo que wrap, excepto que los elementos
aparecen en orden inverso.
La propiedad flex-wrap se aplica automáticamente a todos los contenedores
flexibles, pero se les asigna el valor nowrap por defecto.
El orden para ajustar los elementos depende del valor de la propiedad flex-
direction. Si el valor es flex-direction: row, el elemento más a la derecha será el
primero en moverse a una nueva línea. Si, por el contrario, el valor es flex-
direction: row-reverse, el elemento más a la izquierda se moverá primero.
Prueba varias combinaciones de declaraciones diferentes y compruébelo tu
mismo:
flex-start
flex-end
center
baseline
stretch
Describir con palabras lo que hace cada valor de align-content sería una locura,
por lo que hemos incluido algunos gifs para ayudarnos. Echa un vistazo a
cada uno de ellos para ver la propiedad align-content en acción. En el primer
ejemplo, el eje principal del contenedor flexible es el horizontal y el eje
transversal es el vertical.
omo puedes ver, la declaración align-content: flex-start; hace que los elementos
(bloques) se alineen desde el inicio del eje transversal del contenedor flexible.
Esto significa que los primeros elementos ocupan la fila superior del
contenedor flexible, es decir, en la parte superior del eje y. Cuando no queda
más espacio en esa fila, los elementos restantes se mueven a la siguiente
fila, permaneciendo lo más cerca posible de la parte superior del contenedor.
Veremos los dos primeros con más detalle un poco más adelante, pero por
ahora, llenemos nuestro <head> con más información y veamos más de cerca
cómo funcionan las etiquetas <meta>.
Estructura de las metaetiquetas
En primer lugar, veamos cuál es la estructura básica de una etiqueta <meta>:
Etiquetas semánticas
Huevos
Leche
Pan
1. Síguenos
2. Dale Me Gusta a esta publicación
3. Etiqueta a un amigo en los comentarios
Estas listas se hacen con el contenedor <ol> y con etiquetas <li></li> rodeando a
cada elemento, como en las listas desordenadas:
Copiar códigoHTML
Cómo participar en el sorteo:
<ol>
<li>Síguenos.</li>
<li>Dale Me Gusta a esta publicación.</li>
<li>Etiqueta a un amigo en los comentarios.</li>
</ol>
Aunque los marcadores de los objetos de la lista suelen ser viñetas o
números, podemos cambiarlos con CSS utilizando la propiedad list-style. Se
pueden asignar numerosos valores, desde cuadrados hasta letras del
alfabeto armenio, pasando por cualquier otro elemento intermedio. Incluso
puedes establecer una imagen como tu marcador. Puedes encontrar la lista
completa en la Especificación CSS.
A veces, desearás ocultar el marcador por completo, lo que se puede realizar
de la siguiente manera:
Copiar códigoCSS
ul {
list-style: none;
}
Artículos
Con la cantidad de blogs y sitios de noticias que existen, el texto constituye
una gran parte de los contenidos de Internet. Los cuerpos de texto que
aparecen en este tipo de sitios suelen estar contenidos dentro del
elemento <article>.
Como ya habrás podido deducir, marcar tus artículos con estas etiquetas
garantizará que los motores de búsqueda reconozcan el contenido de tu
página por lo que es.
Copiar códigoHTML
<article>
<h2>Título del artículo</h2>
<p>El cuerpo principal del artículo</p>
</article>
Citas
Las citas pueden colocarse entre las etiquetas <blockquote></blockquote>. Este
elemento tiene el atributo cite, que aunque no es obligatorio, puede ser muy
útil, ya que te permite especificar de quién es la cita.
Copiar códigoHTML
<blockquote cite="https://practicum.yandex.com/">
Cuando las cosas se ponen complicadas, los fuertes siguen adelante.
Te ayudaremos a arrancar y a superar cualquier dificultad.
</blockquote>
Las citas están indentadas de forma predeterminada:
Tablas
A veces es necesario hacer una tabla, aquí es donde entra el elemento <table>.
Identificadores
Ahora que hemos aprendido algunas de las cosas que se pueden hacer con
HTML, es el momento de ver algunas de las formas más avanzadas de
mejorar nuestros sitios web a través de CSS. Empezaremos hablando de los
identificadores. Para entender qué son y para qué sirven los identificadores,
veamos un ejemplo.
Los artículos de Wikipedia comienzan con un índice. Se trata de una tabla
formada por enlaces. Pero cuando haces clic en uno de ellos, en lugar de
dirigirte a otra página web, te lleva a otra sección de la página actual.
Esos hipervínculos se llaman enlaces de anclaje. Estos enlaces hacen
referencia a un objeto específico, que puede estar situado en otra página o en
la página actual. Al establecer un enlace de anclaje, especificaremos un
elemento HTML como nuestro destino. Por ejemplo, en un artículo de
Wikipedia, al hacer clic en un título del índice, el usuario accede al
encabezado correspondiente a esa sección del artículo.
¿Cómo especificamos el elemento que queremos usar? No tiene sentido
utilizar nombres de etiquetas o clases porque éstas suelen aplicarse a varios
elementos del mismo documento. Necesitamos una forma de referirnos a un
elemento específico. Para ello, podemos utilizar algo llamado identificador,
que nos permite asignar una etiqueta única a un elemento.
Para asignar un identificador a un elemento utilizamos el atributo id. El valor
de este atributo debe ser único.
Por ejemplo, el elemento <h1> del siguiente ejemplo tiene un identificador
llamado lesson-13:
Copiar códigoHTML
<h1 id="lesson-13">Unidad 13: Identificadores</h1>
Una vez que hemos asignado un identificador a un elemento, podemos
referirnos a él en cualquier parte de nuestro código.Por ejemplo, podemos
enlazar con nuestro elemento identificado colocando un enlace de anclaje en
el atributo href. Si tanto el enlace de anclaje como el elemento de destino se
encuentran en la misma página, podemos crear el enlace utilizando el
símbolo de la almohadilla (#) seguido del nombre del identificador sin
espacios:
Copiar códigoHTML
<a href="#lesson-13">Cómo hacer un enlace de anclaje a una sección de la misma página.</a>
Para hacer referencia al elemento desde otra página, debes especificar la
dirección completa de la página donde se encuentra el objeto, seguida de una
almohadilla y del identificador del elemento:
Copiar códigoHTML
<a href="https://my-site.com/article#lesson-13">Cómo hacer un enlace de anclaje a una sección de otra
página</a>
Si haces clic en este enlace para ver la descripción oficial de los enlaces de
anclaje en w3.org, (artículo en inglés) verás que se abre automáticamente en
la sección correspondiente de la página. Se trata de un enlace de anclaje que
lleva al elemento con un id de h-12.2.3, que se encuentra aproximadamente en
la mitad de la página. La dirección del enlace se ve
así: https://www.w3.org/TR/html401/struct/links.html#h-12.2.3.
Aunque no recomendamos utilizar identificadores como selectores de reglas
CSS, lo cierto es que se puede hacer. Para ello, escribe una almohadilla
antes del nombre del identificador cuando crees tu selector:
Copiar códigoCSS
#lesson-13 {
color: #ff0000;
}
Cuando selecciones un nombre para tu identificador, sigue estas tres reglas
para asegurarte de que tanto las personas como los navegadores puedan
entenderlo:
Copiar códigoCSS
/* todos los enlaces no tocados por el usuario serán azules */
a:link {
color: #00f;
}
/* los enlaces visitados por el usuario aparecerán en gris claro */
a:visited {
color: #808080;
}
/* al pasar el ratón por encima, el enlace se volverá verde */
a:hover {
color: #0f0;
}
/* los enlaces en los que el usuario haga clic se volverán rojos */
a:active {
color: #f00;
}
Puedes usar este acrónimo para recordar estas cuatro
pseudoclases: All Hail Lord Voldemort.
A — :active — elementos activados (en los que se acaba de hacer clic).
H — :hover — elementos sobre los que se pasa el ratón («hover»);
L — :link — enlaces no visitados;
V — :visited — enlaces visitados;
Aplicar estilos según el marcado
El navegador es capaz de analizar el marcado HTML de una página. Por
ejemplo, entiende cuántos elementos anidados tiene un bloque y puede
calcular cuántos bloques del mismo tipo hay en una página.
Veamos cómo funciona en la práctica. Los sitios de compras en línea suelen
mostrar los artículos en una especie de cuadrícula.
Los márgenes se muestran en verde.
Cada objeto tiene un margen a la derecha para asegurar que haya un
espacio entre elementos, pero el último de cada fila no debe tener ese
margen. De lo contrario, no podrías colocar tres artículos en cada fila y se
pasarían en la siguiente.
Para encajar tres en una fila, debes eliminar ese margen cada tres
elementos. Para lograrlo, podemos utilizar la pseudoclase .nth-of-type(), es
decir, el elemento nth de este tipo. Con esta pseudoclase, podemos aplicar
estilos a cada segundo, tercer o décimo elemento.
Para redactar el selector de esta pseudoclase, debes escribir primero su
nombre, seguido del número que se necesitas y de la letra n entre paréntesis.
Por ejemplo, si escribes 3n significa que los estilos de esta regla deben
aplicarse a cada tercer elemento.
Copiar códigoCSS
/* cada tercer elemento con la clase «card» tendrá un margen derecho de 0 */
.card:nth-of-type(3n) {
margin-right: 0;
}
A veces, solo tendrás que asignar estilos al primero o al último elemento de
un selector. Para ello, podemos utilizar las pseudoclases :first-of-type() y :last-of-
type() respectivamente.
Pseudoclases funcionales
Las pseudoclases funcionales te permiten asignar estilos a los elementos
mirando el código HTML o el historial de acciones del usuario. Por ejemplo, la
pseudoclase :has() se utiliza para aplicar estilos a elementos que contienen
ciertos elementos anidados. Para hacer esto, escribimos los nombres de los
elementos dentro de paréntesis:
Copiar códigoCSS
/* los estilos se aplicarán solo a las secciones que contengan un elemento <h2> */
section:has(h2) {
/* estilos */
}
Otra pseudoclase funcional útil es :not(). Independientemente de lo que
pongas entre paréntesis, el selector aplicará el conjunto de estilos adjunto a
todo lo que no se encuentre en ese estado:
Copiar códigoCSS
/* seleccionará todos los enlaces no visitados */
a:not(:visited) {
/* estilos */
}
Hemos cubierto los conceptos básicos; puedes encontrar detalles sobre todas
las pseudoclases disponibles en la documentación oficial.(documentación en
inglés)
Pseudoelementos y selectores de
atributo
Los navegadores son capaces de añadir algo antes o después de un
elemento.
Para hacer esto, tenemos los pseudoelementos ::before y ::after.
Tradicionalmente, se escriben con dos puntos después del selector:
Copiar códigoCSS
.selector::before {
/* estilos para el pseudoelemento «antes» */
}
.selector::after {
/* estilos para el pseudoelemento «después» */
}
Como los nombres sugieren, el navegador inserta el
pseudoelemento ::before antes del contenido del elemento especificado,
mientras que el pseudoelemento ::after viene después.
Los pseudoelementos ::before y ::after siempre tienen la propiedad content. Esto
determina con qué contenidos se llenarán los pseudoelementos.
Esta hechicería CSS será más fácil de asimilar con un ejemplo.
HTML code:
Copiar códigoHTML
<h1 class="title">for</h1>
Código CSS:
Copiar códigoCSS
.title::before {
content: "Lust ";
}
.title::after {
content: " Life";
}
Este código mostrará el siguiente título en la página: "Lust for Life".(artículo
en inglés) Las palabras «Lust» y «Life» no forman parte del elemento <h1>;
son pseudoelementos anidados dentro de <h1>. Podemos pensar que estos
elementos solo existen a medias.
La apariencia de los pseudoelementos se controla mediante CSS de la
misma manera que cualquier otra cosa. Podemos establecer el fondo, la
fuente, el tamaño o cualquier otro estilo en nuestro código CSS.
Selectores de atributos
Otra forma interesante y útil de trabajar con CSS es utilizar selectores
vinculados a atributos. Estos selectores se utilizan para seleccionar
elementos con valores de atributos específicos. Para hacerlo, debes escribir
el nombre del atributo seguido de un signo de igual y del valor deseado entre
comillas, todo ello entre corchetes.
Copiar códigoCSS
img[src="logo.png"] {
border: 1px solid #0000ff;
}
El selector img[src="logo.png"] seleccionará solo la imagen con su dirección
en logo.png, y le aplicará un borde azul. Cualquier otra imagen será ignorada.
Este tipo de selectores se utilizan para resolver tareas específicas, algunas
de las cuales son rutinarias para los desarrolladores web, por lo que esta
herramienta seguramente te resultará útil en algún momento.