07 CSS
07 CSS
Python
Codo a Codo 4.0
CSS
Parte 3
Especificidad
La especificidad hace referencia a la relevancia que tiene un estilo sobre un elemento de la página al
cual le están afectando varios estilos de CSS al mismo tiempo. Es decir, hace referencia al grado de
importancia de un estilo sobre otro.
Los navegadores deciden qué valores de una propiedad CSS son más relevantes para un elemento
y, por lo tanto, serán aplicados. La especificidad está basada en las reglas de coincidencia que están
compuestas por diferentes tipos de selectores CSS.
La siguiente tabla muestra los niveles de especificidad, desde los más específicos a los más generales:
1 IMPORTANTE
Cuando varias
3
declaraciones
tienen igual
4 especificidad,
se aplicará al
elemento la
2
5 última
declaración
encontrada
en el CSS
<> Ver ejemplo especificidad (.html y .css). Comentar las reglas de estilo para ver
cómo funciona
Ejemplo explicado:
1. Este es el resultado inicial
5. Y si finalmente le sacamos el estilo de clase y dejamos sólo el párrafo tendrá jerarquía el estilo de
etiqueta:
Selectores
• selector descendiente: Se aplican en los elementos que tienen una relación
padre-hijo, es decir las etiquetas que están dentro de otras etiquetas.
<div> HTML
<p> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. </p>
<p> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
div p { CSS
tempor incididunt ut labore et dolore magna aliqua. </p>
color: green;
<p> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
font-size: 20px;
tempor incididunt ut labore et dolore magna aliqua. </p>
font-weight: bold;
</div>
background-color: lightgrey;
}
En este ejemplo es más fácil agregar un selector descendiente que aplicar una clase a cada elemento <p>
Para ver el modelo de caja desde el navegador Chrome debemos inspeccionar y seleccionar la
pestaña Computed del panel inferior.
<> Ver ejemplo modelo-caja.html
Dimensiones (ancho y alto)
Para dar tamaños específicos a los diferentes elementos de un documento HTML,
necesitaremos asignarles valores a las propiedades width (ancho) y height (alto).
En el caso de utilizar el valor auto en las propiedades anteriores (que es lo mismo que no
indicarlas, ya que es el valor que tienen por defecto), el navegador se encarga de calcular el
ancho o alto necesario, dependiendo del contenido del elemento.
Es importante recalcar que el tamaño automático dado a un elemento depende del tipo de
elemento (bloque, en línea...).
Dimensiones en modelo de caja
Al no indicar valores de ancho y alto para una caja, el elemento generalmente
toma el tamaño que debe respecto a su contenido, pero si indicamos un ancho
y alto concretos, estamos obligando mediante CSS a tener un aspecto
concreto y podemos obtener resultados inesperados si su contenido es más
grande que el tamaño que hemos obligado a tener:
Otra forma de lidiar con esto es utilizar las propiedades hermanas de width min-width y max-
width y las propiedades hermanas de height min-height y max-height. Con estas propiedades,
en lugar de establecer un tamaño fijo, establecemos unos máximos y unos mínimos, donde el
ancho o alto podría variar entre estos valores.
div{ CSS
width: 800px; En este caso, por ejemplo, a pesar de estar indicando
height: 800px; un tamaño de 800px, le aplicamos un max-width de
500px, por lo que estamos limitando el elemento a un
background: red; tamaño de ancho de 500 píxeles como máximo y
max-width: 500px; nunca superará ese tamaño.
}
Las propiedades de mínimos min-width y min-height por defecto tienen valor 0, mientras que las
propiedades de máximos max-width y max-height, tienen por defecto valor none.
Más información: min-height, max-height, min-width y max-width
Zonas de un elemento
En CSS existen ciertas palabras clave para hacer referencia a una zona u orientación
concreta sobre un elemento. Son conceptos muy sencillos y lógicos:
top
bottom
https://www.w3schools.com/css/css_overflow.asp
Dichas propiedades pueden tomar varios valores, donde visible es el valor que tiene por
defecto, le permite que haya desbordamiento. Otras opciones son las siguientes, donde
no se permite desbordamiento:
CSS3 añade las propiedades overflow-x y overflow-y para cada eje individual, que antiguamente
sólo era posible hacerlo con overflow para ambos ejes. Estas propiedades son útiles cuando no
queremos mostrar alguna barra de desplazamiento (habitualmente la barra de desplazamiento
horizontal).
Margin
Se utilizan para crear espacio alrededor de los elementos, fuera de los bordes definidos.
• margin-top
• auto
• margin-right
• px, em, rem, etc.
• margin-bottom
• porcentaje
• margin-left
Podemos aplicar diferentes márgenes a cada zona de un elemento utilizando cada una
de estas propiedades, o dejando al navegador que lo haga de forma automática
indicando el valor auto.
Existe un truco muy sencillo y práctico para centrar un elemento en pantalla. Basta con aplicar
un ancho fijo al contenedor, width: 500px (por ejemplo) y luego aplicar un margin: auto. De esta
forma, el navegador, al conocer el tamaño del elemento (y, por omisión, el resto del tamaño de la
ventana) se encarga de repartirlo equitativamente entre el margen izquierdo y el margen
derecho, quedando centrado el elemento
Hay que recordar diferenciar bien los márgenes de los rellenos, ya que no son la misma
cosa. Los rellenos (padding) son los espacios que hay entre los bordes del elemento en
cuestión y el contenido (por la parte interior). Mientras que los márgenes (margin) son
los espacios que hay entre los bordes del elemento en cuestión y los bordes de otros
elementos (parte exterior).
En el siguiente ejemplo nos encontramos con un solapamiento de márgenes. Por
defecto, si tenemos dos elementos adyacentes con, por ejemplo, margin: 20px cada uno,
ese espacio de margen se solapará y tendremos 20px en total, y no 40px (la suma de
cada uno) como podríamos pensar en un principio.
https://www.w3schools.com/css/css_margin.asp
Padding
Se utiliza para generar espacio alrededor del contenido de un elemento dentro de los
bordes definidos.
• padding-top
• px, em, rem, etc.
• padding-right
• % en relación al
• padding-bottom
ancho del
• padding-left
contenedor
Como se puede ver en la tabla, por defecto no hay relleno (el relleno está en cero),
aunque puede modificarse tanto con las propiedades anteriores como la propiedad de
atajo: modelo de cajas (en la siguiente página)
https://www.w3schools.com/css/css_padding.asp
Atajo: Modelo de cajas
Al igual que en otras propiedades de CSS, también existen atajos para los márgenes y los
rellenos:
10px; top/right/bottom/left
top/bottom right/left
10px 20px;
margin o
padding: top right/left bottom
10px 20px 10px;
top right bottom left
10px 20px 10px 20px;
Border
Permiten especificar el estilo, el ancho y el color del borde de un elemento.
• border-top
• border-color
• border-right
• boder-style
• border-bottom
• border-width
• border-left
Estilos de borde
Valor Descripción Valor Descripción
Oculto. Idéntico a none, salvo para
hidden groove Borde biselado con luz desde arriba.
conflictos con tablas.
dotted Borde basado en puntos. ridge Borde biselado con luz desde abajo. Opuesto a groove.
Borde basado en rayas (línea
dashed inset Borde con profundidad «hacia dentro».
discontinua).
solid Borde sólido (línea continua). outset Borde con profundidad «hacia fuera». Opuesto a inset.
double Borde doble (dos líneas continuas).
div{ CSS El borde más frecuente suele ser solid (borde
border-color: gray; liso y continuo). Pueden utilizarse cualquiera
border-width: 1px; de los estilos indicados en la tabla anterior e
border-style: dotted; incluso combinar con otras propiedades. Así
} se verían los diferentes estilos de borde
utilizando 10 píxels de grosor y color gris:
https://www.w3schools.com/css/css_border.asp
Bordes redondeados:
https://www.w3schools.com/css/css3_borders.asp
https://lenguajecss.com/css/modelo-de-
cajas/border-radius/
Bordes múltiples (diferentes)
Hasta ahora, sólo hemos utilizado un parámetro en cada propiedad, lo que significa que
se aplica el mismo valor para cada borde de un elemento (borde superior, borde derecho,
borde inferior y borde izquierdo). Sin embargo, podemos especificar uno, dos, tres o
cuatro parámetros, dependiendo de lo que queramos hacer:
De la misma forma, podemos hacer exactamente lo mismo con las propiedades border-
width (respecto al ancho del borde) y border-style (respecto al estilo del borde).
Teniendo en cuenta esto, disponemos de mucha flexibilidad a la hora de especificar
esquemas de bordes más complejos.
div { CSS
border-color: red blue green;
border-width: 2px 10px 5px;
border-style: solid double solid;
}
En relación al modelo de cajas, con la propiedad border-width pasa exactamente lo mismo que
con margin y padding, actuando en este caso en relación al grosor del borde de un elemento
(puedo determinar entre 1 y 4 parámetros).
Atajo: Bordes
Con tantas propiedades, para hacer algo relativamente sencillo nos pueden quedar varias
líneas de código complejas y difíciles de leer. Al igual que con otras propiedades CSS,
podemos utilizar la propiedad de atajo border, con la que podemos hacer un resumen y
no necesitar indicar múltiples propiedades individuales por separado, realizando el
proceso de forma más corta:
div { CSS
border: 1px solid #000000;
}
Bordes específicos
Otra forma, quizás más intuitiva, es la de utilizar las propiedades de bordes específicos
(por zonas) y aplicar estilos combinándolos junto a la herencia de CSS. Para utilizarlas
bastaría con indicarle la zona justo después de border-:
Esto dibujaría sólo un borde inferior negro de 2
div { CSS
píxeles de grosor y con estilo punteado:
border-bottom-width: 2px;
border-bottom-style: dotted;
border-bottom-color: black;
}
https://www.w3schools.com/css/css3_box-sizing.asp
El punto (pt) es una medida que puede utilizarse para documentos CSS en los que se fija el tamaño
de las fuentes en medios impresos.
Medidas relativas
La unidades relativas, a diferencia de las absolutas, es que no están completamente
definidas, ya que su valor siempre está referenciado respecto a otro valor (resolución,
densidad de pantalla, etc.). Son las más utilizadas por la flexibilidad con la que se adaptan
a los diferentes medios y su potencia.
Entonces, em es relativa respecto del tamaño de letra del elemento. Por defecto el
tamaño de letra debería ser de 16px que equivaldrían a 1em pero, por ejemplo, si le
diéramos un font-size de 10px al body, 1em equivaldría a 10px. Siempre va a variar
dependiendo cual es el tamaño del elemento padre. 1.2em seria 20% más que el tamaño
de su elemento padre.
Existen ciertas unidades menos utilizadas dentro de las unidades relativas, como por
ejemplo las unidades ex o ch. Mientras que la unidad em es el tamaño de la fuente
establecida por el navegador del usuario, la unidad ex es la mitad del tamaño de la
fuente establecida por el navegador del usuario, por lo que se cumple que 1ex es igual a
0.5em.
Esto nos da una ventaja principal considerable: Si queremos cambiar el tamaño del texto
en general, sólo tenemos que cambiar el font-size de la pseudoclase :root, puesto que el
resto de unidades son factores de escalado y se modificarán todas en consecuencia al
cambio del :root.
Medidas flexibles
La unidades flexibles son todas relativas a las dimensiones tanto del ancho o alto del
viewport (región visible de la página Web en el navegador, no el body) en el que se
visualice nuestra página, ya sea un dispositivo móvil o de escritorio.
• vw: viewport width, esta medida es relativa al 100% del viewport. Lo que quiere decir
que si decimos que un div debe medir 50vw, es equivalente al 50% del ancho total del
viewport.
• vh: viewport height, va a ser un porcentaje relativo a la altura total del viewport.
Entonces, si definimos qué un div mide 50vh y el alto del viewport es 800px, nuestro
div medirá 400px.
Las propiedades top, bottom, left y right sirven para mover un elemento desde la
orientación que su propio nombre indica hasta su extremo contrario. Esto es, si utilizamos
left e indicamos 20px, estaremos indicando mover desde la izquierda 20 píxeles hacia la
derecha.
Posicionamiento relativo
Si utilizamos la palabra clave relative activaremos el modo de posicionamiento relativo,
que es el más sencillo de todos. En este modo, los elementos se colocan exactamente
igual que en el posicionamiento estático (permanecen en la misma posición), pero
dependiendo del valor de las propiedades top, bottom, left o right variaremos
ligeramente la posición del elemento.
Ejemplo: Si establecemos left:30px, el elemento se colocará 40 píxeles a la derecha desde la
izquierda donde estaba colocado en principio, mientras que si especificamos right:30px, el elemento
se colocará 30 píxeles a la izquierda desde la derecha donde estaba colocado en principio.
Realmente, este tipo de posicionamiento coloca los elementos utilizando como punto de
origen el primer contenedor con posicionamiento diferente a estático.
Por ejemplo, si el contenedor padre tiene posicionamiento estático, pasamos a mirar el
posicionamiento del padre del contenedor padre, y así sucesivamente hasta encontrar un
contenedor con posicionamiento no estático o llegar a la etiqueta <body>, en el caso que
se comportaría como el ejemplo anterior.
Posicionamiento fijo
El posicionamiento fijo es hermano del posicionamiento absoluto. Funciona
exactamente igual, salvo que hace que el elemento se muestre en una posición fija
dependiendo de la región visual del navegador. Es decir, aunque el usuario haga scroll y
se desplace hacia abajo en la página web, el elemento seguirá en el mismo sitio
posicionado.
Ejemplo: Si establecemos top:0 y right:0, el elemento se colocará justo en la esquina superior
derecha y se mantendrá ahí aunque hagamos scroll hacia abajo en la página.
Posicionamiento sticky
El posicionamiento sticky se suele utilizar cuando queremos que un elemento se
posicione en un lugar específico de forma fija («sticky», pegajoso), como por ejemplo,
cuando al hacer scroll llegamos a un elemento y queremos que ese elemento se quede
fijo en la parte superior mientras continuamos haciendo scroll. No es como el fijo ya que
no queda en una posición fija, sino que flota respecto del fondo y se queda adherido a la
parte superior.
Material extra:
Propiedad position CSS HTML Layout Video extra con un ejemplo de posicionamiento
Profundidad (z-index)
La propiedad z-index establece el nivel de profundidad en el que está un elemento sobre
los demás. De esta forma, podemos hacer que un elemento se coloque encima o debajo
de otro, superponiéndose o quedando “apilados”. Los elementos con mayor valor z-index
van a cubrir a aquellos con menor valor, para lo cual hay que indicar un número que
representará el nivel de profundidad del elemento. Los elementos un número más alto
estarán por encima de otros con un número más bajo, que permanecerán ocultos detrás
de los primeros.
z-index: auto | number | initial | inherit;
Los niveles z-index, así como las propiedades top, left, bottom y right no
funcionan con elementos que estén utilizando posicionamiento estático.
Deben tener un tipo de posicionamiento diferente a estático.
https://www.w3schools.com/cssref/pr_pos_z-index.asp
Juegos para aprender CSS
• http://cssgridgarden.com
• http://www.flexboxdefense.com
• https://flexboxfroggy.com
• https://cssbattle.dev
• https://flukeout.github.io/