Feb
11
2009
7

Visor de medios (overlay) sobre una capa (layer) semitransparente

Este código que he creado y utilizo ya para diversos proyectos en distintas variantes sirve para hacer aparecer "visores" de contenido (cajas) que aparecen sobre un velo semitransparente sobre el contenido de la página actual.

Por ejemplo, pinchamos sobre un enlace, la pantalla se oscurece (sin dejarse de ver el contenido de la web) y aparece en primer plano un cuadro donde podemos ver, por ejemplo, un texto, una imagen ampliada, un video, o una película flash.

Esto es muy útil para evitar recurrir siempre a las pop-up windows, o nuevas ventanas, debido a los blockers que mucha gente tiene activados (bloqueadores de pop-up)

El script integra el CSS cross-browser (útil en diversos navegadores) para las propiedades de opacidad y transparencia opacity, filter, y alpha vistas en un post anterior.

Incluir height:100% en el estilo del body sirve para que el "velo" semitransparente ocupe toda la pantalla en páginas que no ocupan la totalidad del visor del navegador.

Es importante la propiedad z-index de las capas (layers, div's) que contienen al visor y al "velo"... Recordemos, por cierto, que esta propiedad depende de haber declarado la position del objeto (Referencia, fijarse en la frase "For a positioned box, the 'z-index' property specifies...", muy importante el stacking).

Si os fijáis, el enlace <a href="#" onclick="open_overlay();return false;"> incluye, tras la llamada a la función, el javascript return false; para que el # indicado en el href no haga que la página suba hasta su top al hacer click (ya que es el evento onclick el que dispara la función javascript). Quitadlo para ver a lo que me refiero.

Más adelante intentaré hacer que el visor se ajuste (resize) según el tamaño del contenido que va a albergar, así como un efecto de fundido o fade-in al surgir el "velo" semitransparente (el cual, por cierto, no tiene por qué ser negro).

EDITO: El código está arreglado. Puedes verlo funcionando aquí.

Espero que os sea útil.

<html>
<head>
<style type="text/css">
#overlay {
visibility:hidden;
display:none;
position:absolute;
top:0px;
left: 0px;
z-index: 9;
width: 100%;
height: 100%;
background-color: #000000;
opacity:0.65;
}
#media {
visibility:hidden;
position:absolute;
display:none;
left: 30%;
top:65px;
z-index: 10;
width: 450px;
height: 300px;
background-color: #fff;
border:1px solid #454545;
}
*:first-child+html body #overlay {
filter: alpha(opacity=65);
} * html #overlay {
filter: alpha(opacity=65);
}
</style>
<script language="javascript">
function open_overlay(mediatype, url) {
document.getElementById("overlay").style.display="block";
document.getElementById("media").style.display="block";
document.getElementById("overlay").style.visibility="visible";
document.getElementById("media").style.visibility="visible";
var _docHeight = document.body.offsetHeight;
document.getElementById("overlay").style.height=_docHeight;
var cadena="Sustituir por texto, img , video, swf...";
document.getElementById("media").innerHTML=cadena;
}
function close_overlay() {
document.getElementById("overlay").style.visibility="hidden";
document.getElementById("media").style.visibility="hidden";
}
</script>
</head>
<body style="height:100%;margin:0;padding:0">
<a href="#" onClick="open_overlay();return false;">Imagen o texto sobre la que hacer click para abrir la capa.</a>
<div id="overlay" onClick="close_overlay()">
</div>
<div id="media">
</div>
</body>
</html>

No me interesaNo está malBienÚtilMuy bien, muy útil (7 votes, average: 4.71 out of 5)
Loading ... Loading ...
Dec
19
2008
1

Opacity / Transparencia estándar

W3C CSS Validated

Si queremos usar en CSS la propiedad opacity, veremos que funciona perfectamente en Mozilla (usando valores entre 0 y 1 para indicar el nivel de transparencia u opacidad), pero que en IE el resultado sigue siendo de opacidad total.

Para solventar este problema, podemos usar de forma conjunta (además de opacity) el hack html>body incluyendo la propiedad filter:alpha con valores de opacity entre 0 y 100, como en el ejemplo que véis más abajo. El problema es la validación estricta, pues el estándar no entiende la propiedad filter, ya que desgraciadamente no existe un estándar para opacidad.

#overlay {
opacity:0.65;
}
html>body #overlay {
filter: alpha(opacity=65);
}

Sin embargo, existe un código javascript que permite que IE soporte opacity. Está aquí. Gracias a webosiris.

Via | Foros del Web

No me interesaNo está malBienÚtilMuy bien, muy útil (No Ratings Yet)
Loading ... Loading ...
Post de cabezaBomba en la(s) categoría(s): CSS,Web Standards | Tags: , , , , , , , , ,

Creative Commons License
Webcidentes by Alejandro Garcia is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España License.
Based on a work at www.cabezabomba.com.