Hola Foro :
Aunque el ícono del tema sugiera que voy a proponer una idea, en realidad quiero hacer no una sino dos preguntas.
Hace unos días respondí una duda sobre los
em, y me puse a mirar disquetes para encontrar algún ejemplo de página hecha con esta medida. Y como de costumbre encontré algo que había olvidado. Tiempo atrás empecé a simular listas con
div y
dd (también con tablas, pero como en este foro hay gente muy suceptible voy a omitir ese código), y descubrí que el objetivo era usar 'caracteres personalizados' a modo de viñetas.
Por supuesto que al encontrar algo nuevo con qué entretenerme olvidé los
em; y es porque había un par de escripts para ordenar y animar las viñetas.
Era mi gran oportunidad para empezar a experimentar con nodos, así que reescribí los códigos y los probé en
IExplorer. El mayor problema lo tuve con la diferente interpretación que hace el bendito navegador entre las versiones
5 y
6 de los
em y lo solucioné al la manera
Microsoft. Pero cuando probé los escripts en
FF fue una tragedia.
Ya me había olvidado de que estos navegadores interpretan distinto los nodos, y tuve que inventar un engendro para corregirlo sin tener que hacer una línea de código para cada uno. El ejemplo es éste :
Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd"><html>
<head>
<title>VIÑETAS PERSONALIZADAS.</title>
<script type="text/javascript">
var animacion = ["▀","▐","▄","▌"];
var vA= 0;
var paso , undefined;
function anima(){
var vAnim = document.getElementById("listaAnim").childNodes;
vA = (vA == animacion.length-1)? vA=0 : vA += 1;
for(i=0; i<vAnim.length; i++){
if(vAnim[i].innerHTML != undefined){
var nVineta = (vAnim[i].childNodes[0].innerHTML != undefined) ? 0 : 1
vAnim[i].childNodes[nVineta].innerHTML = animacion[vA];
}
}
paso = setTimeout("anima()" , 100);
}
var vSIni = 913; /*Alfa mayúscula*/
var vSFin = 969; /*omega minúscula*/
var vS = vSIni; /*primer ítem (p.e. 922 empieza con Kappa)*/
var excep = "930 938 939 940 941 942 943 944 962"; /*Caracteres acentuados (Separar con espacios)*/
function secuencia(){
var cSecuen = document.getElementById("listaSecuen").childNodes;
for(c=0; c<cSecuen.length; c++){
var vSecuen = cSecuen[c].childNodes;
for(i=0; i<vSecuen.length; i++){
while((" "+excep+" ").indexOf(" "+vS+" ") > -1) vS += 1;
if(vSecuen[i].innerHTML != undefined){
var sVineta= (vSecuen[i].childNodes[0].innerHTML != undefined) ? 0 : 1;
vSecuen[i].childNodes[sVineta].innerHTML = "&#" +vS+ ";";
vS = (vS == vSFin)? vS = vSIni : vS += 1;
}
}
}
}
</script>
<style type="text/css">
body {font-size:125%; color:#000000; background-color:#ffffff; }
h3 {margin-left:0.5em; }
p {font-size:0.75em; }
#listaAnim {width:10em; border:1px solid black; font-size:1em; }
#listaAnim dd {font-size:0.75em; position:relative; margin:1em 4em; }
.vineta , .vinetaAnim {position:absolute; left:-2em; top:0; font-size:1.2em; font-weight:bold;
font-family:"Times New Roman", Arial, serif; }
#listaSecuen {position:relative; width:32em; height:10em; margin:1em; }
.lista {position:relative; top:0; margin:1em 0 1em 4em; font-size:0.7em; }
#listaSecuen .vinetaS {color:#000000; background-color:#ffff66; font-weight:bold;
position:absolute; left:-1em; top:0; }
.listaS {position:relative; top:0; left:0; margin:1em; font-size:0.7em; }
.col {position:relative; float:left; margin-left:1.5em; }
.lista0 {left:0em; }
.lista1 {left:5em; }
.lista2 {left:10em; }
.lista3 {left:15em; }
.casino {font-size:1em; }
.casino dd {font-size:0.75em; position:relative; margin:1em 4em; }
dd .vinetaC {font-size:1.2em; width:1.2em; text-align:center;
font-family:arial,"times new roman", serif; position:absolute;
margin:0 -2em; }
.rojo {color:#ff0000; background-color:#ffffff; }
.negro {color:#000000; background-color:#ffffff; }
</style>
</head>
<body>
<!--[if lt IE 5.5000]>
<style>
.vineta , .vinetaAnim {left:1.2em; }
</style>
<![endif]-->
<h2>Listas simuladas. (IE6 / FF5)</h2>
<h3>Usa caracteres ASCII / Unicode como viñetas.</h3>
<h4>Con <tt>dl</tt> y <tt>dd</tt>.</h4>
<dl class="casino">
<dd><span class="vinetaC negro">♠</span>Picas.<br />
(spades)</dd>
<dd><span class="vinetaC negro">♣</span>Tréboles<br />
(clubs)</dd>
<dd><span class="vinetaC rojo">♦</span>Diamantes<br />
(diams)</dd>
<dd><span class="vinetaC rojo">♥</span>Corazones<br />
(hearts)</dd>
</dl>
<h4>Simulada con <tt>div</tt>.</h4>
<div class="lista">
<span class="vineta">☼</span>
Ítem con viñeta <br />
personalizada. <br />
</div>
<div class="lista">
<span class="vineta">⌐</span>
Ítem con viñeta <br />
personalizada. <br />
</div>
<div class="lista">
<span class="vineta">♫</span>
Ítem con viñeta <br />
personalizada. <br />
</div>
<div class="lista">
<span class="vineta">≈</span>
Ítem con viñeta <br />
personalizada. <br />
</div>
<h3>Con animación <i>mouseover</i>.</h3>
<dl id="listaAnim" onmouseover="anima()" onmouseout="clearTimeout(paso)">
<dd><span class="vinetaAnim">▀</span>Ítem con viñeta <br />
animada <br />
uno.
</dd>
<dd><span class="vinetaAnim">▀</span>Ítem con viñeta <br />
animada <br />
dos.
</dd>
<dd><span class="vinetaAnim">▀</span>Ítem con viñeta <br />
animada <br />
tres.
</dd>
</dl>
<h3>Usa una secuencia ordenada.</h3>
<div id="listaSecuen">
<div class="col">
<div class="listaS">
<span class="vinetaS"> </span>
0 Un ítem <br />
relleno relleno
</div>
<div class="listaS">
<span class="vinetaS"> </span>
1 Otro ítem <br />
relleno relleno
</div>
<div class="listaS">
<span class="vinetaS"> </span>
2 Otro ítem
</div>
<div class="listaS">
<span class="vinetaS"> </span>
3 Otro ítem <br />
relleno relleno
</div>
</div>
<div class="col">
<div class="listaS">
<span class="vinetaS"> </span>
4 Un ítem <br />
relleno relleno
</div>
<div class="listaS">
<span class="vinetaS"> </span>
5 Otro ítem <br />
relleno relleno
</div>
<div class="listaS">
<span class="vinetaS"> </span>
6 Otro ítem
</div>
<div class="listaS">
<span class="vinetaS"> </span>
7 Otro ítem <br />
relleno relleno
</div>
</div>
<div class="col">
<div class="listaS">
<span class="vinetaS"> </span>
8 Un ítem <br />
relleno relleno
</div>
<div class="listaS">
<span class="vinetaS"> </span>
9 Otro ítem <br />
relleno relleno
</div>
<div class="listaS">
<span class="vinetaS"> </span>
10 Otro ítem
</div>
<div class="listaS">
<span class="vinetaS"> </span>
11 Otro ítem <br />
relleno relleno
</div>
</div>
<div class="col">
<div class="listaS">
<span class="vinetaS"> </span>
12 Un ítem <br />
relleno relleno
</div>
<div class="listaS">
<span class="vinetaS"> </span>
13 Otro ítem <br />
relleno relleno
</div>
<div class="listaS">
<span class="vinetaS"> </span>
14 Otro ítem
</div>
<div class="listaS">
<span class="vinetaS"> </span>
15 Otro ítem <br />
relleno relleno
</div>
</div>
</div>
<input type="button" value="Ver Viñetas Griegas" onclick="secuencia()" />
<p>
La secuencia de las viñetas coincide con el orden Unicode. Con un nuevo click
se puede ver la progresión (Mayúsculas, minúsculas y recomienza).
El escript ignora los caracteres acentuados que estan entre la 'Ω' y la 'α'.
</p>
<p>
<a href="http://validator.w3.org/check?uri=referer"><img
src="http://www.w3.org/Icons/valid-html401"
alt="Valid HTML 4.01 Transitional" height="31" width="88"></a>
</p>
</body>
</html>
Y las preguntas son :
- ¿Hay alguna forma de usar unicode en los list-style?.
- ¿Hay alguna manera elegante de hacer que un escript no caiga en nodos 'vacíos' en Firefox? (me pareció ver una, pero dentro de algún código que no recuerdo y por eso no lo puedo buscar).
Gracias