Académique Documents
Professionnel Documents
Culture Documents
input.text {
border: 15px solid #FF0000;
}
h1#dato {
text-align: right;
}
#dato {
text-align: right;
}
• body p {
• font-weight: bold;
• font-variant: small-caps;
• }
• body>p {
• font-weight: bold;
• font-variant: small-caps;
• }
Marcado
<body>
<p>vamos a hacer varios parrafos</p>
<p>estos están directamente en body</p>
<div class="caja1">
<p>pero este esta en una div</p>
<p>y este también</p>
</div>
<p>ya éste está otra vez en body
</p>
</body>
Explicación
• El signo > indica que seleccione todos los
elementos p secundarios, no todos los
descendentes
• Los parrafos incluidos en div no se ven
afectados, ya que son secundarios de dicho
elemento, no de body
• Sin embargo, los parrafos anteriores y
posteriores a div se verán afectados ya que
ambos comparten body como elemento principal
Declaraciones múltiples
• No tendremos una propiedad entre llaves
cada vez, sino varios grupos
p{
font-weight: bold;
font-variant: small-caps;
}
Agrupar
• Se pueden agrupar selectores de
etiquetas, de id….
• Pero podríamos hacer un ejemplo
interesante
#contenido {
text-indent: 11px;
border: 10px solid #0000FF;
padding:10px;
background-color: #00FFCC;
}
#pie {
background-color: #00FFCC;
padding: 10px;
}
#titular {
font-size: 36px;
text-align: center;
word-spacing: 15em;
padding: 10px;
}
Agrupar
#contenido, #pie, #titular{
padding:10px;
}
#contenido, #pie{
background-color: #00FFCC;
}
#contenido {
text-indent: 11px;
border: 10px solid #0000FF;
}
#titular {
font-size: 36px;
text-align: center;
word-spacing: 15em;
}
Comentario
• Puede no parecer un ahorro excesivo
– Más líneas
– Más reglas
• Pero muchas ventajas, mejor cuanto más
reglas de estilo más complejas
Herencia
• Al crear reglas CSS es preciso tener en
cuenta que algunas propiedades y sus
valores se heredan de elementos
descendientes
– P hereda de body
– Img hereda del p en donde se incluye…
• Se podría configurar un árbol de
documento del marcado
<edad>
<meta http-equiv="Content-Type" contenta="text/html; charset=iso-8859-1" />
<title>Documento sin título</title>
<style type="text/css">
<!--
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
font-style: italic;
color: #FF0000;
text-decoration: underline;
padding: 20px;
border-top-style: dotted;
border-right-style: dotted;
border-bottom-style: dotted;
border-left-style: dotted;
}
-->
</style>
</edad>
<body>
<p>esto es un parrafo...que claro está en body</p>
<p> </p>
<p>aqui tienes otro parrafo que también esta en body</p>
<p> </p>
<ul>
<li>una lista sin ordenar</li>
<li>pero puede dnetro tener varios elementos</li>
</ul>
<div>
<p>una div...pero</p>
<p>con varios parrafos claro...</p>
<p> </p>
</div>
<p>y más parrafos fuera....</p>
<p> </p>
</body>
Comentarios
• Estas reglas se aplican a todos los elementos
body
• Entonces…al aplicar las reglas de herencia al
documento, las propiedades de body se aplican
a todos los elementos incluidos en el cuerpo de
documento, es decir, a todos los elementos que
desciendan de body
• CSS como potente motor de presentación
• Pero pueden darse problemas
– No todas las propiedades se heredan
• Márgenes
• relleno
Reemplazar la herencia
• Queremos aplicar al elemento body unas
propiedades
• Pero los elementos de la lista con algunas
variaciones
<edad>
<meta http-equiv="Content-Type" contenta="text/html; charset=iso-8859-1" />
<title>Documento sin título</title>
<style type="text/css">
<!--
body {
font-family: "Courier New", Courier, monospace;
font-size: 16px;
color: #FF0000;
}
li {
color: #0000FF;
text-decoration: underline;
}
-->
</style>
</edad>
<body>
<p>parrafo en el body</p>
<ul>
<li>elemento de una lista </li>
</ul>
</body>
Comentarios
• Como los elementos de lista descienden del
elemento body, la segunda regla rompe la
cadena de herencia y aplica los estilos
declarados a los elementos li
• Pero como no hemos cambiando el tamaño
de fuente para li, siguen heredando el valor
de dicha propiedad de su antecesor, body
Practica – barra de navegación
• Para crear una barra de navegación se
pueden crear table anidadas con bgcolor
para cada td… y así…
• Para crear una barra de navegación con
XHTML y CSS comenzamos con un
nuevo marcado
Marcado en barra navegación
<ul id="nav">
<li class="primero"><a
href="descendentes.html">inicio</a></li>
<li><a
href="selectoressecundarios.html">historia</a><
/li>
<li><a
href="reemplazarherencia.html">productos</a><
/li>
</ul>
Quitar estilo viñetas
• Hemos creado el marcado con una sencilla lista
sin ordenar
• En principio, quitamos el formato de las viñetas
ul {
margin: 0px;
padding: 0px;
list-style-type: none;
}
Barra navegación horizontal
• Añadiendo
– Float:left;
• No sale??
Solución
ul#nav, ul#nav li {
float:left;
margin: 0px;
padding: 0px;
list-style-type: none;
}
Comentario
• Hemos usado selectores id
• Al especificar ul#nav en las reglas podemos aplicar un
estilo a la lista de navegación y a sus elementos con
independencia del resto del marcado de la página
• Al agrupar las reglas ul#nav y ul#nav li en un selector
delimitado por comas, podemos afectar a su posición
flotante de cada id
• La propiedad float vuelve a alinear la lista
• Cada elemento se desplaza a la izquierda del anterior,
eliminando el apiolado vertical en una línea horizontal
Sugerencia
• El modelo flotante es una potente
construcción de CSS y es la base de
muchos diseños
tgh://www.complexspiral.com/publications/
Borde y fondo
ul#nav{
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:.8em;
background-color:#CCCCCC;
}
ul#nav li a{
border:1px solid #FF0000;
display:block;
float:left;
padding:5px;
}
Comentarios
• Estas nuevas reglas se tienen que añadir
a la regla inicial
• Prueba a comentar la primera regla
• Prueba a comentar algunas propiedades
de estas nuevas reglas….
– Podemos ver efectos interesantes..
Comentarios
• Se ha aplicado un color de fondo gris directamente a
lista sin ordenar
• Al establecer atributos font de la lista, podemos recurrir
a la herencia para aplicar una fuente a todos sus
elementos
• Las anclas se presentan como elementos en línea y esto
es un problema puesto que todo relleno que apliquemos
solo afecta a los bordes horizontales
• Para poner píxeles de relleno a ambos lados de los
vínculos de navegación, convertimos los vínculos en
elementos de nivel de bloque
– display:block
Bordes
• Los bordes interiores son muy gruesos
• El borde de cada elementos se añade al de sus
parientes…y se duplican
ul#nav li a{
border-color:#FF0000;
border-width:1px 1px 1px 0;
border-style:solid;
display:block;
float:left;
padding:5px;
}
Comentario
• Las nuevas extensas declaraciones
obtienen el mismo efecto que las
declaraciones agrupadas pero el 0 de
border-width indica que ignore el borde
izquierdo
• Pero falla el primer elemento
ul#nav li.primero a{
border-width:1px;
}
Cascada
Origen del estilo
• Las hojas de estilo pueden proceder de:
– Agentes de usuario
• Hoja de estilo predeterminada a un documento antes de aplicar
cualquier otra regla de estilo
• Este conjunto interno de reglas CSS establece las reglas de
representación predeterminadas de todos los elementos HTML
– H1 con fuente serif
– Viñeta por delante de ul
– Usuario
• Los usuarios pueden crear CSS a partir de CSS2
• Iniciativa de accesibilidad
– Autor
• Nosotros
• Las hojas de estilo incluidas en nuestro marcado
Orden
• Reglas de estilo predeterminadas del
navegador son menos importantes
• Que las de usuario, que son menos
importantes
• Las reglas especificadas en el servidor del
sitio (autor)
important
• Tanto el usuario como el autor pueden
definir reglas !important
• Una regla !important de usuario es más
importante que una !important de autor
Origen de estilo en cascada
(de menos a más importante)
• Navegador
• Usuario
• Autor
• !important autor
• !important usuario
Ejemplo !important de autor
h2 {
font-size: 2em !important;
color: #0000CC !important;
}
Ordenar por especificidad
• Todo selector cuenta con un valor de
especificidad
– Valor cualitativa de su importancia en la
cascada
– Selectores id son más específicos que los
selectores class
• A más especificidad de una regla, mayor influencia
• Normal, el id solo aparece una vez
Calcular especificidad de selector
• Si el selector es el atributo de estilo de un
elemento, no un verdadero selector
• El numero de atributos id del selector
• El numero de otros nombres de atributos ([lang],
[rel]…) y de pseudoclases (:hover, :visited…) del
selector.
– Los selectores de clase (li.active) son un tipo de
selector de atributo
• El numero de nombres de elemento (a,li, p) y
pseudo-elementos (:before, :after) del selector
Tabla de orden
Selector A B C D Especificidad
a 0 0 0 1 1
h3 a 0 0 0 2 2
ul ol+li 0 0 0 3 3
ul ol li.red 0 0 1 3 13
li.red.level 0 0 2 1 21
#dato 0 1 0 0 100
style="" 1 0 0 0 1000
Ordenar por orden
p{
font-size: 36px !important;
color: #FF0000;
}
p{
font-size: 10px;
color: #00FF00;
text-decoration: underline;
}
Necesidad de trucos
• Es inevitable que al trabajar con CSS
surjan problemas
• Muchos de los errores y sus causas están
documentados
Error – modelo de caja
• Según las especificaciones CSS todo
elemento del árbol de documento cuenta
– Zona de contenido
• Texto
• Imagen
•…
– Relleno
– Borde
– márgenes
Modelo de caja de contenido
hicksdesign.co.uk/journal/483/3d_css_box_model
Modelo de caja
• El tamaño de estas zonas adicionales (relleno,
borde, márgenes) se suman a la altura y
anchura de la zona de contenido
#modelo {
margin: 10px;
padding: 30px;
width: 400px;
border: 5px solid #FF0000;
}
Explicación
• Aunque la propiedad width tenga 400 px
vemos cómo a esta cantidad debemos
añadir
– Relleno izquierdo y derecho
– Borde izquierdo y derecho
– Margen izquierdo y derecho
• Pasa igual para la altura
• Así, el ancho real es width + resto
– Como dicen las especificaciones CSS
Problemas
• Algunos navegadores no lo suman
• Sino que lo restan
– Width – márgenes – borde – relleno = ancho
real
• A partir de Explorer 6 lo hacen según los
estándares pero solo si tiene declarado
que sigue estos estándares
– Aparece DocType
Soluciones con trucos
#modelo {
margin: 10px;
padding: 30px;
width: 400px;
border: 5px solid #FF0000;
}
* html p#modelo{
width:550px;
w\idth:400px;
}
Comentario
• En la segunda regla…te dice que todos los elementos html que
desciendan del elemento *
– No hay ninguno
– Pero Explorer anterior no ve *
• Entonces sí encuentra elementos
• Esta regla solo la ve Explorer
• En la segunda regla, la primera línea indica a los navegadores
defectuosos
– Explorer 5 y anteriores
– La anchura correcta sumando ya y todo
– Pero en Internet Explorer 6 y siguientes
– Ve la nueva regla y entonces el ancho nuevo + todo lo anterior me da
un ancho erróneo
– Solución: convertir la segunda regla en error para IE6
• Salta error y IE6 no la ve
Problemas con los trucos
• Nos hacen hojas de estilo complicadas, casi
ilegibles
• Y si los navegadores futuros no tratan así los
errores??
• Solución:
– Añadir soluciones a hojas de estilo para cada
navegador
– Con link o @import definimos qué archivos css
importar
• Cuando no sean necesarios los trucos, basta con quitar esa
línea