Marcos para imágenes (2): after-before | Oloblogger Continuando con los sistemas para generar clases CSS que nos permitan añadir fácilmente un marco gráfico a nuestras imágenes desde la hoja d...

13 de julio de 2012

Marcos para imágenes (2): after-before

Continuando con los sistemas para generar clases CSS que nos permitan añadir fácilmente un marco gráfico a nuestras imágenes desde la hoja de estilo, hoy veremos un par de métodos más con los que despacharemos el asunto de otra manera con la que complicaremos menos la parte HTML.

Para ello utilizaremos las pseudoclases :before y :after como recurso para ir añadiendo las distintas piezas del puzzle que nos permitirán construir el marco completo.

Para el rompecabezas vamos a usar estas cuatro imágenes que hemos encontrado en este blog de Tumblr. Están diseñadas para imágenes de 400px y una de ellas -la de abajo a la izquierda- es un .gif con transparencia por lo que explicaremos después.

Para luego hacer referencia a ellas consideremos que las de la izquierda son la 1, 2, 3 y 4 (de arriba hacia abajo) y la de la derecha la 5.


Lo que pretendemos es usar el mínimo de capas HTML para ir montando el marco y por eso el siguiente código:

.marcocss {
position: relative;
display: block;
width: 560px;
padding: 82px 0 82px 0;
margin: 0 auto;
background: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLfHwHje1bHbJi-445o9n8KlGljW48Z_azK2qIa9GAT9P18W2O4tkyERLCv3wH6gbLyz6iT77EI442pxBFYak5uGhD43O15R28gAwUeLEHd1w9QSWB6e8dGzXVbECjzTVC7VMYv091924t/s1600/marco-corto.jpg) 0 50%;
}
.marcocss img {
margin:0;
padding:0;
border:0;
}
.marcocss:before {
position: absolute;
top:0;
left:0;
content: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsSimrsravIaazuwoeVd3adj_iZXyLno52aAhnFfcwwUAJYc3zigoyizF9LxlJed8-JbKZ9zNMpg3C1iWqlhB0TRcpfjUTQyRrjm1Gazs-eh8WXlMUX7740-r6lyjjHeWFwVii5qyAym3T/s1600/marco-top.jpg);
width:560px;
height:86px;
}
.marcocss:after {
position: absolute;
bottom: 86px;
left:0;
content: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij7fWqe2HPOdoIAvGMhaz47fW_VLw6-ZYuENEQXDEgMOVmPwn6hI-JGw8uGdojZ81hFdY84mqZ_d4s5b-LwJS8ZGImYl1MwKTIEbP5l1vX9j0cVGVA3mQcpSKQ2YaonZ4RPVYwY9xX6qEg/s1600/marco-base.gif);
width:560px;
height:82px;
}
.largo{
background: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV9oGd6Diqd5V3_8RP8FYlr-LQMHs8SfX0UZerC4RF8tfMJVkRY_j5-uh44gYkWfKArBMeDVZStmHKQINl4_sYLUWRdmNQYzJCpIoc3fyap_OAz2Tw2QmYu0jnuYBHXvKzNdpKQxncCxW_/s1600/marco-largo.jpg) no-repeat 0 50%;
}

Como veis, en un principio sólo usamos la clase .marcocss. Esta tendrá un ancho igual al de la imagen del marco (560px) y le aplicamos un padding arriba y abajo de 82px para dejar espacio para el resto de piezas.

Como fondo usaremos inicialmente la imagen 2, que es la que forma los laterales y que situamos verticalmente centrada con ese 0 50%. Un position: relative; nos ayudará posteriormente a poder colocar adecuadamente el resto de elementos dentro de esta capa.

Luego reseteamos posibles estilos heredados en las imágenes de la hoja de estilo general con .marcocss img y esas propiedades que veis con valores cero.

Con .marcocss:before ya colocamos la imagen que forma la parte superior (número 1). El posicionamiente absoluto lo será con respecto a .marcocss, que para eso antes le hemos colocado el relative. Si no lo hubiéramos hecho, estos elementos se nos posicionarían con respecto a la página y este en concreto, en la parte de arriba a la izquierda de la ventana. Dónde no queremos, vaya.

.marcocss:after tiene exactamente la misma utilidad que el anterior pero para formar la parte inferior. En este caso usamos bottom, para situar contando desde abajo. Esta imagen es el .gif con transparencia antes numerada como 4. El motivo de que se necesite que sea transparente en la parte que va a ocupar la imagen principal, es porque de otra manera, parte de la imagen quedaría tapada por esta pieza.


Con todo esto ya sólo resta añadir la clase marcocss a nuestra capa de imagen para que quede enmarcada, cosa fácil una vez metido lo anterior en nuestra parte de estilo. En verde el lugar dónde incluirla:

<div class="separator marcocss" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtPRLvIo8fUkfkwRjxPbRUZIr0gDdXh7QX3XYHhDKHQwns_xNYuT_rLXdo6_Osjk56dVylPG_ZbOiIpnmgdQIAafCricU50jYdgff5d6zdL3YO-1nPz7rKbzU_Hxg4XZRRixiXRPYMqmBa/s1600/6-3d-art-600x450.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtPRLvIo8fUkfkwRjxPbRUZIr0gDdXh7QX3XYHhDKHQwns_xNYuT_rLXdo6_Osjk56dVylPG_ZbOiIpnmgdQIAafCricU50jYdgff5d6zdL3YO-1nPz7rKbzU_Hxg4XZRRixiXRPYMqmBa/s400/6-3d-art-600x450.jpg" width="400" /></a></div>





Si quisiéramos utilizar leyendas, entonces habría que incluir la clase marcocss dentro del td correspondiente a la imagen principal, añadiendo la etiqueta class:

<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td class="marcocss" style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1wQcAxvV5H6p15q2KZGI_Z1MoF-sBoWFzhSAzWVE7TdJ27tBSXlGRe-usfZgjwkIYMSpZf2vCsST1uKIb1nPXIlYtiMANe0ADztZ08s_mNy2Q80ah4gR7k0DOmenuOMObqsbVXDbtN6M0/s1600/rascacielos.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1wQcAxvV5H6p15q2KZGI_Z1MoF-sBoWFzhSAzWVE7TdJ27tBSXlGRe-usfZgjwkIYMSpZf2vCsST1uKIb1nPXIlYtiMANe0ADztZ08s_mNy2Q80ah4gR7k0DOmenuOMObqsbVXDbtN6M0/s400/rascacielos.jpg" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Star Workers</td></tr>
</tbody></table>

Star Workers



Alguien se preguntará para que sirve ese .largo que hemos incluido en el primer trozo de código. Pues sirve cambiar los laterales en las imágenes tan largas que superan la longitud que nos permite la imagen 2.

Para esos casos incluimos una clase adicional y así la imagen que se usará será la número 5. Se podría haber hecho más larga la 2, pero esta da un mejor resultado con esa voluta que lleva hacia la mitad.

<div class="separator marcocss largo" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIzcXeNY083KiaBhaCeuk22F3BighuhA_KNmZ1hJNVxkuB_weVMWSlw4G5z0lIzq9yIq4846plJTIc17nV4SsBEoBAgNQTy5WNIQ2RXdYCBJXoFlfJ-Ug0WZBXKcTfm-8I8Is-ciXUTUd7/s1600/play.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIzcXeNY083KiaBhaCeuk22F3BighuhA_KNmZ1hJNVxkuB_weVMWSlw4G5z0lIzq9yIq4846plJTIc17nV4SsBEoBAgNQTy5WNIQ2RXdYCBJXoFlfJ-Ug0WZBXKcTfm-8I8Is-ciXUTUd7/s1600/play.jpg" width="400" /></a></div>





Algún espabilao ya se habrá dado cuenta así que lo siguiente es para los que no. Como prácticamente usamos una sola clase para hacer el marco (marcocss), el a veces molesto código que Blogger nos inserta cuando subimos una imagen con el editor, en esta ocasión nos puede venir bien para no tener que añadir nada a mano.

Como podéis comprobar, todas las imágenes que no van en tablas incorporan automáticamente una capa exterior mediante un div con la clase separator. ¿Por qué? Pues no sé exactamente, cosas de Blogger, pero nosotros nos podemos aprovechar de ello.

Lo único que habría que hacer si este tipo de marcos los vamos a usar con TODAS las imágenes, sería usar el mismo CSS pero aplicado a la clase separator en lugar de crear la nueva marcocss que propuse. O sea, esto:

.separator {
position: relative;
display: block;
width: 560px;
padding: 82px 0 82px 0;
margin: 0 auto;
background: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLfHwHje1bHbJi-445o9n8KlGljW48Z_azK2qIa9GAT9P18W2O4tkyERLCv3wH6gbLyz6iT77EI442pxBFYak5uGhD43O15R28gAwUeLEHd1w9QSWB6e8dGzXVbECjzTVC7VMYv091924t/s1600/marco-corto.jpg) 0 50%;
}
.separator img {
margin:0;
padding:0;
border:0;
}
.separator:before {
...
etc.

Si se usa este método alternativo, para las imágenes dentro de tablas habrá que seguir añadiendo a mano dentro del td una etiqueta class, pero en este caso con la clase separator. El largo siempre habrá que añadirlo a mano.



Todavía hay una cosilla más que os quiero comentar. Si las imágenes tienen enlace (el caso normal en Blogger), podemos omitir el uso de transparencia para esa imagen (4) que formaba el marco inferior.

Para ello usaríamos dos :before y así no se solaparía en ningún caso por encima de la imagen principal. Como no podemos dar estilos distintos a clases idénticas, el segundo :before para la base del marco iría sobre el enlace.

De esta manera, en el código CSS visto habría que eliminar el .marcocss:after y todas sus propiedades, y en su lugar usar esto otro. Como podéis comprobar, el background ahora tiene un .jpg sin transparencias que sería la imagen 3:

.marcocss a:before{
position: absolute;
bottom: 86px;
left:0;
content: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMHzzg2KyiJMdx_qDmuC_UoWzBIVcGCdu8RyFEy-Y5VyV9Qx1YlN-zsHfRFR4Tusf-gBwbxjL1i0dLV334ERI4CupzcmBUi9S38I9YzBXpEEK3fqsqTfgX5mGIcr1RhQy-sUnFN7zB7GxF/s1600/marco-base.jpg);
width:560px;
height:82px;
}

Este ejemplo es ya con esa modificación y como veis, funciona igual:




Si quieres ver otro sistema más clásico para hacer prácticamente lo mismo, sólo tienes que ver la primera parte sobre marcos para imágenes.

E iba a ser para esta segunda parte, pero me he enrrollado tanto que queda para una tercera entrada el cómo utilizar la propiedad css border-image, más sencilla de codificar, con menor requerimiento de imágenes, pero que no es soportada por los navegadores antiguos. El anterior sistema al menos es compatible hasta IE8 que es con el que lo he comprobado.

¿Vemos otro post al azar por si le encuentras utilidad o quizás prefieres ser más metódico y suscribirte a nuestras entradas por correo? También puedes imprimir este artículo y por supuesto compartirlo en redes sociales si fue de tu agrado.

Compartir
Copy URL

Y muchos más artículos interesantes si nos sigues en...

follow us in feedly

2 comentarios :

  1. hola, se que no viene al caso, pero queria preguntarte si es que hay alguna manera de adornar los gadgets, ponerles una imagen de fondo o algo.

    ResponderEliminar
    Respuestas
    1. Echa un vistazo a esta entrada. De la misma manera que aquí añadíamos a los gadgets una sombra que simulaba un neón, se le puede añadir un background o fondo. Es sencillo sabiendo la clase CSS que hay que atacar.

      Eliminar