Curso Gratuito: ¿Construir Un Blog Desde Cero ??
de ZAYDEK
HASTA
Podría ser más fácil de lo imaginado
Antes de llegar al artículo, solo quiero compartir que estoy creando un producto, y me encantaría recopilar algunos datos sobre cómo servir mejor a los desarrolladores web. Creé un breve cuestionario para revisar antes o después de leer este artículo. Por favor, échale un vistazo – ¡gracias! Y ahora, de vuelta a nuestra programación regular.
Si es como yo, está interesado en la web y su alcance abrumador, pero también está inundado con el desorden de información que está aprendiendo HTML y CSS. La cosa es que estos lenguajes son diferentes a otros dominios, como Procesadores de Texto y Lenguajes de Programación. La web es otro mundo, y no es la cosa más bonita que hay.
Habiendo aprendido algo de web, estoy aquí para dar un suave empujón de aliento, porque, con un poco de orientación, estos dominios pueden ser mucho más fáciles de lo que imaginas. Sigue leyendo, y construiremos un hermoso blog desde cero. También aprenderemos algo de Cuadrícula CSS, Flexbox y Diseño Responsivo.
El objetivo es hacer por ti lo que he hecho por mí mismo; aprender HTML y CSS desde los primeros principios.
También enseñé un curso gratuito de HTML/CSS en Scrimba donde enseño cómo construir un hermoso blog desde cero. Haga clic aquí para inscribirse! ?
Scrimba.com es una plataforma front-end interactiva donde los sitios web se graban como eventos, no como videos, y se pueden editar. ?
Entonces, ¿de dónde viene el HTML?
HTML es un descendiente del primer meta o lenguaje de marcado: GML. Los lectores de la generación del Milenio ahora están descubriendo que GML significa Lenguaje de marcado Generalizado, pero eso no es todo lo que significa. Fueron Charles Goldfarb, Edward Mosher y Raymond Lorie quienes crearon lo que ahora conocemos como meta o lenguaje de marcado en IBM. Y en 1996, Charles Goldfarb escribió:
» Le di a GML su nombre actual para que nuestras iniciales siempre demostraran dónde se había originado. Una de las feas verdades de la transferencia de tecnología es que los desarrolladores tienden a estar agradecidos por el trabajo de investigación cuando se reciben por primera vez, y prácticamente ajenos a él al final de un largo ciclo de desarrollo
— Charles Goldfarb, en 1996
GML más tarde se estandarizó, convirtiéndose así en SGML. Luego, Tim Berners-Lee, que trabajaba en el CERN, tomó prestado el ML de SGML (no, no aprendizaje automático, o como lo llamen los hipsters) para crear HTML, donde HT significa hipertexto.
Whoa, palabra genial. Y según tengo entendido, tiene raíces en un entorno de creación interactivo llamado HyperCard, de Bill Atkinson, que trabajó en Apple. Para una exploración más profunda, presento los siguientes videos:
Así que recapitulemos. HTML no solo se apoderó del mundo. De hecho, había todo un mundo antes de HTML. WUT? Lo sé, estoy temblando de shock, pero no había nacido, así que no había un mundo.
Y, HTML le debe mucho a sus predecesores. Como todos nosotros con nuestros padres. Sin embargo, así es como creamos el código a partir del texto. Ahora, en cuatro lecciones de un minuto, enseñaré los conceptos básicos de HTML, CSS y Diseño Adaptable.
HTML y CSS en 4 minutos
Primer minuto: Un sitio web puede entenderse mejor como un árbol web
<html> <head></head> <body></body></html>
Todos los sitios web comienzan su vida como tales. Sin embargo, y esto es terrible, no hay contenido. Sin embargo, comenzamos aquí porque primero necesitamos entender qué es un sitio web. Piénsalo como un árbol, un árbol invertido*, un árbol web. El elemento
html
es la raíz, mientras quehead
ybody
son las primeras ramas de nuestro árbol web:html <- root / \head body <- branches
El elemento
head
(o etiqueta, lo mismo) es para metadatos o información sobre nuestro sitio web. El elementobody
, por otro lado, es para el contenido de nuestro sitio web. Y como CSS es el estilo de nuestro sitio web, va en el elementohead
, mientras que el contenido, como párrafos, videos de gatos ( ≧ ∇ ≦ ), etc., va en el elementobody
.Segundo minuto: los elementos o etiquetas tienen múltiples aspectos
<element><element>value</element><element attribute="value">value</element>
- El primer elemento es un elemento de cierre automático, donde comunicamos algo al navegador, pero también no tiene un valor. Un ejemplo de esto es el elemento
<
br>, que inserta un salto de línea.- El segundo elemento es un elemento común, donde comunicamos un valor como perteneciente a algún elemento. Por ejemplo
<p>hello, worl
d!</p> es el valor «hola, mundo!»como perteneciente al elemento de párrafo.- por Último, tenemos un elemento con un atributo. Y un atributo es lo que suena—¡maldita sea, es un atributo! Le da a un elemento más contexto o significado. Los atributos pueden tener varios valores y los elementos pueden tener varios atributos. Attribute-ception.
<element attribute="value" attribute="value value">value</element>
Ahora, debo mencionar, no creamos los nombres de nuestros elementos HTML. Los tomamos prestados de una lista de más de 100 elementos predefinidos. Por supuesto, esto hace que algunas cosas sean más fáciles, y algunas cosas mucho, mucho más difíciles, como la memorización.
Tercer minuto: Cómo se comunican HTML y CSS
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <style>
selector { property: value; }
</style> </head> <body> <element>value</element> </body></html>
El
!DOCTYPE html
especifica que estamos escribiendo HTML5, como se supone que es para todas las otras versiones de HTML que queremos evitar. Y dado el elemento de cierre automáticometa
con el atributocharset
y el valorUTF-8
, nuestro texto está codificado en Unicode. UTF-8 significa Formato de transformación Unicode… 8. Ahora podemos escribir ????! Una vez, papá decidió enviar mensajes de texto en emoji.\_(ツ) _ /
También agregamos un elemento
style
que es uno de los puntos de entrada disponibles para CSS. Dondeselector
selecciona un elemento y le aplica unproperty
con unvalue
correspondiente. Exploraremos esto y más en el próximo minuto.De nuevo, debo mencionar que no creamos los nombres de nuestras propiedades CSS. Las tomamos prestadas de una lista de algunos cientos de propiedades que están predefinidas. Por supuesto, esto hace que algunas cosas sean más fáciles, y algunas cosas mucho, mucho más difícil, como ____________!
Cuarto minuto: ¡hola, mundo!
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <style>
p { color: green; }
@media (max-width: 8.5in) { p { color: blue; } }@media (max-width: 5.0in) { p { color: red ; } }
</style> </head> <body> <p>hello, world!</p> </body></html>
¡Ya no es terrible nuestro sitio web! Lo que tenemos es «hola, mundo!»en texto verde, y si el ancho de nuestro sitio web se redimensionara a 8.5 pulgadas o menos, se leería en azul, y en 5 pulgadas o menos, en rojo. Aquí, utilizamos consultas de medios para anular CSS en algunas circunstancias, como el ancho de nuestro sitio web.
¿Qué es un Reset y depurador de CSS?
Utilizamos un reinicio para garantizar que nuestro diseño sea coherente y un depurador para exponer inconsistencias.
Necesitamos nuestro reinicio, porque los navegadores son obstinados y establecen algunas propiedades CSS para nosotros que queremos desajustar. Existen reseteos CSS populares, pero haremos los nuestros. Y necesitamos nuestro depurador para mantener el diseño de nuestro sitio web con facilidad.
Podemos crear una carpeta llamada
styles
para alojar nuestro reinicio y depurador:styles/ reset.css debug.css
Y para vincular nuestros nuevos archivos CSS a nuestro
index.html
, agregamos elementoslink
:… <meta charset="UTF-8"> <link rel="stylesheet" href="styles/reset.css"> <link rel="stylesheet" href="styles/debug.css"> <style> …
Nuestro Reset CSS
De las propiedades que queremos desajustar, aquí hay una lista corta:
:root { font: 20px/1.2 sans-serif; }
body, body * { margin: unset; box-sizing: unset; padding: unset; font-size: unset; color: unset; text-decoration: unset;}
Ignorar la línea 1. por ahora, comencemos con
body, body * { … }
donde seleccionamos elbody
y todos los elementos debody
con un*
. El asterisco significa seleccionar todos los hijos. ¿Recuerdas nuestro árbol de la web?html / \head body <- selected / \ \… … p <- selected
body, body * { … }
está seleccionandobody
y-a,
denota y –p
porque es uno de los hijos debody
. Esto se conoce como la relación padre-hijo, dondebody
es el padre yp
es el niño. Y les decimos a esos elementosunset
propiedades comunes. Las propiedades que he elegido son solo una lista corta. Este es un ejemplo de uno de los reseteos CSS más famosos:/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain)*/
html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,b, u, i, center,dl, dt, dd, ol, ul, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td,article, aside, canvas, details, embed,figure, figcaption, footer, header, hgroup,menu, nav, output, ruby, section, summary,time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline;}/* HTML5 display-role reset for older browsers */article, aside, details, figcaption, figure,footer, header, hgroup, menu, nav, section { display: block;}body { line-height: 1;}ol, ul { list-style: none;}blockquote, q { quotes: none;}blockquote:before, blockquote:after,q:before, q:after { content: ''; content: none;}table { border-collapse: collapse; border-spacing: 0;}
¡Caramba! De vuelta a nuestro reinicio. En la parte superior tenemos
:root { font: 20px/1.2 sans-serif; }
. ¿Qué es:root
? ¿Recuerdas nuestro árbol de la web? Es la raíz, en otras palabras, el elementohtml
. Este pseudo-elemento pertenece a una clase especial de elementos conocidos como psuedo-classes, que se pueden usar para organizar y comprender mejor nuestro CSS.¡WAAAIT! ¿No necesitamos un
*
para seleccionar todos los elementos secundarios, de modo que se establezcan sus propiedadesfont
? Bueno, gran pregunta: algunas propiedades, como las propiedades de texto, heredan de sus padres, yfont
lo hace. Así que en su lugar podemos establecerfont
una vez en:root
, que se propaga a todos sus hijos. Propiedad-ception.Nuestro depurador CSS
Un depurador enfatiza el contenido y el borde de los elementos:
body * { color: hsla(000, 100%, 100%, 0.88) !important; background: hsla(210, 100%, 50%, 0.33) !important; outline: 0.25rem solid hsla(000, 100%, 100%, 0.50) !important;}
¡Contemplad! En solo tres líneas, nuestro depurador. Esta técnica inteligente anula tres propiedades comunes:
color
,background
youtline
. Nuestros colores se componen de valoreshsla()
, que es la abreviatura de tono, saturación, luminancia y alfa. Para habilitar nuestro depurador, vinculamos el archivo.Si queremos desactivar nuestro depurador, podemos escribir mal el nombre del archivo para ocultarlo del sistema de archivos de nuestro ordenador, p.ej.:
<link rel="stylesheet" href="styles/-debug.css">
O simplemente borra la línea. ٩ (^^ ^ )
Nuestro depurador utiliza divertidísimos valores
!important
para indicar que bajo ninguna condición se pueden anular estas propiedades. ¿Recuerdas las consultas de medios?p { color: green !important; }
@media (max-width: 8.5in) { p { color: blue; } }@media (max-width: 5.0in) { p { color: red ; } }
Si hubiéramos especificado que nuestro color
p
es!important
, nuestras consultas de medios serían inertes, debido a su menor importancia.Conoce la cuadrícula CSS y Flexbox
Yo diría que antes de CSS Grid y Flexbox, diseñar para la web era el viaje de un héroe.
La cosa es que el diseño web solía ser un malabarismo de hacks en el que engañábamos al navegador para que renderizara nuestros diseños. Esto se está volviendo menos cierto con el tiempo. No soy religioso, pero gracias a Dios.- o, gracias a los ingenieros de navegadores!- por lo tanto, ahora podemos apoyarnos en CSS Grid y Flexbox para iniciar nuestro diseño.
Si no lo sabe, CSS Grid y Flexbox son tecnologías más nuevas incorporadas en los navegadores modernos que sacan al héroe del diseño web. Y CSS Grid y Flexbox son amigos — los usaremos juntos para crear una cuadrícula y elementos flexibles en nuestra cuadrícula.
Nuestra primera cuadrícula: HTML
… <body> <article> <p>ARTICLE</p> </article>
<article> <p>ARTICLE</p> </article> </body> …
Recuerde que nuestro del árbol?
body / \article article / \ p p
Estamos creando un blog, para que cada publicación se pueda considerar como
article
. Y nuestrosarticle
s contienen unp
deARTICLE
, que es otro truco inteligente que podemos usar. Usar el nombre del elemento como valor del elemento para ayudarnos a entender dónde y qué son las cosas. Percepción de valor.Nuestra primera cuadrícula: CSS
… <style>
article { display: grid; grid-template-columns: 1fr minmax(0, 8.5in) 1fr;
height: 11in; /* temp fix */}
article * { grid-column: 2 / 3; }
</style> …
Introduzca la cuadrícula CSS. En primer lugar, seleccionamos el artículo y aplicamos tres propiedades:
display
define el elemento como una cuadrícula,grid-template-columns
plantillas de columnas yheight
simula que cadaarticle
tiene una altura de página. Sin embargo,height
es un código de pegamento y se eliminará.Vamos a centrarnos en las dos líneas más importantes:
article { grid-template-columns: 1fr minmax(0, 8.5in) 1fr; }article * { grid-column: 2 / 3; }
O, en otras ocasiones:
tendrás Tres Columnas,
Cuya Columna central Será Refugio de Tus Hijos.
Primero, si hubiéramos establecido
grid-template-columns
a1fr 1fr 1fr
, dondefr
es la abreviatura de fracción-unidad, nuestras tres columnas se dividirían en tercios. Sin embargo, nuestra columna central tiene un anchominmax
, lo que significa que es sensible. En o menos de8.5in
, nuestra columna central se renderiza a100%
de ancho, y nuestras columnas de la izquierda y la derecha desaparecen, ya que no queda resto.Barra lateral: tenga en cuenta que el diseño adaptable no se limita a consultas multimedia. Este es un ejemplo de donde nuestro diseño es implícitamente receptivo, en lugar de explícitamente receptivo. Este es el mejor tipo de diseño responsivo, porque no está codificado. Y esta es una de las razones por las que CSS Grid y Flexbox son tan potentes.
En segundo lugar, para comunicar que los hijos de
article
pertenecen a la columna central, o comienzan en la segunda columna y terminan en la tercera, configuramosgrid-column
a2 / 3
. Tenga en cuenta la sutil diferencia entregrid-template-column
ygrid-column
, ya sea para columnas de plantilla o columnas de extensión.CSS Grid es genial, y lo es, pero ahora nos apoyaremos en Flexbox para centrar nuestro texto
ARTICLE
. Lo que estamos a punto de hacer es crear una Clase de utilidad, y es otro paradigma para escribir CSS. Aquí, utilizamos el hecho de que los elementos pueden tener atributos de estilo en línea para el elementop
:<p class="debug-center">ARTICLE</p>
¿CSS en HTML?!
(╯°□°)╯︵ ┻━┻
Esto es lo que está pasando: los elementos tienen un atributo de clase. Y podemos usar este atributo no solo para escribir CSS a elementos, sino a un tipo de elemento o clase de elemento. Esto significa que podemos reutilizar clases en varios elementos, independientemente de su semejanza. Por desgracia, nada ha cambiado, también necesitamos crear una clase
.debug-center
en algún lugar de nuestro CSS. ¿Qué tal nuestro depurador:…
.debug-center { display: flex; justify-content: center; align-items: center;}
Nota utilizamos un prefijo
.
para diferenciar las clases de los elementos.Ahora, donde se atribuya un elemento con nuestra clase
debug-center
, su texto se centrará. Primero, establecemosdisplay
aflex
haciendo de cualquier elemento un elemento Flexbox en lugar de un elemento de cuadrícula CSS. Luego configuramosjustify-content
acenter
para centrar horizontalmente yalign-items
acenter
para centrar verticalmente. Aaagh!Imagine esto: usamos Grid para diseñar el diseño de nuestro sitio web, y Flexbox para flexionar los elementos de nuestra grid a una posición deseada.
Iterar nuestra cuadrícula
Tenemos un problema: sin
.debug-center
ARTICLE
abraza las paredes izquierda y derecha. Lo que necesitamos son canalones verticales y horizontales para que nuestro contenido pueda respirar. Aaah. De lo contrario, la lectura se volvería frustrante y conduciría a una mala experiencia de usuario. ヾ (•д*;)Para relleno vertical:
article { padding: 0.5in 0; …}
Y para el relleno horizontal, podríamos usar relleno, y cualquiera de los dos funcionaría:
padding: 0.5in 0.5in;padding: 0.5in;
Sin embargo, queremos que nuestros canales sean receptivos, por lo que usaremos CSS Grid:
article { … grid-template-columns: 1fr 0.5in 7.5in 0.5in 1fr}
Aquí, hicimos tres cosas: 1. definimos nuestras canaletas horizontales para que sean
0.5in
(¡se volverán receptivas, lo prometo!). 2. nuestra columna de contenido pasó de8.5in
a7.5in
, la suma sigue siendo8.5in
, y 3. identificadores inventadosstart
yend
para nombrar el inicio y el final de nuestra columna de contenido.Cuando agregamos nuevas columnas, también necesitábamos actualizar
article *
:article * { grid-column: 3 / 4; }
Pero contar columnas no es lo ideal. En su lugar, usemos nuestros identificadores inventados:
article * { grid-column: start / end; }
Actualizamos nuestra cuadrícula sin interrumpir el flujo de contenido, siempre y cuando continuemos utilizando los identificadores
start
yend
que inventamos.Por último, según lo prometido, necesitamos que nuestras canaletas sean receptivas.
minmax()
por una razón u otra no funciona aquí, así que usaremos consultas de medios:@media (max-width: 8.5in) { article { grid-template-columns: 1fr 5% 90% 5% 1fr; }}
Ahora en o menos de
8.5in
,article
usará%
en lugar dein
para dividir nuestras columnas, y las columnas de la izquierda y la derecha desaparecerán porque, de nuevo, no queda resto. A pesar de todo esto, podríamos haber establecidopadding
a0.5in 5%
para lograr el mismo efecto, entonces, ¿qué da? ¡Sigue leyendo!Iterar nuestra cuadrícula, de nuevo
Para comprender nuestra cuadrícula, usemos imágenes para abarcar columnas, de
100%
a8.5in
a7.5in
en el escritorio, y de100%
a90%
en el móvil. Sin embargo, para la última imagen, la de la izquierda en la parte inferior, necesitamos agregar incluso algunas columnas más a nuestra cuadrícula. AF) UBQWF * VBQPWIFB, ¿tengo razón?No se deje intimidar: la cuadrícula CSS es increíble. Agreguemos dos columnas más:
article { … grid-template-columns: 1fr 0.5in 1.25in 5in 1.25in 0.5in 1fr;}
@media (max-width: 8.5in) { article { grid-template-columns: 1fr 5% 15% 60% 15% 5% 1fr; }}
Dividimos nuestra columna de contenido en tres columnas:
1.25in 5in 1.25in
. También agregamos porcentajes proporcionales para nuestra consulta de medios:15% 60% 15%
. El plan es que el texto abarque nuestra columna de contenido7.5in
original y que las imágenes pequeñas abarquen nuestra nueva columna5in
.Para añadir imágenes, utilizamos el elemento
img
y su atributosrc
– source:… <article> <img class="size-4" src="images/cosmos.jpg"> <img class="size-3" src="images/cosmos.jpg"> <img class="size-2" src="images/cosmos.jpg"> <img class="size-1" src="images/cosmos.jpg"> </article> …
Son locales, es decir, están en nuestra computadora. Y fueron ellos remoto, es decir, en un servidor:
<img src="https://website.com/images/cosmos.jpg">
tenga en cuenta que cada
img
tiene una de cuatro clases:size-*
. Y como queremos más que imágenes, como videos, para abarcar la cuadrícula de nuestro sitio web, es preferible que utilicemos clases para poder reutilizar el CSS. Estas clasessize-*
también son Clases de utilidad, por lo que cambiar el tamaño que queremos es simple.Hagamos que nuestras clases
size-*
abarquen diferentes conjuntos de columnas:.size-1 { grid-column: 4 / 5; }.size-2 { grid-column: 3 / 6; }.size-3 { grid-column: 2 / 7; }.size-4 { grid-column: 1 / 8; }
Lo que falta es que nuestras
img
s no responden. Necesitamos:img.size-1, img.size-2, img.size-3, img.size-4 { width: 100%; }
Debido a que
img
s se renderizan a su tamaño real, por ejemplo, una imagen de 400 × 400 a 400 píxeles, necesitábamos anular ese comportamiento con el nuestro:width: 100%
. Por lo tanto, cuando una imagen se atribuye con una clasesize-*
, puede cambiar el tamaño a las columnas que abarca. Nota: no es necesario establecerheight
.Añadir elementos de texto
Enlaces a sitios web y contenido
Ahora que nos estamos poniendo serios con nuestro
article
, hagamos las cosas formales:… <article></article> …
Ahora cada artículo es enlazable. ¿Enlazable? Bueno-los sitios web son enlaces:
https://website.com/index.html
Y el contenido de nuestro sitio web, por ejemplo
article
s, también se puede vincular:https://website.com/index.html#article
Aquí
article
es el valor de un atributoid
, análogo a vincular una marca de tiempo en un video de YouTube (por ejemplo, este). Mejor que sugerir «comienza en 4 minutos y 7 segundos» o «lee el segundo artículo», podemos enlazar contenido en nuestro sitio web, como una marca de tiempo en un video.Para vincular un sitio web o contenido, utilizamos el elemento
a
y el atributohref
:… <article> <a href="#the-cosmos">The Cosmos</a> </article> …
El texto «El Cosmos» ahora enlaza el inicio del artículo:
#the-cosmos
.Esta idea de enlazar (enlazar sitios web y contenido en sitios web) es uno de los puntos del HTML. HyperCard dominaba esto, pero en lugar de vincular sitios web y contenido, estaba interesado en ideas y asociaciones. En ese momento, era 1987 y HTML se propuso por primera vez en 1989. Vea unos segundos del video que publiqué anteriormente—aquí he vinculado una marca de tiempo:
Elementos de texto
Agreguemos encabezados, una fecha de publicación, texto fuerte y enfatizado y enlaces:
<article>
<h1><a href="#the-cosmos">The Cosmos is all there is</a></h1> <h2>Or ever was, or ever will be</h2>
<time datetime="03-09-2014">MAR. 9, 2014</time> <p><em>A generation ago</em>, the astronomer <a href="https://en.wikipedia.org/wiki/carl_sagan">Carl Sagan</a> stood here and launched hundreds of millions of us on a great adventure the exploration of the universe revealed by science. It's time to get going again. We're about to begin a journey that will take us from the infinitesimal to the infinite, from the dawn of time to the distant future. We'll explore galaxies and suns and worlds, surf the gravity waves of space-time, encounter beings that live in fire and ice, explore the planets of stars that never die, discover atoms as massive as suns and universes smaller than atoms. </p>
<img class="size-4" src="images/cosmos.jpg">
<h3>COSMOS IS ALSO A STORY ABOUT US</h3> <p>It's the saga of how wandering bands of hunters and gatherers found their way to the stars, one adventure with many heroes. To make this journey, we'll need imagination. But imagination alone is not enough because the reality of nature is far more wondrous than anything we can imagine. This adventure is made possible by generations of searchers strictly adhering to a simple set of rules test ideas by experiment and observation, build on those ideas that pass the test, reject the ones that fail, follow the evidence wherever it leads and question everything. <strong>Accept these terms, and the cosmos is yours.</strong> </p>
</article>
Estas son las primeras líneas de nuestro astrofísico personal, Neil deGrasse Tyson, Cosmos 2014: Una odisea del Espacio-Tiempo, una reimaginación del Cosmos original de Carl Sagan de 1980: Un viaje personal. Es ciencia ficción sin la ficción. ¡Y se renovará en 2019!
Anteriormente presentamos algunos elementos:
h1
,h2
,h3
,time
,strong
, yem
.
h1
–h6
los elementos son titulares.- El elemento
time
marca el tiempo de nuestro artículo. Podemos poner lo que queramos para el valor del elemento, porque las computadoras leen el valor del atributodatetime
, que debe ser legible por máquina.- El elemento
strong
es para texto fuerte y el elementoem
es para texto enfatizado. Además, los elementosh*
son fuertes.Tenga en cuenta que los elementos
h*
yp
se rompen de una línea a la siguiente, o se bloquean, mientras que los elementostime
,strong
yem
no lo hacen. Esto se debe a que los navegadores establecen los elementosh*
yp
display
enblock
, y los elementostime
,strong
yem
elementosdisplay
ainline
.Rems y ems
Cuando no es suficiente bloquear elementos de una línea a la siguiente, usamos saltos de línea para que sea más fácil diferenciar los elementos entre sí, no a diferencia del relleno o las canaletas. Podríamos usar elementos
br
aquí, pero es preferible usar CSS extraño sobre HTML extraño.Te mostramos cómo insertar contenido en dos saltos de línea, siguiendo los elementos
h2
yp
:h2, p { margin-bottom: 2.4rem; }
2.4 ¿rem?
¿Recuerdas nuestro reinicio? Configuramos
font
a20px/1.2 sans-serif
. No lo expliqué en ese momento, y debería darme vergüenza, pero2.4
son saltos de dos líneas a1.2
altura de línea, por ejemplo, texto a espacio simple. El texto más legible podría ser1.5
, y el texto a doble espacio podría ser2
.* Ejem * ¿Qué son rems?
* Ejem ejem * ¿Y qué son los ems?
rem
es rootem
y ambos son multiplicadores.1rem
es20px
y1em
esfont-size
del padre. Si hubiéramos definido nuestros saltos de línea enems
, norems
, y establecidoh2
yp
a diferentesfont-size
, ¡sus saltos de línea serían diferentes! Por lo tanto, los saltos de línea consistentes usanrem
s y los inconsistentes usanem
s.Y este es un CSS poderoso para escribir ideas de manera que el diseño esté conectado. Dada esta iluminación, siento que es mucho más sabio pensar en CSS no en reglas sino en relaciones. Por lo tanto, si hacemos un cambio en algún lugar, podemos hacer un cambio en todas partes.
make hacer un cambio en algún lugar
make hacer un cambio en cualquier lugar…
Diseño responsivo
¿Qué pasa si escribimos CSS en
rem
s yem
s, y usamos consultas de medios para cambiarfont-size
de:root
? Entonces todo, y me refiero a todo, se redimensionará proporcionalmente. Podemos ir incluso un paso más allá y tener múltiples consultas de medios para múltiples anchos:@media (max-width: 8.5in) { :root { font-size: 18px; } }@media (max-width: 5.0in) { :root { font-size: 16px; } }
Lo sorprendente de esto es que no solo anulamos una propiedad, sino que anulamos la propiedad para
rem
s yem
s. Ahora podemos escribir CSS que no solo responda, sino que responda a nuestro diseño receptivo. Esta es quizás la frase más importante de todo este post:Podemos escribir CSS que no solo sea responsivo, sino que también responda a nuestro diseño responsivo.
Esto no es solo genial, es cómo debemos escribir CSS. Los sitios web tienden a ser terribles, y creo que se puede reducir a esto: cuando escribimos CSS, debemos escribir en sistemas de diseño y no en código de silo. Cuando usamos
rem
s yem
s en tándem para consultas de medios, es un sistema de diseño y el código no está en silos.Texto de estilo
Para el amor por el estilo, agreguemos algunos:
h1 { font: 700 2.0rem/1.2 …; color: hsl(000, 000%, 33%); }h2 { font: 400 1.5rem/1.2 …; color: hsl(000, 000%, 33%); }time { font: 700 1.0rem/1.2 …; color: hsl(250, 100%, 83%); }h3 { font: 700 1.0rem/1.2 …; color: hsl(250, 100%, 67%); }p { font: 400 1.0rem/1.5 …; color: hsl(000, 000%, 33%); }
Las propiedades pueden tener abreviaturas como hemos visto antes;
padding: 0.5in
, equivalente apadding: 0.5in 0.5in
. Y aquí, usamosfont
para combinarfont-weight
,font-size
yline-height
. Después defont
, tenemoscolor
con valoreshsl
, como valoreshsla
en nuestro depurador.Un problema sin resolver es nuestro elemento
a
. En nuestro reinicio, desactivamoscolor
ytext-decoration
haciendo enlaces indiscriminados desde el texto. Eliminamos estas propiedades porquetext-decoration: underline
es demasiado sutil. Así que así es como podemos darles un fuerte subrayado:a { box-shadow: inset 0 -0.25em hsl(55, 100%, 75%); }
Invertimos
box-shadow
para crear un subrayado que está dentro del elemento. Si hubiéramos establecidoinset
sin un valor negativo, nuestro subrayado sería una línea excesiva. También usamosem
para que el subrayado se escale con sufont-size
. Este es un ejemplo de cuando queremos escalado inconsistente, como se supone que nuestros saltos de línea.
box-shadow
Es mucho más que esto: haga clic para obtener más información.Último paso: gradientes
Wohoo! Todo lo que necesitamos es una señal para nuestros lectores sobre dónde comienza y termina un
article
. Sin eso, los extremos de cadaarticle
se sentirán como una continuación sin fin, lo que conduce a una mala experiencia de usuario. Así que tenemos que dar una pista a nuestros lectores… (◔◔)Lo que propongo es simple: un gradiente que se extiende desde la parte superior de cada
article
hasta la parte inferior de su elementoh2
. Y podemos escribir nuestro gradiente enem
s para que a medida que nuestro sitio web cambie de tamaño, también lo haga nuestro gradiente:article { … background: linear-gradient(hsl(55, 100%, 96%), white 6.83em);}
Aquí hemos definido un degradado de color a blanco, y hemos utilizado
6.83em
para que nuestro degradado no extienda todoarticle
, sino que termine en el equivalente de la parte inferior de nuestro elementoh2
. Sin embargo, el valor exacto depende.Puede hacer cálculos para determinar el tamaño, por ejemplo
6.83em
, pero otra técnica es establecer un tamaño en el color superior, por ejemplohsl(55, 100%, 96%) 6.83em
. Una vez que sea igual o mayor que el tamaño del color inferior, aparecerá como una línea y no como un degradado, por lo que es intuitivo a qué cambiarlo.Felicitaciones ?
¡Felicitaciones! ٩(˘.) You Has entrado en un mundo que necesita desesperadamente mejores diseñadores e ingenieros. Y con CSS Grid, Flexbox, Diseño Responsivo y depuradores a nivel de navegador, el desarrollo para la web nunca ha sido más accesible.
No olvides que hay un curso gratuito en Scrimba donde enseño cómo hacer el mismo sitio web desde cero. Haga clic aquí para inscribirse!