Todo lo que aprendí de CSS

Aca voy a escribir todo lo que voy aprendiendo de CSS.
Luego de escribir mucho de "TODO LO DE HTML", me cansé y luego de 2 años restomé el curso de programación, y ahora tengo 15 años.

Si ya sabes algo de programación esta página la puedes usar cuando no recuerdes como hacer algo.

(idea para cuando edite esto en css: Hacer que los ejemplo esten en una seccion aparte. Tipo al lado pero tengas q tocar para ir a ellos y les direccione a otra pestaña, esto tiene que estar bien representado para que lo entiendan tipo con imagenes, capturas, capaz videos y todo)(otra idea q se me ocurrio es hacer lo mismo q el ejemplo pero con palabras distintas, tipo si no entendió algo explicarlo diferente)

TODO LO QUE APRENDÍ DE CSS

ESTRUCTURA:


selector { propiedad: valor; }
siempre termina con ;

SELECTOR:


Universal; como dice la palabra, es para seleccionar todo. Y se usa *

De tipo; es para seleccionar por separado un grupo, por ej: H1

Clases; es el que mas se usa y es para cambiar el nombre a un grupo, se pone class="el nombre que queres" en el elemento que queres cambiar, y se usa con .el nombre que pusiste.

Id; es casi lo mismo que Clases, se pone id="el nombre que queres" en el elemento que queres cambiar, y se usa con #el nombre que pusiste.

Por atributo; es casi lo mismo que los otros 2 anteriores, se pone [elnombrequequieras="otronombrequequieras"] en el elemento que queres cambiar, y se usa con lo mismo.

Descendiente; es como mas específico, no se pone nada, y se usa por ej: [] = <> [h2][p] mi primer h2 con ccs [p][h2] en este caso se usa con h2 p { color: red }
Pseudo-clases; es como "de tipo" pero cuando pasas el mouse por encima se pone de color, no se pone nada, y se usa con el elementoquequeres:hover
El mejor Selector para usar en toda la página es class ya que si lo usas en todos estarias creando un novel universal del mismo valor por asi decirlo.
Para abreviar y ahorrar espacio cuando queremos las mismas propiedades para dos selectores distintos, puedes poner: selector, selector{ propiedad: valor;}

ESPECIFIDAD

La especifidad es el nivel de poder que tiene cada selector:
especifidad
El ESTILO EN LINEA se pone style="color:red" en el elemento que necesites y no se usa nada.
EL !IMPORTANT se usa a la derecha del color que pusiste, por ej: h1 {color: blue !important}

UNIDADES


Las unidades se ponen en el VALOR.
Px (pixeles), cm (centimetros), mm (milimetros), etc.
Pero tambien hay medidas relativas, las cuales se adaptan a mobile (celular o tablet):
Em= 16px
Vw: es el porcentaje de la pantalla, por ej: 50vw (width) es el 50 porciento de la pantalla de largo.
Vw: es el porcentaje de la pantalla, por ej: 50vh (height) es el 50 porciento de la pantalla de alto.

PROPIEDADES DE LA TIPOGRAFÍA (letra)

Font-size: el tamaño de la letra
Font-family: la fuente de la letra, osea el estilo de la tipografía.
Line-height: es el tamaño del espacio invisible de arriba y de abajo de la letra.
Font-weight: es el grosor de la letra



DISPLAY

Hay elementos en linea y elementos en bloques, estos últimos ocupan todo el largo de la pantalla (h1,h2,h3,h4,p,form,etc). En cambio los elementos en linea solo ocupan su espacio, osea mucho menos (b,span). Esto se puede cambiar con las prodiedad display:
Display:inline: es en linea, puede modificar los elementos de bloque a en linea.
Display:block: es en bloque, puede modificar los elementos de linea a bloque.
La ventaja que tiene los elementos en bloque es que pueden usarse por ej; width y height, en cambio los elementos en linea no.
Display:inline-block: sirve para fucionar block e inline, ya que cuando ponemos una caja como "display:inline" esta no le importará el Height y wigth, lo cual se convertiría su tamaño a el del contenido. Para que no pase eso se usa display:inline-block, (las cajas se pondran una al lado de la otra con su respectivo width y height).

FLEX BOX

Luego se creó Flex que remplazó estas 3 anteriores; es una propiedad de caja que tiene muchas funciones que te facilitan mucho mas el código:
Display: Flex: si pondrias dos cajas con texto con la propiedad "display block" esta se pondria una abajo de la otra, pero con display felx se podrian una al lado de la otra. La diferencia de inlineblock es que desbloquea nuevas propiedades y tienen la misma altura las dos cajas, sin importar que una tenga mas contenido que otra, osea se adaptan dependiendo el contenido: ejemplo, excepto que le pongamos una altura y un ancho especifico, en este caso se pondrian tambien una al lado de la otra pero con esas propiedades de altura/ancho. Display flex desbloquea estas nuevas propiedades:
  • flex-direction: estes es la direccion en el que van a ir las cajas, row (horizontales) osea una al lado de la otra, o column (columna) una abajo de la otra.
  • flex-wrap: wrap: las cajas flex son flexibles por asi decirlo, se adaptan a la medida de la pantalla, pero si no queremos que sean flexible osea que se plasten, que tampoco cambien sus propiedades cada ves que se achica el tamaño de la pantalla, se usa flex-wrap; hace que en ves de que se aplastasten (las cajas) al cambiar de pantalla, vayan al reglon de abajo, osea las manda para abajo pero con las mismas propiedades, sin cambiar su tamaño.
  • flex-wrap: nowrap: lo mismo que wrap pero con la diferencia de que cuando se achica la pantalla las cajas no las manda al reglon siguiente, sino que las desaparecen.
  • flex-wrap: reverse: lo mismo que wrap nomas que invertido todo.
  • justify-content: es para aplicarle diferentes margin a todas las cajas en forma horizontal (sobre el eje x), con "center" centras todo el contenido (todas las cajas) en el centro, con "space-around" centras las cajas como margin auto (es lo mismo), osea le pone el mismo margin a todas las cajas, con "space-between" les dá un margin para que todas las cajas esten lo mas separadas posibles, y "space-evenly" les dá un margin para que todas las cajas tengan el mismo espacio entre cada caja, porque no es lo mismo que todas las cajas tengan el mismo espacio entre si que el mismo margin.
  • align-items: posicionas las cajas de diferentes formas sobre el eje y, de forma vertical por asi decirlo, con "center" centras las cajas sobre el eje y (no es lo mismo que de forma vertical), osea centras las cajas en el centro del eje y, con "flex-start" manda todas las cajas al principio del eje y y con "flex-end" al final, con
  • align-content: lo mismo que aligns-items, nomas que cuando la pantalla cambia de resolución las cajas se va agrupando organizadamente, en cambio con align-items no. Esto necesita de "flex-wrap: wrap".
  • flex-grow: administra las cajas para que ocupen toda la pantalla, osea que si ponemos 3 cajas una al lado de la otra y le ponemos "flex-grow: 1", cada ves que se agrande o se achique la pantalla se cambiará el tamaño de las cajas, ocupando siempre toda la pantalla, esto pasa si le ponemos "1" a todas las cajas, pero si le ponemos "flex-grow=1" a una caja, esta ocupará la mayor parte posible del ancho de la pantalla. Esto tambien se puede combinar con "min-width", que es el mínimo de ancho que puede tener una caja.
  • flex-basis: es lo mismo que un "width" pero es mejor para usar con flex, tiene mas poder.
  • order: el orden en el que se posicionan las cajas flex, por ejemplo: si una caja le pones "order:1" esta se posicionará primera que las demas. Y si le pondríamos order:2 y haya otras caja, se pondría segunda.

GRID



PROPIEDADES DE CAJAS

Las propiedades mas importantes de una caja son line.height, padding, border y margin. Height y Width: el alto y ancho de la caja.
Padding: este es el espacio que hay entre la letra y la caja, se puede poner padding (solo), padding-top, padding-right, padding-left y padding-bottom, este van acompañadas de una unidad. En esta imagen esta mas claro:
padding Border: es el borde, se pone border: medida estilo color. Por ejemplo: border: 10px solid blue. Hay muchos estilos, entre ellos estan: Solid (solido), dashed (rayas), double (dos lineas fina de borde), groove, inset, outset, ridge, etc. El mas usado es Solid.
Border-radius: es el borde redondeado de una caja.
Outline: lo mismo que border pero no ocupa un ligar real por asi decirlo.
Margin: es la distancia entre las cajas. Tambien existe left, right, bottom y top. Con margin:auto se centra la caja.
Box-sizing: border-box: este hace que se respete la regla del height y width, y no del padding ni del border.
Box-sizing: content-box: hace que lo que dice el height y el width es lo que medirá la caja sin el border, pero si le aplicamos un border, la caja medirá más. Por ej: le ponemos un height y width de 100px, la caja medirá 100x100px, pero si le metemos un border de 10px, tambien la caja medirá 100x100px, pero si le ponemos un box-sizing:content-box esta medirá 110x110px. Box-shadow: Es la sombra, se usa box-shadow: ejex ejey tamañodeldesenfoque borde color. Por ejemplo: box-shadow: 2px 5px 10px 0 red
text-shadow: Lo mismo que box-shadow exepto el borde.

POSITION:


Position:relative: desbloquea 4 propiedades nuevas; top, left, bottom, right y z-index. Estas menos la última son para mover la caja. Y tambien conserva su espasio anterior, osea que cuando le ponemos a una caja top:30px esta se moverá hacia abajo 30px pero reservará su posicion anterior. Top y left tienen la prieridad, son como las que ma valor tienen.
Z-index: este se desbloquea por el position-relative, lo que hace es aplicarle un valor a una caja, la caja que tenga mas valor estará por encima de las de mes valor. Por ejemplo si una caja llamada caja1 le pones 20 de valor de z-index, y a otra le pones 19, la caja1 estará y se verá por encima de la otra.
Position:absolute: es lo mismo que relative exepto que no reserva su lugar o espacio anterior. Por ej: si hay una caja arriba de otra, y la caja de arriba le pones un position-absolute y left 30px, esto lo que hará es mover la caja que estaba abajo a arriba (ya que no reserva ningun lugar) y mover la caja que estaba arriba a la derecha 30px. Si queres que una caja dentro de otra caja grande se mueva al extremo inferior izquierdo de la caja grande, le pones bottom:0, si la quieres al extremo derecho de la caja grande right:0 y asi con las demas, pero si la quieres en el extremo inferior derecho como su posicion por defecto va a ser en el extremo superior izquierdo de la caja le tienes que poner bottom:0 y right:0. Y si la quieres centrar tienes que poner top:0, right:0, left:0, bottom:0 y margin:auto.
Position:fixed: hace que cuando mueves el scroll osea la ruedita del mouse, el texto o caja que tenemos establecido con fixed se fija en un mismo lugar siempre. Y no ucupa espacio en la pantalla, osea que no reserva su espacio anterior ni el actual.
Position:sticky: es una fucion entre position-relative y fixed. Ya que hace la misma funcion que fixed y la misma que position relative, es decir que tiene top,bottom, etc y ocupa un espacio. La unica diferencia es que cuando el scroll pasa donde se sitúa empieza a comportarse como un fixed.

Overflow: esto sirve cuando el contenido sobrepasa su respectiva caja, hay "overflow:auto" detecta cuando sobre pasa el texto de la caja y pone un scroll, tambien está "overflow:scroll" esto pone un scroll aunque no sobrepase el texto de la caja. En una imagen no se puede salir de su respectiva caja, exepto que le pongas position relative, con esto se puede crear un efecto visual muy bueno; con "position:relative" (mueve a la imagen de su caja, con top,left,etc) y "overflow:hidden" (hace que esta imagen se vea por debajo de la pagina cuando no esta en su respectiva caja, es decir se hace invisible).
Float: es parecido a inline-block, se usa cuando queremos hacer lo mismo que en inline-block pero con un titulo(h1), esto quedo en la vieja escuela y no vale la pena usarlo, ya que tendremos un monton de errores con esto. Ahora se usa más Flex y Grid. Un uso muy útil que le podemos dar al float es poniendo "float:left" o right en una imagen dentro de una caja con texto y asi crearíamos este efecto EjemploFLOATesto es cuando queres que poner una imagen dentro de un contenedor (caja) que tiene texto, esto lo que haria es poner la imagen dentro del contenedor apartando al texto que estaba alli a un lado.



PSEUDOELEMENTOS

Los pseudoelementos se ponen luego del selector (osea que se aplica a un elemento), así: "selector::pseudoelemento". Estos no funcionan en inlane.
::first-line: selecciona la primera linea del respectivo elemento (selector). Osea se puede editar el estilo del primer reglon de la pantalla con first-line.
::first-letter: lo mismo que line pero con la primera letra.
::placeholder: Este es para editar el placeholder, para cambiarle su estilo.
::selection: cuando pintamos con el cursor algo escrito en el form, se pinta el fondo de azul y las letras blancas, esto se puede editar con "selection". Por ejemplo:

::before: esto escribe y edita textos antes de un elemento, es decir si tu tienes un elemento ya sea un texto que dice "hola", before en este caso escribirá lo que le digas antes que el "hola". Debajo del "::before" osea en la propiedad, "se escribe content:lo-q-quieras-q-aparezca-antes-del-elemento". El before no tiene una hitbox por asi decirlo, no se le puede pintar con el cursor, ya que no llega a ser un elemento, por eso es un pseudo-elemento.
::after: lo mismo que "before" pero despues del texto.



PSEUDOCLASES

Las pseudoclases se ponen luego del selector, y con un dos puntos, así: "selector:pseudoclase".
:hover: edita el estilo de un hover, un hover funciona cuando pasamos el cursor por encima de un elemento que tiene hover cambiará el estilo. Lo mas recomendable es usarlo con el elemento transition y cambiandole de medida (height y width) al hover. :link: edita los elementos de links que no estan visitados, osea si un link no esta clickeado adquiere este estilo. Si no existe el link no cuenta.
:visited: lo contrario que ":link", cambia los estilos ya visitados.
:active: si se mantiene apretado el click del cursor en un elemento "active", cambiará de estilo.
:focus: si un elemento esta seleccionado osea clickeandolo, cambia su estilo (focus). Esto se usa mas que nada con input, form.
:lang: casi ni se usa, modifica el estilo de un elemento que está en el idioma que le dices , por ejemplo: español, entonces todos los elementos que están en español adquirirán el estilo puesto.



IMG

OBJECTS FIT

Los objets-fit es una propiedad que ajusta la imagen a su caja, de diferentes formas:
Por defecto cuando queres poner una imagen dentro de una caja que es de diferente medida la imagen se estirará hasta quedar de la misma medida que la caja, esto queda muy feo, por eso es que existen los objets-fit:
"object-fit: contain": la img (imagen) se ajusta al tamaño de la caja pero con su forma, lo cual si la caja tiene un tamaño rectangular y la imagen es cuadrada, va a sobrar espacio.
"objets-fit: cover": la img se ajusta a la caja sin dejar espacio, osea si la caja es rectangular y la img es cuadrada, "cover" recortará la img para que quede rectangular.
"objets-fit: none": aplica siempre el tamaño real de la img sin importar el tamaño de la caja. Si la img es de 300x300px y la caja de 400x400px la img se quedará en 300x300px. Este no conviene usarlo.
"object-fit: scale-down": agarra la resolución que mas le conviene entre "contain" y "none", y aplica la que menos espacio en blanco queda.
"object-position": existe top, bottom, left, right y medidas. Sirven para posicionar a la imagen con la propiedad "cover" dentro de la caja, por ejemplo: cuando la caja es cuadrada y la imagen rectangular con la propiedad "cover", la imagen estará recortada arriba y abajo para que no haya espacios en blanco, pero si uno quiere que se vea la parte de arriba de la imagen se pone "object-position:top", así se vería mas la parte de arriba y menos la parte de abajo de la imagen.



Cursor

Cursor: con la propiedad cursor puedes editar el estilo del cursor cuando esta encima de la caja que vamos a ponerle la propiedad (cursor), en esta pagina estan todos los tipos de cursores: TiposDeCursores



Colores

Hay varias maneras de llamar a los colores, estas dos son las mejores y las que mas se usan:
Hexadecimal: se usa con "#", por ejemplo: "color: #e12f". Pagina donde buscar colores hexadecimal: COLORES-HEXADECIMAL, tambien hay una pagina muy util para detectar el colore de una imagen: DETECTA-COLORES
Rgb: se usa con "rgb (n,n,n)", por ejemplo: "rgb (255,255,0)". Página donde buscar colores rgb: COLORES-RGB, tambien hay una pagina muy util para detectar el colore de una imagen: DETECTA-COLORES
Rgba: lo mismo que rgb, nomas agrega un nuevo numero que es la opacidad del color (es como lka función opacity), por ejemplo: "background: rgba (213,654,153,.5)", se pone .yelnumeroquequieraslaopacidad (menor el numero mas opacidad).



MENU RESPONSIVE

Un menu responsive es un menu para resoluciones mas pequeñas que las de un escritorio, como las del celular.
Para hacer esto se pone en css " @media only sreen and (max-width: 500px) { el menu responsive }". Aca estamos diciendole que si la pantalla pasa a una resolución menor que 500px de ancho pasa los estolos que le digamos.
La diferencia de un menu de escritorio y uno de celular es que este ultimo tiene resoluciones mas pequeñas lo cual no entran todo lo del escritorio, por esto es que se usa un botom que usualmente tiene tres rayas "", este se usa para cuando lo toquen salga el menu desplazado.
¿Como hacer que cuando toques se desplace el menu?
Tienes que poner en el menú, un position-relative que tenga mucho top como para que no esté en la pantalla, luego pones ".laclaseqlepusistealMENURESPONSIVE:hover > .laclaseqlepusistealoqquieresqsedesplaceoseaelDIVDONDEESTALOSLINKS { top: 0; transition: 0.5s; }"
Esto lo que hace es que si el usuario toca el menú, que es donde va a estar el , lo que pondras en los parentesis {} es lo que hará la clase que pusiste detras del ">" osea el div donde está los href.

RESPONSIVE DESIGN

@media: es lo mas importante todos si queres un menú responsive (mobile y otras resoluciones).
@media es como un Si pasa esto... hace esto (una acción), es un SI, es la clave para todo responsive, ya que si quieres hacer una web aplicada a mobile la necesitaras.
Lo que más se usa es @media screen and (la condición q qres) {
.las clases q qres modificar{
y la acción o el estilo q qres cambiar

}
Por ejemplo: @media screen and (max-width: 600px) {
.div-inicio{
background-color: red
}
}
Aquí estamos diciendole que SI la screen pasa los 600px como máximo hará que .div-inicio cambiara su fondo a rojo.

Tambien existe la función AND y OR que se usan al lado de (la condicion).
OR se usa asi: "(la condicion) OR (otra condicion)", esto esta diciendo que para que pase la accion (que no esta puesta en este ejemplo) se necesita que se haga una de las 2 acciones.
y AND se usa: "(la condicion) AND (otra condicion)", aqui se tiene que cumplir las 2 condiones para que pase la acción.