Apuntes HTML Básico - Css
Apuntes HTML Básico - Css
Los elementos en lenguaje HTML por lo general están delimitados por una
etiqueta de apertura y por una de cierre. Hay algunos elementos conocidos
como elementos “vacíos” que solo poseen una etiqueta sin existir en este caso
la de cierre.
</nombreEtiqueta>
Nota: La utilización de [] en los apuntes quiere decir que su contenido puede estar o no estar,
en el caso de los atributos puede haber varios. Los [] no forman parte de la sintaxis del
lenguaje.
Ejemplo:
<p>
Hoy está lloviendo.
</p>
Después de esta línea va el elemento padre (único) del documento que está
definido entre las etiquetas <html> y </html>
1-37
Es normal que la etiqueta de apertura lleve una atributo de idioma, por
ejemplo <html lang=”es”> indicaría que el documento utiliza idioma
español.
El body definido entre etiquetas <body> y </body> donde irá todo lo que
se verá en la pantalla del navegador, o sea todos los elementos que formarán
la estructura de la página (directamente escritos en lenguaje html y que no se
creen dinámicamente con Javascript).
Ejemplo
<p>
Este es un texto que forma parte de un elemento párrafo definido en
código html.
</p>
__________
2-37
Ejemplo de un div que contiene en su interior dos párrafos.
<div>
<p> Esto es un párrafo </p>
<p> Esto es otro párrafo dentro de un elemento div. </p>
</div>
__________
Ejemplo
<p>
Este un texto que forma parte de un <span>párrafo</span> aunque la
palabra párrafo anterior sea un elemento span.
</p>
Ejemplo
<img src=”flor.jpg”>
3-37
En este otro código: <img src=”imagenes/coche.png”>
___________
4-37
contenga varios elementos <article> si los artículos son parte de un grupo
más grande de contenido relacionado temáticamente.
El elemento <section> es un contenedor genérico para contenido
temáticamente relacionado. Por ejemplo, podría usar un <section> para
agrupar varios artículos relacionados en una página de noticias. Cada artículo
individual se incluiría dentro de un <article>.
Por otro lado, el elemento <article> es utilizado para contenido autónomo y
que tiene un sentido por sí mismo. Por ejemplo, una entrada de blog, una
noticia o una publicación de redes sociales.
En resumen, se espera que un <section> contenga varios <article> si los
artículos son parte de un grupo más grande de contenido relacionado
temáticamente. Y <article> se usa para contenido autónomo y auto-contenido.
_____________
5-37
ALGO BÁSICO SOBRE CSS
Dos de los atributos más importantes que pueden llevar todos los elementos
HTML son:
Pues bien, sabiendo el significado de estos dos atributos de los elementos html
pasaremos a la parte de la declaración del estilo con css.
Si el estilo está declarado en el head del documento, solo será aplicado a los
elementos de ese documento y no podrá aplicarse a los de otros
documentos .html como sí sería posible en caso de escribir el código css en un
archivo externo con extensión .css y enlazarlo como veremos más adelante.
selector_de_elemento {
propiedad1: valor_propiedad₁;
propiedad2: valor_propiedad₂;
….
propiedadn: valor_propiedad_n;
6-37
Veamos los 3 típos más básicos de selectores para hacer las reglas de
estilo:
_____________
Ejemplo:
#caja1 {
border: 5px solid blue;
}
_____________
Selector de clase:
.fondorojo {
background-color: red;
}
7-37
Le aplicará un color de fondo rojo a todos los elementos cuyo atributo class
tenga valor fondorojo o sea, que en su etiqueta de apertura aparezca
class=”fondorojo”
Ejemplo:
<p id=”segundoparrafo”>
Este es el segundo párrafo y no tiene fondo.
</p>
<div>
<p id=”par1div>
HOLA MUNDO.
</p>
<p class=”fondoamarillo”>
Esto es un párrafo con fondo amarillo dentro de un div con borde
negro.
</p>
</div>
<style>
#primerparrafo {
border: 2px solid green;
}
.fondoamarillo {
background-color: yellow;
}
div {
border: 5px solid black;
}
</style>
8-37
pertenece a ninguna clase con estilo ni se le ha aplicado nada por ser un
elemento de etiqueta p pues no hay una regla con selector de etiqueta p.
Por último tenemos un div que tiene borde negro de 5 píxeles aplicado con un
selector de etiqueta (div en este caso) y que de haber en la página más
elementos con dicha etiqueta también mostrarían ese borde (si o se anulara
por otra regla). En el interior del div tendremos dos párrafos, uno con el texto
HOLA MUNDO. Que en principio no tiene un estilo determinado y un segundo
párrafo con fondo amarillo por pertenecer a la clase fondoamarillo y haber una
regla que le aplica ese estilo.
Una clase determinada puede ser aplicada sin problema a distintos tipos de
elementos (de etiquetas distintas) como se vio en el ejemplo de código
anterior con la clase fondoamarillo.
Si quisiéramos hacer una regla con un selector que solo aplicara un estilo a un
tipo de elemento (de una etiqueta determinada) que además pertenezca a una
clase lo haríamos con la sintaxis:
etiqueta.clase {
div.fondoamarillo {
font-size: 20px;
}
9-37
Por otro lado y siguiendo con el ejemplo de código anterior, si primer párrafo
dentro del div fuera seleccionado por otra regla que le aplicara un tamaño de
letra 15px (por ejemplo seleccionándolo por si id) el texto de ese párrafo
cogería dicho tamaño aunque el resto de texto del div (el del segundo párrafo
en el ejemplo) tendría tamaño 20px.
selector1 selector2 {
Ejemplo 1:
div p {
….
}
Ejemplo 2:
div .resaltado {
….
}
10-37
Ejemplo 3:
#caja2 p { …. }
Ejemplo 4:
#caja3 p.fondoverde { … }
En este otro caso seleccionamos todos los párrafos descendientes del elemento
de id caja3 que además pernetezcan a la clase fondoverde
Ejemplo 5
.fondoclaro div { …. }
Con esto seleccionamos a todos los elementos div que sean descendientes de
elementos que tengan clase fondoclaro
Ejemplo 6
.fondoclaro div p { … }
selector1>selector2 { … }
Con la utilización del símbolo > indicamos que seleccionamos los elementos
seleccionados por el selector de la derecha que son hijos directos (en el primer
nivel de profundidad) de un elemento seleccionado por el selector de la
izquierda.
11-37
Ejemplo:
Si el html es:
<div>
<p> hola </p>
<div>
<section>
<p>
Este no es hijo directo de un div, es nieto.
</p>
</section>
<div>
<p>
Este si.
</p>
</div>
</div>
<p>
fin
</p>
</div>
div>p { … }
Se seleccionarán todos los párrafos excepto el que está dentro de las etiquetas
<section> (utilizadas aquí sin ningún sentido, solo para tener un contenedor distinto a div)
ya que aunque ese párrafo es descendiente de un div y podría ser seleccionado
con el selector con espacio en lugar de > ( div p {---} ), en este caso no es
hijo directo del div pues es hijo directo de <section>.
12-37
ELEMENTOS TIPO LISTA EN HTML
Lista no ordenada: Una lista no ordenada se utiliza para mostrar una lista de
elementos que no necesitan estar en un orden específico. Cada elemento de la
lista se marca con un símbolo, como un punto. El código HTML para una lista
no ordenada se ve así:
<ul>
<li>Primer elemento de la lista</li>
<li>Segundo elemento de la lista</li>
<li>Tercer elemento de la lista</li>
</ul>
Lista ordenada: Una lista ordenada se utiliza para mostrar una lista de
elementos en un orden específico. Cada elemento de la lista se marca con un
número. El código HTML para una lista ordenada se ve así:
<ol>
<li>Primer elemento de la lista</li>
<li>Segundo elemento de la lista</li>
<li>Tercer elemento de la lista</li>
</ol>
Lista de definición: Una lista de definición se utiliza para mostrar una lista de
términos y sus definiciones correspondientes. Los términos se marcan con el
elemento <dt>, mientras que las definiciones se marcan con el elemento
<dd>. El código HTML para una lista de definición se ve así:
<dl>
<dt>Término 1</dt>
<dd>Definición del término 1</dd>
<dt>Término 2</dt>
<dd>Definición del término 2</dd>
<dt>Término 3</dt>
<dd>Definición del término 3</dd>
</dl>
13-37
El resultado visual de los códigos anteriores sería el siguiente:
Lista no ordenada:
Lista ordenada:
Lista de definición:
Término 1
Definición del término 1
Término 2
Definición del término 2
Término 3
Definición del término 3
14-37
ENLACES (hipervículos)
<a href=”https://www.academia.gal”>
Visitar web de Academia Galega
</a>
También el atributo target puede llevar como valor el valor del atributo name
de un elemento iframe (que veremos a continuación) para que se muestre
dentro de dicho iframe.
15-37
IFRAMES (Marcos flotantes)
Un elemento iframe marca una zona de la web donde se puede mostrar otro
documento (página web, imagen, pdf, vídeo, …).
El tamaño del elemento iframe se puede indicar mediante atributos html width
y height propios de su etiqueta o mendiante propiedades css.
Ejemplo de código:
Aquí comentaré algo al respecto del valor “_parent” que puede tomar un
atributo target, y es que si la web que se muestra dentro de un iframe lleva un
enlace donde el valor de target es “_parent” si pinchamos en dicho enlace la
página, o documento indicado en su href se cargará en la pestaña del
navegador donde se muestra la página principal (entendamos como tal la
página que contiene el elemento iframe donde se muestra el documento con el
enlace y el valor target=”_parent”).
16-37
TABLAS
En html disponemos también de un elemento para crear tablas, las cuales hace
años se utilizaban para disponer los elementos dentro de la página (maquetar)
pero que a día de hoy está “prohibido” ya que disponemos de css para ello.
<table>
<tr>
<th>CELDA 1-A</th>
<th>CELDA 1-B</th>
<th>CELDA 1-C</th>
</tr>
<tr>
<td>CELDA 2-A</td>
<td>CELDA 2-B</td>
<td>CELDA 2-C</td>
</tr>
<tr>
<td>CELDA 3-A</td>
<td>CELDA 3-B</td>
<td>CELDA 3-C</td>
</tr>
<tr>
<td>CELDA 4-A</td>
<td>CELDA 4-B</td>
<td>CELDA 4-C</td>
</tr>
</table>
Las celdas pueden llevar atributos para indicar que se expanden “robando” el
sitio de otras a su derecha o a su izquierda. Lo que en Word por ejemplo sería
“combinar celdas”.
Para indicar que una celda se expande a su derecha tomando X huecos que no
le corresponden indicaremos el valor X+1 (su hueco sumado a los que toma
prestados) en el valor colspan de la etiqueta td. Mientras que si se expande
17-37
hacia abajo tomando huecos de las filas por debajo de ella lo indicaremos en el
atributo rowspan.
Una misma celda td puede llevar ambos atributos indicando que se expande a
su derecha y hacia abajo a la vez.
Partiendo de una tabla de 5 filas de cuatro celdas cada una (la primera fila
lleva encabezados) si hacemos las siguientes combinaciones obtendremos el
resultado mostrado en la imagen de la página siguiente.
18-37
____________
POSICIONAMIENTO
19-37
de referencia (dependiente del valor de position) y el lado derecho del
elemento.
position: relative;
El valor relative toma como referencia la posición inicial del elemento. La
utilización de relative no hace perder el hueco que ocupaba el elemento, dicho
de otra forma, el resto de elementos no toman el espacio que el elemento deja
al ser desplazado.
Teniendo el código:
<body>
<div id="caja1" class="caja">CAJA 1</div>
<div id="caja2" class="caja">CAJA 2</div>
<div id="caja3" class="caja">CAJA 3</div>
<div id="caja4" class="caja">CAJA 4</div>
</body>
#caja2 {
position: relative;
top: 50px;
left: 100px;
}
Resulta:
20-37
position: absolute;
El valor relative toma como referencia la posición del ancestro más cercano
posicionado del elemento (o sea, que no tenga static como valor de position, ni
por defecto ni por haber sido establecido).
#madre {
background-color: red;
border: 2px solid black;
width: 400px;
height: 300px;
}
#abuela {
background-color:aqua;
border: 2px solid black;
width: 1000px;
height: 800px;
}
#caja {
background-color: green;
border: 2px solid black;
}
<body>
<div id="abuela">
<div id="madre">
<div id="caja" class="caja">CAJA</div>
<p>Este texto es del párrafo primero. </p>
<p>Este es el segundo párrafo. Lorem ipsum
dolor sit amet consectetur adipisicing elit. Omnis,
natus? </p>
</div>
</div>
</body>
21-37
Con esto obtenemos el siguiente resultado en pantalla:
#caja {
position:absolute;
top: 350px;
left: 1200px;
background-color: green;
border: 2px solid black;
}
Las medidas indicadas de top y left son respecto a los lados del <body>
22-37
Supongamos ahora que posicionamos la caja celeste (abuela) pero que la roja
(madre) sigue sin posicionar y le ponemos a la caja un left: 600px y un top:
350px
#madre {
background-color: red;
border: 2px solid black;
width: 400px;
height: 300px;
}
#abuela {
position:relative;
background-color: aqua;
border: 2px solid black;
width: 1000px;
height: 800px;
}
#caja {
position:absolute;
top: 350px;
left: 600px;
background-color: green;
border: 2px solid black;
}
El resultado sería:
La caja celeste la hemos posicionado con valor relative pero con cualquier valor
que no sea static valdría para considerarla posicionada.
23-37
Ahora daremos posicionamiento a la caja roja (madre) y añadiremos:
bottom: 70px; y right: 100px; a la caja roja.
#madre {
position:absolute;
background-color: red;
border: 2px solid black;
width: 400px;
height: 300px;
}
#caja {
position:absolute;
right: 100px;
bottom: 70px;
background-color: green;
border: 2px solid black;
}
La referencia ahora para las coodenadas de la caja serán los lados de su caja
madre (la roja) que está posicionada, esta vez con absolute.
24-37
position: fixed;
El valor fixed toma como referencia el <body> para su posicionamiento
mediante top, bottom, left o right y deja fijada en esa posición el elemento
como si estuviera clavado con una chincheta aunque se haga scroll. El
elemento se sale del flujo y pierde su espacio.
#caja {
position:fixed;
right:0;
background-color: green;
border: 2px solid black;
}
25-37
position: sticky;
El valor sticky mantiene el hueco al igual que relative. Toma de referencia el
<body> y al producir scroll y llegar a la posición fijada, por ejemplo por top se
queda ahí pegado.
______
FLOAT
none, que hace que no flote, con lo cual si tenía otro valor establecido
anteriormente ese valor dejará de tener efecto.
Para evitar que el efecto del float que tiene un elemento le afecte al que lo
sigue, a este último se le puede aplicar la propiedad de css clear
clear si lleva el valor left evitara el efecto del float:left del elemento
predecesor, si lleva el valor right evitará el efecto del float:right del elemento
predecesor y si lleva el valor both evitará tanto el valor left como el right que
lleve la propiedad float del elemento predecesor, por lo cual se suele utilizar
clear:both sea cual sea el valor del float predecesor.
26-37
Si un elemento lleva float y los que lo siguen no, estos ocuparán el espacio que
dejó al salirse del flujo.
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Floats</title>
<style>
body{
margin: 0;
}
*{
box-sizing: border-box;
}
.caja {
width: 200px;
height: 200px;
padding:20px;
font-size: 2em;
}
#caja1 {
background-color: red;
}
#caja2 {
background-color: green;
}
#caja3 {
background-color: blue;
}
#caja4 {
background-color: magenta;
}
</style>
</head>
<body>
<div id="caja1" class="caja">CAJA 1</div>
<div id="caja2" class="caja">CAJA 2</div>
<div id="caja3" class="caja">CAJA 3</div>
<div id="caja4" class="caja">CAJA 4</div>
</body>
</html>
27-37
Que produce el resultado:
#caja1 {
background-color: red;
float:left;
}
#caja1 {
position: relative;
left: 100px;
background-color: red;
float:left;
}
28-37
Mientras que si a la caja verde (caja2) también le aplicamos float:left; también
se saldrá y flotará a la izquierda de su contenedor que es el body y topará con
la caja roja. El resultado habiendo sacado el desplazamiento a la derecha de la
caja1
#caja1 {
background-color: red;
float:left;
}
#caja2 {
background-color: green;
float:left;
}
.caja {
width: 200px;
height: 200px;
padding:20px;
font-size: 2em;
float:left;
}
29-37
El resultado es:
<body>
<div id="caja1" class="caja">CAJA 1</div>
<div id="caja2" class="caja">CAJA 2</div>
<div id="caja3" class="caja">CAJA 3</div>
<div id="caja4" class="caja">CAJA 4</div>
<p id=”parr”>Esto es un párrafo.</p>
</body>
#parr{
clear: both;
}
En este caso también valdría clear:left; ya que left es el valor del float de la
caja4.
En el caso de poner a todas las cajas el valor right, primero sin utilizar el clear
en el párrafo el resultado sería:
30-37
Y utilizando clear en el párrafo:
_________________
ENLACES ANCLA
Existe una forma de hacer que un enlace nos lleve a una cierta parte de un
documento, sea dentro del mismo documento donde ponemos el enlace, sea
de un documento externo.
Para realizar esto primero tenemos que asegurarnos que en la parte del
documento “destino” a la que queramos acceder mediante el enlace tengamos
un elemento con un valor en el atributo id.
Una vez tengamos dicho valor lo utilizaremos en el enlace como valor del
atributo href pero precedido (sin espacios) del carácter #
Si queremos hacer un enlace que al pinchar en el texto “Ir al párrafo 50” nos
lleve a dicho elemento, lo haremos así:
31-37
El código que tenemos que poner en el documento principal.html será:
Tenemos que tener en cuenta que dicho valor href del ejemplo supone que el
documento pagina2.html está en la misma carpeta que el documento que lleva
el enlace principal.html. En otro caso el valor de href debe indicar la ruta
(relativa o absoluta) a seguir para localizar el archivo.
<a href=”nivel2/pagina2.html#notaaclaratoria”>
Visitar nota del la página 2
</a>
<a href=”../pagina2.html#notaaclaratoria”>
Visitar nota del la página 2
</a>
<a href=”http://www.nombredominio.com/pagina2.html#notaaclaratoria”>
Visitar nota del la página 2
</a>
UNIDADES DE MEDIDA
Por ejemplo:
width: 200px;
32-37
Pero también hay forma de indicar tamaños de forma relativa, el más básico es
el % que dependerá de las dimensiones del contenedor del elemento al que se
le aplique.
Por ejemplo, si tenemos un div que es hijo directo del body y queremos que su
ancho sea la mitad del ancho del body lo podemos indicar así en su css:
width: 50%;
Tambien existen dos unidades de medidas dependientes del tamaño fijado para
la letra. Estas son em y rem y el número indicaría el múltiplo del tamaño
fijado.
Ejemplo 1:
font-size: 2em;
Ejemplo 2:
p{
font-size: 20px;
}
.doble {
font-size: 2em;
}
Y que en el html tenemos lo siguiente:
En este caso el primer párrafo llevará letra tamaño 20px porque está
establecida para todos los párrafos mientras que el segundo aplicará el tamaño
2em considerando que 1em toma el valor establecido para todos los párrafos
(el texto que se mostrará está dentro de etiquetas p)
33-37
Resultado:
--------
--------
Ejemplo:
Al igual que si queremos indicar que un elemento tiene una altura igual a la
altura del Viewport le pondríamos a dicho elemento height: 100vw; algo que
normalmente le aplicamos al body cuando queremos centrar con flex-box un
elemento verticalmente en la pantalla.
_________________
34-37
MEDIA QUERIES
La sintaxis es:
reglas css
}
all → todos
print → impresora
screen → pantalla
speech → lector de pantalla
Valores:
width
height
max-height / min-height
min-width / max-width
35-37
Como se ve en el ejemplo anterior podemos utilizar and para forzar que se
cumplan varias condiciones, tanto de tipo de medio como de “media features”
MEDIDAS FRECUENTES:
/* Orientación: Vertical */
@media screen and (orientation:portrait) { }
/* Orientación: Horizontal */
@media screen and (orientation:landscape) { }
36-37
/* iPad - Orientación: Vertical */
@media screen and (min-device-width: 481px) and (orientation:portrait) { }
37-37