{"id":1350,"date":"2026-03-13T07:00:00","date_gmt":"2026-03-13T06:00:00","guid":{"rendered":"https:\/\/programaraciegas.net\/?p=1350"},"modified":"2026-02-24T07:59:11","modified_gmt":"2026-02-24T06:59:11","slug":"introduccion-a-css","status":"publish","type":"post","link":"https:\/\/programaraciegas.net\/?p=1350","title":{"rendered":"Introducci\u00f3n a CSS"},"content":{"rendered":"<p>Cuando abrimos una p\u00e1gina web en el navegador, \u00e9ste interpreta el <a href=\"https:\/\/programaraciegas.net\/?p=1331\">c\u00f3digo HTML<\/a> para entender qu\u00e9 contenido hay y qu\u00e9 significa cada parte (t\u00edtulos, p\u00e1rrafos, enlaces, formularios, etc.).<\/p>\n<p>Adem\u00e1s de estructura y sem\u00e1ntica, una p\u00e1gina necesita presentaci\u00f3ny estilo visual (tipograf\u00edas, tama\u00f1os, colores, m\u00e1rgenes, alineaci\u00f3n, distribuci\u00f3n en columnas, etc).<\/p>\n<p>En los art\u00edculos sobre HTML se ha hablado de contenido, sem\u00e1ntica y estructura pero nunca hablamos de aspecto visual o dise\u00f1o. Esto se debe a que HTML, en las versiones m\u00e1s modernas y responsables con la accesibilidad, ha cedido toda la responsabilidad de definir el aspecto visual del contenido a la parte CSS de una p\u00e1gina web.<\/p>\n<h2>Qu\u00e9 es CSS<\/h2>\n<p>CSS son las siglas de <strong>Cascading Style Sheets<\/strong> (Hojas de estilo en cascada).<\/p>\n<p>Al igual que ocurre con HTML, CSS no es un lenguaje de programaci\u00f3n. No ejecuta l\u00f3gica como lo har\u00eda JavaScript; en su lugar, define reglas de estilo que el navegador aplica sobre los elementos HTML para controlar c\u00f3mo se muestran en la pantalla.<\/p>\n<p>La idea fundamental es separar responsabilidades entre las distintas partes de una p\u00e1gina web. El c\u00f3digo HTML describe el contenido y su estructura. El c\u00f3digo CSS describe el aspecto visual y parte del comportamiento de presentaci\u00f3n (por ejemplo, el dise\u00f1o adaptable o ciertas animaciones). Por \u00faltimo, el c\u00f3digo Javascript describe la funcionalidad y el dinamismo de la p\u00e1gina.<\/p>\n<h3>Ejemplo b\u00e1sico en CSS<\/h3>\n<p>Un ejemplo t\u00edpico es tener un fichero HTML y, aparte, un fichero CSS enlazado. Por ejemplo, un HTML cl\u00e1sico es:<\/p>\n<pre><code>&lt;!doctype html&gt;<br \/>&lt;html lang=\"es\"&gt;<br \/>&lt;head&gt;<br \/>&lt;meta charset=\"utf-8\"&gt;<br \/>&lt;title&gt;Mi primera p\u00e1gina con CSS&lt;\/title&gt;<br \/>&lt;link rel=\"stylesheet\" href=\"styles.css\"&gt;<br \/>&lt;\/head&gt;<br \/>&lt;body&gt;<br \/>&lt;h1&gt;Mi primera p\u00e1gina&lt;\/h1&gt;<br \/>&lt;p&gt;Este es un p\u00e1rrafo con informaci\u00f3n.&lt;\/p&gt;<br \/>&lt;a href=\"https:\/\/programaraciegas.net\"&gt;Visitar el blog&lt;\/a&gt;<br \/>&lt;\/body&gt;<br \/>&lt;\/html&gt;\n<\/code><\/pre>\n<p>Y el contenido del fichero styles.css podr\u00eda ser:<\/p>\n<pre><code>body {<br \/>font-family: system-ui, sans-serif;<br \/>line-height: 1.5;<br \/>}<\/code><\/pre>\n<p>h1 {<br \/>font-size: 2rem;<br \/>}<\/p>\n<pre><code><\/code><\/pre>\n<p>a {<br \/>text-decoration: underline;<br \/>}<\/p>\n<pre><code><\/code><\/pre>\n<p>Si guardamos ambos ficheros en la misma carpeta y abrimos el HTML en el navegador, veremos que el contenido es el mismo, pero con el aspecto definido por las reglas CSS.<\/p>\n<h3>Por qu\u00e9 estilos en cascada<\/h3>\n<p>El t\u00e9rmino <strong>cascading<\/strong> (en cascada) tiene una raz\u00f3n por la forma de aplicarse los estilos en un contenido. Cuando varias reglas podr\u00edan aplicarse al mismo elemento, CSS define un sistema para resolver conflictos (origen, orden, especificidad, importancia).\u00a0<\/p>\n<h2>Partes de una regla CSS<\/h2>\n<p>La unidad b\u00e1sica de CSS es la regla (a veces llamada <em>ruleset<\/em>). Una regla se compone de:<\/p>\n<p>\u2022 Un selector, que indica a qu\u00e9 elementos se aplica.<br \/>\u2022 Un bloque de declaraciones, que indica qu\u00e9 propiedades se aplican y con qu\u00e9 valores.<\/p>\n<p>Veamos un ejemplo simple:<\/p>\n<p><code>p {<br \/>font-size: 1rem;<br \/>margin-bottom: 1rem;<br \/>}<\/code><\/p>\n<p>En este caso:<br \/>\u2022 p es el selector: selecciona todos los p\u00e1rrafos.<br \/>\u2022 Dentro de { &#8230; } hay declaraciones.<br \/>\u2022 Cada declaraci\u00f3n es un par propiedad: valor; como font-size: 1rem;.<\/p>\n<h2>C\u00f3mo se aplica CSS a una p\u00e1gina web<\/h2>\n<p>Hay tres formas habituales de aplicar CSS:<\/p>\n<h3>Hoja de estilo externa<\/h3>\n<p>Es la forma m\u00e1s com\u00fan y la recomendada por accesibilidad. Se enlaza desde el <a href=\"https:\/\/programaraciegas.net\/?p=1332\">&lt;head&gt;<\/a> de la p\u00e1gina:<\/p>\n<p><code>&lt;link rel=\"stylesheet\" href=\"styles.css\"&gt;<\/code><\/p>\n<p>Entre las ventajas encontramos la separaci\u00f3n del dise\u00f1o del contenido y permite reutilizar estilos en muchas p\u00e1ginas.<\/p>\n<h3>Estilos internos<\/h3>\n<p>Se escriben dentro de un bloque &lt;style&gt; en el &lt;head&gt;:<\/p>\n<pre><code>&lt;style&gt;<br \/>p { line-height: 1.6; }<br \/>&lt;\/style&gt;<\/code><\/pre>\n<p>Esto es \u00fatil para ejemplos o p\u00e1ginas muy peque\u00f1as, pero no es reutilizable para otras p\u00e1ginas.<\/p>\n<h3>Estilos en l\u00ednea<\/h3>\n<p>Se escriben directamente en el atributo style de un elemento del <a href=\"https:\/\/programaraciegas.net\/?p=1344\">&lt;body&gt;<\/a>: dentro de la <a href=\"https:\/\/programaraciegas.net\/?p=1349\">estructura de contenidos<\/a> de la p\u00e1gina.<\/p>\n<p><code>&lt;p style=\"line-height: 1.6;\"&gt;Texto&lt;\/p&gt;<\/code><\/p>\n<p>Aunque este estilo se aplica al contenido, es la opci\u00f3n menos recomendable porque mezcla contenido y presentaci\u00f3n y complica el mantenimiento de la p\u00e1gina y su <a href=\"https:\/\/programaraciegas.net\/?p=1348\">estructura<\/a>.<\/p>\n<h2>Los selectores CSS<\/h2>\n<p>El selector es la condici\u00f3n que decide qu\u00e9 elementos reciben una regla.\u00a0<br \/>Los m\u00e1s utilizados son:<\/p>\n<h3>Selector por etiqueta<\/h3>\n<p>Afecta a todos los elementos de ese tipo:<\/p>\n<p><code>p { ... }<br \/>h1 { ... }<\/code><\/p>\n<h3>Selector por clase<\/h3>\n<p>Afecta a elementos que tengan class=\u00bb&#8230;\u00bb:<\/p>\n<p><code>.destacado { font-weight: bold; }<\/code><\/p>\n<p>Y en HTML:<\/p>\n<p><code>&lt;p class=\"destacado\"&gt;Texto importante&lt;\/p&gt;<\/code><\/p>\n<h3>Selector por id<\/h3>\n<p>Afecta a un \u00fanico elemento con id=\u00bb&#8230;\u00bb:<\/p>\n<p><code>#cabecera { ... }<\/code><\/p>\n<p>En HTML:<\/p>\n<p><code>&lt;header id=\"cabecera\"&gt;...&lt;\/header&gt;<\/code><\/p>\n<p>En la pr\u00e1ctica, para estilos suele preferirse clases antes que abusar de id, porque son m\u00e1s reutilizables en otros contenidos o componentes.<\/p>\n<h2>La cascada: qu\u00e9 pasa cuando hay conflicto<\/h2>\n<p>Es habitual que varias reglas intenten aplicar estilos al mismo elemento. CSS resuelve esto con la aplicaci\u00f3n en cascada: el navegador decide qu\u00e9 declaraci\u00f3n gana seg\u00fan el origen y el orden, y si hace falta entra en juego la especificidad del selector.\u00a0<\/p>\n<p>Un ejemplo t\u00edpico que nos podemos encontrar es:<\/p>\n<p><code>p { color: black; }<br \/>.destacado { color: blue; }<\/code><\/p>\n<p>Si un p\u00e1rrafo tiene class=\u00bbdestacado\u00bb, el color ser\u00e1 azul porque .destacado es m\u00e1s espec\u00edfico que p.<\/p>\n<p>La cascada es una de las razones por las que, al empezar con CSS, a veces parece que no se aplique correctamente a algunos contenidos. normalmente s\u00ed funciona, pero otra regla est\u00e1 ganando en prevalencia de la cascada.<\/p>\n<h2>Accesibilidad y CSS<\/h2>\n<p>CSS puede mejorar mucho la experiencia de navegaci\u00f3n y la accesibilidad presente en la p\u00e1gina web o romperla con facilidad. Un mal CSS es responsable de estas barreras de accesibilidad:<\/p>\n<ul>\n<li>Contraste de color insuficiente entre texto y fondo.\u00a0<\/li>\n<li>Eliminar el foco del teclado por est\u00e9tica. Evita hacer outline: none; sin ofrecer una alternativa visible.<\/li>\n<li>No respetar preferencias del usuario, como reducir animaciones con prefers-reduced-motion.\u00a0<\/li>\n<li>Uso de tipograf\u00eda ilegible o no adaptable a las necesidades del usuario.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Cuando abrimos una p\u00e1gina web en el navegador, \u00e9ste interpreta el c\u00f3digo HTML para entender qu\u00e9 contenido hay y qu\u00e9 significa cada parte (t\u00edtulos, p\u00e1rrafos, enlaces, formularios, etc.). Adem\u00e1s de estructura y sem\u00e1ntica, una p\u00e1gina necesita presentaci\u00f3ny estilo visual (tipograf\u00edas, tama\u00f1os, colores, m\u00e1rgenes, alineaci\u00f3n, distribuci\u00f3n en columnas, etc). En los art\u00edculos sobre HTML se ha &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/programaraciegas.net\/?p=1350\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \u00abIntroducci\u00f3n a CSS\u00bb<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5,542,114],"tags":[551,84,333,94],"class_list":["post-1350","post","type-post","status-publish","format-standard","hentry","category-desarrollo","category-diseno","category-html-2","category-navegadores-web","tag-css","tag-curso","tag-html","tag-web"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/1350","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1350"}],"version-history":[{"count":0,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=\/wp\/v2\/posts\/1350\/revisions"}],"wp:attachment":[{"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1350"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1350"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/programaraciegas.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}