jueves, 20 de noviembre de 2014

Menu árbol JS y CSS

A partir de un listado de links se crea un menú en arbol usando javascript no intrusivo. En dispositivos sin javascript queda cargado el listado de links a la vista.
HTML
Se trata de crear una lista no ordenada de links con un id con html
<ul id="miMenu">
  <li><a href="documento1.html">Link 1</a></li>
  <li>Categor&iacute;a 1 
    <ul>
      <li><a href="documento2html">Link 2</a></li>
      <li><a href="documento3.html">Link 3</a></li>
    </ul>
  </li>
  <li>Categor&iacute;a 2 
    <ul>
      <li><a href="documento4.html">Link 4</a></li>
      <li>Otra categor&iacute;a 
        <ul>
          <li><a href="documento5.html">Link 5</a></li>
        </ul>
      </li>
      <li><a href="documento6.html">Link 6</a></li>
    </ul>
  </li>
  <li><a href="documento7.html">Link 7</a></li>
</ul>
Javascript
Debajo de la lista ponemos la llamada al script pasándole el id del menú como argumento
<script type="text/javascript">
<!--
iniciaMenu('miMenu');
//-->
</script> 
Si se quiere usar más de una lista con más de un menú en el mismo documento se hace otra llamada a la función iniciaMenu pasándole el id de la otra lista.
<script type="text/javascript">
<!--
iniciaMenu('miMenu');
iniciaMenu('miOtroMenu');
//-->
</script> 
Vinculamos el archivo javascript  a todos los documentos que hayan de usarlo.
<script type="text/javascript" src="menuarbolaccesible.js"></script> 
Dentro del archivo menuarbolaccesible.js podemos determinar si los links se abrirán en la propia ventana o serán lanzados en ventana nueva.
var abrirenVentanaNueva = 0 // 0 para que todos los links se abran en la misma ventana. 1 para abrir en nueva ventana
El resto de aspectos se configuran desde la hoja de estilos
CSS
Vincular la hoja de estilos a todos los documentos que hayan de mostrar el menú en arbol accesible.
<link href="menuarbolaccesible.css" rel="stylesheet" type="text/css" />

Imágenes
Carpeta abierta seleccionada Carpeta abierta  Carpeta cerrada seleccionada Carpeta cerrada Documento seleccionado Documento


código javascript
/**************************************************************** Menú en arbol accesible. 28-Jul-07 Autor tunait http://javascript.tunait.com/ Script de libre uso mientras se mantengan intactos los créditos de autor. ****************************************************************/ var abrirenVentanaNueva = 0; var tagApartado = 'a'; var docActual = location.href; function iniciaMenu(menu) { idMenu = menu menu = document.getElementById(menu); for(var m = 0; m < menu.getElementsByTagName('ul').length; m++) { el = menu.getElementsByTagName('ul')[m] el.style.display = 'none'; el.className = 'menuDoc'; el.parentNode.className = 'cCerrada' textoNodo = el.parentNode.firstChild.nodeValue; nuevoNodo = document.createElement(tagApartado); if(tagApartado == 'a') nuevoNodo.href = '#' + textoNodo; nuevoNodo.className = 'tagApartado'; nuevoNodo.appendChild(document.createTextNode(textoNodo)); el.parentNode.replaceChild(nuevoNodo,el.parentNode.firstChild); nuevoNodo.onclick = function() { hijo = sacaPrimerHijo(this.parentNode, 'ul') hijo.style.display = hijo.style.display == 'none' ? 'block' : 'none'; if(this.parentNode.className == 'cCerrada' || this.parentNode.className == 'cAbierta') { this.parentNode.className = this.parentNode.className == 'cCerrada' ? 'cAbierta' : 'cCerrada' } else { this.parentNode.className = this.parentNode.className == 'cAbiertaSeleccionada' ? 'cCerradaSeleccionada' : 'cAbiertaSeleccionada' } return false; } } documentoActual(idMenu) } function sacaPrimerHijo(obj, tag) { for(var m = 0; m < obj.childNodes.length; m++) { if(obj.childNodes[m].tagName && obj.childNodes[m].tagName.toLowerCase() == tag) { return obj.childNodes[m]; break; } } } function documentoActual(menu) { idMenu = menu menu = document.getElementById(menu); for(var s = 0; s < menu.getElementsByTagName('a').length; s++) { if(abrirenVentanaNueva) menu.getElementsByTagName('a')[s].target = 'blank'; enlace = menu.getElementsByTagName('a')[s].href if(enlace == docActual) { menu.getElementsByTagName('a')[s].parentNode.className = 'documentoActual' } if(enlace == docActual && menu.getElementsByTagName('a')[s].parentNode.parentNode.id != idMenu) { menu.getElementsByTagName('a')[s].parentNode.parentNode.parentNode.className = 'cAbiertaSeleccionada' var enlaceCatPadre = sacaPrimerHijo(menu.getElementsByTagName('a')[s].parentNode.parentNode.parentNode, 'a') enlaceCatPadre.onclick = function() { hijo = sacaPrimerHijo(this.parentNode, 'ul') hijo.style.display = hijo.style.display == 'none' ? 'block' : 'none'; this.parentNode.className = this.parentNode.className == 'cAbiertaSeleccionada' ? 'cCerradaSeleccionada' : 'cAbiertaSeleccionada' return false; } nodoSig = sacaPrimerHijo(menu.getElementsByTagName('a')[s].parentNode.parentNode.parentNode, 'ul') nodoSig.style.display = 'block';/**/ abrePadre(idMenu, enlaceCatPadre.parentNode) } } } function abrePadre(idmenu, obj) { obj.parentNode.parentNode.className = 'cAbiertaSeleccionada' var nodoSig = sacaPrimerHijo(obj, 'ul') nodoSig.style.display = 'block'; if(obj.parentNode.id != idmenu) { abrePadre(idmenu, obj.parentNode.parentNode) } }
código css
#menu1 {
  font-size: 90%;
  list-style-image: url(imasmenu/doct.gif);
  border: 1px solid #006699;
  width: 200px;
  padding-top: .5em;
  padding-bottom: .5em;
  list-style: inside;
}
html > body #menu1{
  list-style: outside;
}
.cAbierta{
  list-style-type: none;
  list-style-image: url(imasmenu/carpabiertat.gif);
}
.cAbiertaSeleccionada{
  list-style-type: none;
  list-style-image: url(imasmenu/carpabiertasel.gif);
}
.cCerradaSeleccionada{
  list-style-type: none;
  list-style-image: url(imasmenu/carpcerradasel.gif);
}
.cCerrada{
  list-style-type: none;
  list-style-image: url(imasmenu/carpcerradat.gif);
}
.menuDoc{
  list-style-type: none;
  list-style-image: url(imasmenu/doct.gif);
}
.tagApartado, a.tagApartado{
  cursor: pointer;
  font-weight: bold;
  text-decoration: none;
}
.documentoActual{
  list-style-image: url(imasmenu/docsel.gif);
}

#menu1 a {
  color: #006699;
}
.documentoActual a{
  color:#993300;
}

Tablas: Bordes margenes y rellenos

Modos de bordes: border-collapse

Las tablas tienen dos modos de presentación de los bordes que se selecciona con la propiedad border-collapse: separado (separate) y colapsado (collapse). En el modo separado existe un hueco entre los bordes de cada celda, mientras que en el modo colapsado los bordes se superponen. Si no se establece el modo de presentación, los navegadores aplican el modo separado.
Correcto en FirefoxCorrecto en Internet ExplorerCorrecto en Chrome
table { 
}
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Correcto en FirefoxCorrecto en Internet ExplorerCorrecto en Chrome
table { 
  border-collapse: separate; 
}
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Correcto en FirefoxCorrecto en Internet ExplorerCorrecto en Chrome
table { 
  border-collapse: collapse; 
}
Leyenda
Celda 1Celda 2
Celda 3Celda 4

Bordes de los elementos <table><tbody><tr> y <td>

En el modo separado, los navegadores representan únicamente el borde de la tabla (<table>) y el borde de las celdas (<td>).
En el modo colapsado, los navegadores representan los bordes de todos los elementos: la tabla (<table>), los cuerpos de tabla (<tbody>), las filas (<tr>) y las celdas (<td>).
Nota: Tanto en modo separado como colapsado, Chrome muestra el borde de las celdas del color definido para <table>, <tbody> y <tr>, pero sin aplicar el grosor.
Correcto en Firefox Correcto en Internet Explorer Correcto en ChromeEn cada columna se aplica únicamente la propiedad indicada en la celda superior
table {
  border: red 5px solid;}
tbody {
  border: blue 5px solid;}
tr {
  border: green 5px solid;}
td {
  border: orange 5px solid;}
border-
collapse
separate
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
collapse
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4

En el modo colapsado, si en una misma tabla hay bordes de elementos distintos que se superponen, los navegadores dibujan el de mayor grosor (o el más interior, si son del mismo grosor).
Correcto en Firefox Correcto en Internet Explorer Correcto en ChromeEn cada columna se aplica la propiedad indicada en la celda superior y las anteriores.
border-collapsecollapse
table {
  border: red 5px solid;}
+tbody {
  border: blue 5px solid;}
+tr {
  border: green 5px solid;}
+td {
  border: orange 5px solid;}
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
table {
  border: red 3px solid;}
+tbody {
  border: blue 5px solid;}
+tr {
  border: green 7px solid;}
+td {
  border: orange 9px solid;}
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
table {
  border: red 9px solid;}
+tbody {
  border: blue 7px solid;}
+tr {
  border: green 5px solid;}
+td {
  border: orange 3px solid;}
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4

Márgenes en los elementos <table><tbody><tr> y <td>

En el modo separado, los navegadores representan el margin y el padding de la tabla (<table>) y el padding de las celdas (<td>).
En el modo colapsado, los navegadores representan únicamente el margin de la tabla (<table>) y el padding de las celdas (<td>).
Correcto en Firefox Correcto en Internet Explorer Correcto en ChromeEn cada columna se aplica únicamente la propiedad indicada en la celda superior
table {
  margin: 15px;
  padding: 15px;}
tbody {
  margin: 15px;
  padding: 15px;}
tr { 
  margin: 15px;
  padding: 15px;}
td {
  margin: 15px;
  padding: 15px;}
border-
collapse
separate
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
collapse
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Correcto en Firefox Correcto en Internet Explorer Correcto en ChromeEn cada columna se aplica la propiedad indicada en la celda superior y las anteriores.
table {
  margin: 15px;
  padding: 15px;}
+tbody {
  margin: 15px;
  padding: 15px;}
+tr { 
  margin: 15px;
  padding: 15px;}
+td {
  margin: 15px;
  padding: 15px;}
border-
collapse
separate
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
collapse
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4

Fondos en los elementos <table><tbody><tr> y <td>

En ambos modos (colapsado y separado), los navegadores representan los fondos de los elementos <table><tbody><tr> y <td>. Lógicamente, el fondo de la celda tiene prioridad sobre el fondo de la fila y así sucesivamente.
Correcto en Firefox Correcto en Internet Explorer Correcto en ChromeEn cada columna se aplica únicamente la propiedad indicada en la celda superior
table {
  background: red; }
tbody {
  background: blue; }
tr {
  background: green; }
td {
  background: orange; }
border-
collapse
separate
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
collapse
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Correcto en Firefox Correcto en Internet Explorer Correcto en ChromeEn cada columna se aplica la propiedad indicada en la celda superior y las anteriores.
table {
  background: red; }
+tbody {
  background: blue; }
+tr {
  background: green; }
+td {
  background: orange; }
border-
collapse
separate
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
collapse
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Celda 1Celda 2
Celda 3Celda 4

Bordes, mágenes y fondos de la leyenda (<caption>)

En el modo separado, los navegadores representan el borde de la leyenda (<caption>) de la misma manera.
En el modo colapsado, los navegadores representan el borde de la leyenda (<caption>) de la misma manera.
Correcto en Firefox Correcto en Internet Explorer Correcto en ChromeEn cada columna se aplica únicamente la propiedad indicada en la celda superior, además de caption { borderblack 5px solid; }
table {
  border: red 5px solid; }
tbody {
  border: blue 5px solid; }
tr {
  border: green 5px solid; }
td {
  border: orange 5px solid; }
border-
collapse
separate
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
collapse
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Correcto en Firefox Correcto en Internet Explorer Correcto en ChromeEn cada columna se aplica la propiedad indicada en la celda superior y las anteriores, además de caption { borderblack 10px solid; }
table {
  border: red 5px solid; }
+tbody {
  border: blue 6px solid; }
+tr {
  border: green 7px solid; }
+td {
  border: orange 9px solid; }
border-
collapse
separate
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
collapse
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4

En ambos modos (separado y colapsado), los navegadores representan el margin y el padding de la leyenda (<caption>).
Correcto en Firefox Correcto en Internet Explorer Correcto en ChromeEn cada columna se aplica únicamente la propiedad indicada en la celda superior, además de caption { background-colororangemargin: 15px; padding: 15px; }
table {
  margin: 15px;
  padding: 15px; }
tbody {
  margin: 15px;
  padding: 15px;}
tr {
  margin: 15px;
  padding: 15px;}
td {
  margin: 15px;
  padding: 15px;}
border-
collapse
separate
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
collapse
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4

En ambos modos (separado y colapsado), los navegadores representan el fondo de la leyenda (<caption>).
Correcto en Firefox Correcto en Internet Explorer Correcto en ChromeEn cada columna se aplica únicamente la propiedad indicada en la celda superior, además de caption { background-colororange; }
table {
  background: red; }
tbody {
  background: blue; }
tr {
  background: green; }
td {
  background: orange; }
border-
collapse
separate
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
collapse
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4
Leyenda
Celda 1Celda 2
Celda 3Celda 4

Bordes de los elementos <col /> y <colgroup>

los navegadores representan los bordes de las etiquetas <col /> y <colgroup>.
Correcto en Firefox Correcto en Internet Explorer Correcto en Chrome
colgroup {
  border: 5px black solid;}
col {
  border: 5px red solid;}
colgroup {
  border: 5px black solid;}
col {
  border: 5px red solid;}
colgroup {
  border: 7px black solid;}
col {
  border: 5px red solid;}
<colgroup span="2">
</colgroup>
Esto es la leyenda
Celda 1Celda 2Celda 3
Celda 4Celda 5Celda 6
Esto es la leyenda
Celda 1Celda 2Celda 3
Celda 4Celda 5Celda 6
Esto es la leyenda
Celda 1Celda 2Celda 3
Celda 4Celda 5Celda 6
Esto es la leyenda
Celda 1Celda 2Celda 3
Celda 4Celda 5Celda 6
<colgroup>
  <col /><col />
</colgroup>
Esto es la leyenda
Celda 1Celda 2Celda 3
Celda 4Celda 5Celda 6
Esto es la leyenda
Celda 1Celda 2Celda 3
Celda 4Celda 5Celda 6
Esto es la leyenda
Celda 1Celda 2Celda 3
Celda 4Celda 5Celda 6
Esto es la leyenda
Celda 1Celda 2Celda 3
Celda 4Celda 5Celda 6
<colgroup>
  <col span="2" />
</colgroup>
Esto es la leyenda
Celda 1Celda 2Celda 3
Celda 4Celda 5Celda 6
Esto es la leyenda
Celda 1Celda 2Celda 3
Celda 4Celda 5Celda 6
Esto es la leyenda
Celda 1Celda 2Celda 3
Celda 4Celda 5Celda 6
Esto es la leyenda
Celda 1Celda 2Celda 3
Celda 4Celda 5Celda 6