La Invasión de los Body Switchers
- Ene
- 05
escribe tu comentario! 326 palabras - 1 hits
Andy Clarke y James Edwards, nos muestran una tecnica con la que incluir intercambiadores de estilos accesibles.
Traducción y/o adaptación del artículo , publicado el 19 de Noviembre del 2004 en A List Apart Magazine , escrito por:
This article was originally published by A List Apart Magazine (alistapart.com). It appears by permission of the author and A List Apart.
Por Andy Clarke Y James Edwards
Desde su publicación en el año 2001, el intercambiador de estilos css realizado por Paul Sowden, ha sido descargado y utilizado por cientos de diseñadores y desarrolladores, y se han realizado todo tipo de adaptaciones cliente-servidor.
Habiendo usado el “script” de Paul en numerosos proyectos, he empezado a plantearme como podría mejorarse, para ofrecer a los usuarios más opciones y/o mejoras en cuanto a la accesibilidad, por lo que me dirijo a mi buen amigo “Brothercake” con la intención de trasladar mis ideas a la realidad, y así es como nació “La invasión de los Body Switchers”.
Un repaso del “script” original
Una de sus mejores características, es su facilidad de implementación.
Los anclajes que se encargan de las funciones de intercambio, generalmente se encuentran presentes en la estructura del documento, lo que supone un problema si la tecnología “JavaScript” no esta presente, y los anclajes # comunmente usados resultan una carga innecesaria.
<a href="#" onclick="setActiveStyleSheet('default'); return false;">Switcher</a>
La solución original tambien se basa en multiples hojas de estilo, usando elementos </link> y “stylesheet” / “alternate stylesheet” semánticos, esto incrementa notablemente el numero de peticiones realizadas al servidor, pero lo que es más importante, este metodo no nos permite seleccionar estilos de manera independiente segun el tipo de medio utilizado.
¿No sería fántastico si pudieramos hacer esto sin añadir nada a la estructura, usando únicamente “JavaScript” y un fichero CSS?.¿Y no sería incluso más fantástico si pudieramos modificar el estílo según el tipo de medio de manera independiente, ofreciendo al usuario una sencilla herramienta para seleccionar sus preferencias, que se quedaran guardadas en una “cookie” hasta que se vuelvan a cambiar.
Ahora ya podemos pasar al “Body Switcher”.
El concepto
La invasión de los “Body Switchers” se puede definir como infinitamente extensible, pudiendo asignar cualquier numero de opciones y tipos de medio, todo ello desde un único fichero “JavaScript” y CSS. El funcionamiento, es simple, se añaden una o mas clases unicas al <body> del documento; definiendo los estilos utilizando selectores descendentes.
Nuestro proyecto, requiere que abandonemos los “stylesheet” convencionales y los “alternate stylesheet” semánticos, lo que no me supone ningún problema, puesto que:
- Muchos navegadores no tienen implementado un intercambiador de estilos de forma nativa.
- Aquellos que lo llevan incorporado, no aplican ninguna persistencia a las hojas de estilo alternativas.
Construyendo el menu
Antes de empezar, echa un vistazo al resultado final.
Si descargas los ficheros necesarios ahora, podras usarlos como referencia en el momento que nos adentremos en cada uno de los componentes:
El codigo XHTML
Primero añade varios contenedores vacios para los intercambiadores, yo he usado aqui un <div> para incluir el intercambiador.
<div id="screen-switcher"></div>
Para cada intercambiador adicional que desees incluir , se necesitara un contenedor extra. Por ejemplo, un contenedor adicional para cambiar el estilo de impresión.
<div id="screen-switcher"></div>
<div id="print-switcher"></div>
O incluso el estilo de proyección.
<div id="screen-switcher"></div>
<div id="print-switcher"></div>
<div id="projector-switcher"></div>
Las herramintas de intercambio se crearan dentro de estos contenedores solo en el caso de que el navegador del usuario tenga soporte para “JavaScript”, dejando los contenedores vacios de cuando no exista el soporte, consiguiendo asi, que la semantica del documento se mantenga.
El “script”
La creación del script es sumamente sencilla. Priemro crearemos el formulario definiendo la id de su contenedor y la etiqueta de texto.
- var screenSwitcher =
- new bodySwitcher(
- 'screen-switcher',
- 'Screen styles'
- );
Luego puedes añadir cualquier numero de clases y sus etiquetas, para aplicarlas al control del intercambiador:
screenSwitcher.defineClass('default','Normal contrast');
screenSwitcher.defineClass('hight','Hight contrast');
Añadiendo nuevos tipos de medio
Para dar al usuario la posibilidad de elegir entre diferentes estilos de impresión, sin afectar al modo de presentación en pantalla, añadiremos las opciones de impresión al “script”.
- var printSwitcher =
- new bodySwitcher(
- 'print-switcher',
- 'Print styles'
- );
- printSwitcher.defineClass(
- 'default','Default'
- );
- printSwitcher.defineClass(
- 'small-sans','Small sans'
- );
- printSwitcher.defineClass(
- 'large-serif','Large serif'
- );
Se pueden añadir mas tipos de medios, como por ejemplo, ordenadores de mano, o dispositivos de proyección.
- var projectionSwitcher =
- new bodySwitcher(
- 'projection-switcher',
- 'Projection styles'
- );
- etc.
- var handheldSwitcher =
- new bodySwitcher(
- 'handheld-switcher',
- 'Handheld styles'
- );
- etc.
La única restricción que tenemos, es que cada nombre de class ha de ser único, incluso entre los diferentes tipos de medio.
La hoja de estilos
Una única hoja de estilo puede contener todas las opciones, y tipos de medio seleccionables por el usuario. Cualquier regla CSS puede ser aplicada a esta hoja de estilos, simplemente usando selectores descendentes desde las clases <body> adicionales que comentabamos anteriormente.
Ejemplo de estilos de pantalla.
- @media screen
- {
- body {
- background : #fff;
- color : #666;
- }
- body.high {
- color: #000;
- }
- body.highvisibility {
- background : #000;
- color : #ff0;
- }
- }
Ejemplo de estilos de impresión.
- @media print
- {
- body {
- font: 100% "Lucida Sans Unicode",verdana,sans-serif;
- }
- body.small-sans {
- font: 80% "Lucida Sans Unicode",verdana,sans-serif;
- }
- body.large-serif {
- font: 120% "Times New Roman",times,serif;
- }
- }
Si los necesitaramos, tambien podemos añadir estilos para medios adicionales.
- @media projection
- {
- etc.
- }
- @media handheld {
- etc.
- }
Aplicando estilos a los controles
Los controles del intercambiador estan basados en una estructura accesible y semantica, y pueden ser estilizados de manera acorde al diseño del sitio. Aquí esta el codigo HTML usado para cada control; Os dejo el estilo a vosotros.
- <form action="">
- <fieldset>
- <label for="select-screen-switcher">
- <span>Screen styles</span>
- <select id="select-screen-switcher">
- <option value="default">Normal contrast</option>
- <option value="high">High contrast</option>
- <option value="highvisibility">High visibility</option>
- </select>
- </label>
- </fieldset>
- </form>
Y esto es todo lo que conlleva
Esto es todo. Echa otra ojeada al resultado final - un moderno intercambiador de estilos que nos permite cambiar entre diferentes tipos de medio, y les da a los usuarios mucho mayor control sobre el resultado de tus páginas.
El principio es infinitamente extensible, con lo que puedes dividirlo en preferencias individuales para la tipografía, los colores, la estructura o la orientación.
La excepción
La invasión de los “Body Switchers” no funciona (pero se degrada amigablemente) en Mac/IE5.
ningún comentario por el momento