08 CSS
08 CSS
Python
Codo a Codo 4.0
CSS
Parte 4
Selectores avanzados
Permiten ir más allá de la selección básica de los elementos. Utilizan “combinadores”,
signos gráficos que establecen la relación entre los elementos y permiten hacer una
selección específica. Tenemos varios métodos para seleccionar elementos
dependiendo de la estructura del documento HTML:
Agrupación de selectores
Utilizaremos la , (coma) cuando varios elementos comparten una serie de declaraciones iguales. En
lugar de crear varias reglas iguales en las que sólo cambia el selector, se crea una única regla con todos
los selectores necesarios para apuntar a los distintos elementos. Esto ahorra tiempo de descarga:
https://www.w3schools.com/css/tryit.asp?filename=trycss_syntax_universal
El selector universal no solamente permite seleccionar todos los elementos de un documento HTML,
sino también aquellos que pertenezcan a un id o clase específica. En el ejemplo se observa cómo se
seleccionan todos los elementos contenidos en un div cuyo id es ‘menu’.
Para ampliar:
https://www.w3.org/wiki/CSS_/_Selectores_CSS
https://lenguajecss.com/css/selectores/selectores-avanzados/
https://www.w3schools.com/cssref/css_selectors.asp
Pseudoclases
Una pseudoclase es un selector que marca los elementos que están en un estado
específico o tienen un comportamiento determinado. Todas las pseudoclases son una
palabra precedida por dos puntos y todas se comportan del mismo modo. Seleccionan
un fragmento del documento que está en un estado determinado y se comportan
como si se hubiera añadido una clase a su HTML.
:first-child:
Se utiliza para representar al primer elemento entre un grupo de elementos hermanos dentro de un
contenedor, es decir “el primer hijo de su padre”.
https://www.w3schools.com/cssref/tryit.asp?filename=trycss_sel_firstchild
:last-child:
Se utiliza para representar al último elemento entre un grupo de elementos hermanos dentro de un
contenedor, es decir “el último hijo de su padre”.
https://www.w3schools.com/cssref/tryit.asp?filename=trycss3_last-child
:nth-child(n):
El selector coincide con cada elemento que es el n- ésimo hijo, independientemente del tipo, de su
padre. n puede ser un número, una palabra clave o una fórmula.
https://www.w3schools.com/cssref/tryit.asp?filename=trycss3_nth-child
:nth-child(n): Otros ejemplos
Tomemos como ejemplo la siguiente lista:
::first-line:
Se utiliza para darle estilo a la primer línea de un párrafo:
https://www.w3schools.com/cssref/tryit.asp?filename=trycss_sel_firstline
::selection:
Agrega estilos a una parte del documento que ha sido resaltada por el usuario:
https://www.w3schools.com/cssref/tryit.asp?filename=tr
ycss3_selection
::before y ::after:
::before agrega contenido antes del contenido, mientras que ::after lo añade después del contenido:
CSS
https://www.w3schools.com/cssref/tryit.asp?filename=trycss_sel_after
https://www.w3schools.com/cssref/tryit.asp?filename=trycss_sel_before
Funciones 2D
Existen múltiples propiedades CSS que ofrecen
diferentes funcionalidades de transformación en
dos dimensiones.
Translaciones (translate)
https://www.w3schools.com/css/tryit.asp?filename=trycss3_transform_translate
Escalado (scale)
Las funciones de escalado realizan una transformación en la que aumentan
o reducen el tamaño de un elemento, basándose en el parámetro indicado,
que no es más que un factor de escala:
Con transform: rotate(5deg) realizamos una rotación de 5 grados del elemento sobre
si mismo. Utilizando rotateX() y rotateY() podemos hacer lo mismo respecto al eje X o
el eje Y respectivamente.
https://www.w3schools.com/css/tryit.asp?filename=trycss3_transform_rotate
Deformaciones (skew)
Por último, las funciones de deformación establecen un ángulo para
torcer, tumbar o inclinar un elemento en 2D.
Aunque la función skew() existe, no debería ser utilizada, ya que está marcada como
obsoleta y serán retiradas de los navegadores en el futuro. En su lugar deberían
utilizarse skewX() o skewY().
https://www.w3schools.com/css/tryit.asp?filename=trycss3_transform_skewx
div { CSS
transform: rotate(5deg);
transform: scale(2,2); /* Sobreescribe la anterior */
}
Para evitar este comportamiento, una forma sencilla se basa en emplear múltiples
transformaciones separándolas mediante un espacio. En el siguiente ejemplo, aplicamos
una función de rotación, una función de escalado y una función de traslación de forma
simultánea:
CSS
div {
transform: rotate(5deg) scale(2,2) translate(20px, 40px);
}
Transiciones
Las transiciones CSS le permiten cambiar los valores de una propiedad, durante un
período determinado. Se basan en un principio muy básico: conseguir un cambio de
estilo con un efecto suavizado entre un estado inicial y un estado final.
Para crear un efecto de transición, debemos especificar dos cosas:
• la propiedad CSS a la que desea agregar un efecto (¿qué propiedad modifico?)
• la duración del efecto (¿durante cuánto tiempo?)
Las propiedades relacionadas que existen son las siguientes:
transition-property: Se utiliza para especificar la propiedad a la que afectará la
transición. Podemos especificar la propiedad concreta (width o color, por ejemplo) o
simplemente especificar all para que se aplique a todos los elementos con los que se
encuentre. Por otro lado, none hace que no se aplique ninguna transición.
(continúa….)
Los valores que puede tomar la propiedad son los siguientes:
Una función de tiempo linear siempre es constante, mientras que ease comienza
suavemente, continua de forma más rápida y termina suavemente de nuevo. Ease-in y
ease-out son variaciones que van más lento al principio o al final, y ease-in-out una
mezcla de las dos.
Encontramos también la función Cubic-Bezier() que nos permite configurar con más
detalle la transición.
La función de tiempo Cubic-Bezier()
Fuente: https://lenguajecss.com/css/animaciones/transiciones/
https://www.w3schools.com/css/css3_transitions.asp
(se recomiendan especialmente los últimos ejemplos que son más completos)
Animaciones
Una animación permite que un elemento cambie gradualmente de un estilo a otro.
Podemos cambiar tantas propiedades CSS como deseemos, tantas veces como
deseemos.
Las animaciones amplían el concepto de transiciones convirtiéndolo en algo mucho
más flexible y potente, partiendo del mismo concepto de realizar cambios en ciertos
estados inicial y final pero incorporando más estados, pudiendo realizar cambios desde
un estado inicial, a un estado posterior, a otro estado posterior, y así sucesivamente.
Además, esto será posible de forma automática, sin que el usuario tenga que realizar
una acción concreta.
Para utilizar la animación CSS, primero debemos especificar algunos fotogramas clave
(@keyframes) para la animación, que contendrán los estilos que tendrá el elemento en
determinados momentos. Además tendremos que utilizar las propiedades de las
animaciones, que definen el comportamiento de la misma.
Propiedades de animación CSS
Para definir dicho comportamiento necesitamos conocer las siguientes propiedades,
que son una ampliación de las transiciones CSS:
Por defecto, cuando se termina una animación que se ha indicado que se reproduzca sólo
una vez, la animación vuelve a su estado inicial (primer fotograma). Mediante la propiedad
animation-fill-mode podemos indicar que debe mostrar la animación cuando ha
finalizado y ya no se está reproduciendo; si mostrar el estado inicial (backwards), el estado
final (forwards) o una combinación de ambas (both).
La propiedad animation-play-state nos permite establecer la animación a estado de
reproducción (running) o pausarla (paused).
Atajo: Animaciones
Nuevamente, CSS ofrece la posibilidad de resumir todas estas propiedades en una
sola, para hacer nuestras hojas de estilos más específicas. El orden de la propiedad de
atajo sería el siguiente:
div { CSS
/* animation: <name> <duration> <timing-function> <delay>
<iteration-count> <direction> <fill-mode> <play-state> */
animation: changeColor 5s linear 0.5s 4 normal forwards running;
}
Consejo: Mucho cuidado al indicar los segundos en las propiedades de duración. Al ser una unidad
diferente a las que solemos manejar (px, em, etc...) hay que especificar siempre la s, aunque sea un
valor igual a 0.
Fotogramas (keyframes)
Para definir los fotogramas de una animación utilizaremos la regla @keyframes, la
cual es muy sencilla de utilizar y se basa en el siguiente esquema:
En primer lugar elegiremos un nombre para la animación (el cual
utilizamos en el apartado anterior, para hacer referencia a la
animación, ya que podemos tener varias en una misma página),
mientras que podremos utilizar varios selectores para definir el
transcurso de los fotogramas en la animación.
.animated { CSS
animation:
moveRight 5s linear 0, /* Comienza a los 0s */
lookUp 2.5s linear 5s, /* Comienza a los 5s */
moveLeft 2s linear 7.5s, /* Comienza a los 7.5s (5 + 2.5) */
dissapear 2s linear 9.5s; /* Comienza a los 9.5s (2 + 7.5) */
}
En este caso, lo que hemos hecho es aplicar varias animaciones a la vez, pero
estableciendo un retardo (cuarto parámetro) que es la suma de la duración de las
animaciones anteriores. De esta forma, encadenamos una animación con otra.
Para seguir investigando:
https://www.w3schools.com/css/css3_animations.asp
(se recomiendan especialmente los últimos ejemplos sobre movimiento de elementos)
Librería de animaciones Animate.css
• Podemos utilizar Animate.css para dar dinamismo a nuestro contenido. Link:
https://animate.style/
• En pocos pasos se pueden agregar animaciones CSS3 a cualquier elemento con esta
sencilla librería.
• En la creación de cualquier contenido web puede resultarnos interesante incorporar
animaciones que nos ayuden a mejorar la experiencia del usuario durante la interacción
con el contenido.
• Permite disponer de una gran variedad de animaciones CSS3 sin necesidad de crearlas
nosotros mismos.
• Esta librería permite conseguir que el contenido sea más atractivo y dinámico.
Más información:
• Typical Device Breakpoints: click aquí.
• How to use CSS breakpoints to create <> Ver ejemplo breakpoints.html
responsive designs: click aquí.
Objetos anidados (Nested Objects)
¿Recuerdan la posición relativa? Tener muchos
objetos que dependan de otros puede ser difícil de
controlar, sin embargo, agruparlos en contenedores
nos puede simplificar las cosas.
¿Por qué usamos contenedores? Porque a la hora de
pensar contenido responsive nos va a facilitar
posicionar un grupo de elementos en otro lugar.
Bitmaps vs Vectors
• Bitmaps: JPG, PNG, GIF. Recomendadas para
muchos detalles y efectos.
• Vectors: SVG (gráficos basados en vectores
escalables), si voy a mostrar un ícono uso Icon
Fonts, que son mas livianos, pero algunos
exploradores viejos no los soportan.
div {
background: blue;
color: white;
margin: 1px;
}
Con esto observaremos que en nuestro navegador nos aparecen 3 cajas azules colocadas en
vertical (una debajo de otra) que cubren todo el ancho disponible de la página. Esto ocurre
porque la etiqueta <div> es un elemento en bloque, o lo que es lo mismo, que tiene un tipo
de representación block por defecto. Cada etiqueta HTML tiene un tipo de representación
concreta.
Sin embargo, este comportamiento de elementos puede cambiarse con la propiedad CSS
display. Tan sencillo como añadir display: inline en el ejemplo anterior y veremos como
pasan a ser 3 cajas azules colocadas en horizontal (una al lado de la otra) que cubren sólo el
ancho del contenido de cada una. Ahora los <div> de esa página son elementos en línea (el
tipo de representación visual que tienen los <span>).
Otros tipos de display
A medida que vamos cambiando el tipo de representación de estos elementos, nos damos
cuenta que es insuficiente para realizar tareas y vamos necesitando más tipos de caja.
Vamos a rellenar un poco más la tabla, con las características más importantes de las opciones
que puede tomar la propiedad CSS display:
Ocultar elementos
En la lista anterior, falta un valor de la propiedad display. Mediante la mencionada propiedad,
es posible aplicar un valor none y ocultar completamente elementos que no queramos que se
muestren, los cuales desaparecen por completo. Es muy útil para hacer desaparecer
información cuando el usuario realiza alguna acción, por ejemplo.
No obstante, también existe una propiedad CSS llamada visibility que realiza la misma acción,
con la ligera diferencia de que no sólo oculta el elemento, sino que además mantiene un vacío
con el mismo tamaño de lo que antes estaba ahí. Dicha propiedad visibility tiene los siguientes
valores posibles:
Utilizar visibility:hidden es muy interesante si queremos que un elemento y su contenido se
vuelva invisible, pero siga ocupando su espacio y así evitar que los elementos adyacentes se
desplacen, lo que suele ser un comportamiento no deseado en algunas ocasiones cuando se
aplica display: none.
Fuente: https://lenguajecss.com/css/maquetacion-y-colocacion/tipos-de-elementos/
Media Queries
Las reglas media queries (también denominadas MQ) son un tipo de reglas de CSS3
que permiten crear un bloque de código que sólo se procesará en los dispositivos que
cumplan los criterios especificados como condición.
Con media queries puede definir estilos completamente diferentes para diferentes
tamaños de navegador.
Para ampliar:
https://www.w3schools.com/css/css_rwd_mediaqueries.asp
https://www.w3schools.com/cssref/css3_pr_mediaquery.asp
https://lenguajecss.com/css/responsive-web-design/media-queries/
Media Queries | Tipos de medios
Recordemos que con el siguiente fragmento de código HTML estamos indicando que
el nuevo ancho de la pantalla es el ancho del dispositivo, por lo que el aspecto del
viewport se va a adaptar consecuentemente:
Ancho: 750 px
Ancho: 1200 px
Media Queries | Ejemplos explicados
media-query-2.css
<div class="header">
<div class="row">
<div class="row">
<div class
="aside">
<div class="footer">