Mostrando entradas con la etiqueta CSS. Mostrar todas las entradas
Mostrando entradas con la etiqueta CSS. Mostrar todas las entradas

martes, 21 de julio de 2009

Menú dinámico / activo con categorías y sub-categorías en PHP y CSS

Después del post (Menú activo con CSS y PHP), me llego una pregunta sobre cómo mantener seleccionada la categoría, tras haber dado click en una sub-categoría, es decir:

Tengo un menú horizontal, el cual tengo las categorías principales: Inicio - Servicios - Portafolio, a su vez tengo un menú vertical con las sub-categorías, ejemplo: Servicios -> Desarrollo web, quiero mantener activo el item de la categoría y además el item de la sub-categoría al entrar a ella.

¿Cómo se hace esto?

Tomaremos como ejemplo el CSS del post anterior para dar diseño a nuestros menus, de tal forma que quedará lo siguiente:

#menu, #menu-vertical{
padding: 0;
width: 100%;
background: transparent;
voice-family: "\"}\"";
voice-family: inherit;

}

#menu ul{
font: bold 11px Arial;
margin:0;
margin-left: 20px;
padding: 0;
list-style: none;

}

#menu li{
display: inline;
margin: 0 2px 0 0;
padding: 0;
text-transform:uppercase;

}

#menu-vertical li{
display:block;
margin: 15px 0 0 0;
padding: 0;
text-transform:uppercase;
}

#menu a {
float: left;
display: block;
color: white;
margin: 0 1px 0 0; /*Margenes entre el menu*/
padding: 5px 10px;
text-decoration: none;
letter-spacing: 1px;
background-color: black; /*Color por Default*/
border-bottom: 1px solid white;
}

#menu-vertical a {
color: white;
margin-left:0px;
padding:5px;
text-decoration: none;
letter-spacing: 1px;
background-color: black; /*Color por Default*/
border-bottom: 1px solid white;
}

#menu a:hover{
background-color: #535353; /*Menu hover bgcolor*/
}

#menu #current a, #menu-vertical #current a{ /*TAB seleccionado, Página Actual*/
background-color: #80931D;
border-color: #80931D;

}
.clean {clear:both;}

HTML

<div id="menu">
<ul>
<li <?php Menu("/lab/menuactive/active-menu.php","");?> ><a href="active-menu.php" title="Inicio" class="active">INICIO</a></li>
<li <?php Menu("/lab/menuactive/active-menu2.php",""); ?> ><a href="active-menu2.php" title="segundo" class="active">SEGUNDO</a></li>
</ul></div>
<div class="clean"></div>
<div id="menu-vertical">
<ul>
<li <?php Menu("/lab/menuactive/active-menu.php","/lab/menuactive/active-menu-principal.php"); ?> ><a href="active-menu-principal.php" title="Inicio" class="active">Principal</a></li>
<li <?php Menu("/lab/menuactive/active-menu.php","/lab/menuactive/active-menu-principal2.php"); ?> ><a href="active-menu-principal2.php" title="segundo" class="active">Secundario</a></li>

<li <?php Menu("/lab/menuactive/active-menu2.php","/lab/menuactive/active-menu-principal3.php"); ?> ><a href="active-menu-principal3.php" title="Inicio" class="active">Principal de Segundo</a></li>
</ul></div>


- La función de Menu trabaja con 2 parametros, el 1. es la categoría, 2. la sub-categoría. Se incluye entre las listas, porque imprimirá el id=current, el cual indica que esta el item activado. En las categoría se deja en blanco el parametro de sub-categoría por obvias razones, pero para la subcategoría es importante agregar la categoría y el enlace a la sub-categoría misma del item.

PHP

function Menu ($direccion,$subdireccion) {

/* El array $secciones, mantiene los enlaces de las categorías y sub-categorías,
active-menu.php es la categoría que tiene como sub-categorías a active-menu-principal.php
y active-menu-principal2.php, es ahí donde debes agregar las sub-categorías, para que
funcione el script. */

$secciones = array(
"/lab/menuactive/active-menu.php" => array (
"/lab/menuactive/active-menu-principal.php",
"/lab/menuactive/active-menu-principal2.php"
),

"/lab/menuactive/active-menu2.php" => array (
"/lab/menuactive/active-menu-principal3.php"
)
);


//Obtiene el URL actual
$url = $_SERVER['PHP_SELF'];

//Aquí es donde se hace la magía
foreach ($secciones as $llave=>&$valor)
{

if($direccion==$llave && $subdireccion==$url){
echo 'id="current"';
}

if($direccion==$llave && $subdireccion==""){
foreach ($valor as $valores){
if($url==$valores or ereg($direccion,$url))
echo 'id="current"';
}
}
}
}
DESCARGAR ARCHIVOS
Ojo: Debes cambiar la dirección URL (ruta) de tus enlaces (ejemplo: /lab/menuactive por la ruta en donde coloques tus archivos)

Ejemplo funcionando:




jueves, 5 de febrero de 2009

Galerías de inspiración para diseñadores web

En ocasiones no tenemos ni idea de como comenzar un diseño web para algún cliente, y necesitamos ver algunas tendencias, y animarnos con las buenas creaciones de otros diseñadores web, para ello y como excelente recurso, existen las Galerías CSS donde se publican cientos de sitios web con interesantes diseños, aquí la lista:



Favourite Website Awards



CSSDrive



Most Inspired



Best Web Gallery



We Love WP



y si, quieres reirte de las aberraciones en cuanto a diseño web
CSSCrap


martes, 13 de enero de 2009

"The Woork Handbook" - libro gratis sobre desarrollo y diseño web

Soy seguidor desde hace un tiempo del blog Woork de Antonio Lupetti. Un blog con temas diversos en diseño y desarrollo web, así como códigos propios del autor. Hace unos días publico un interesante libro, llamado "The Woork HandBook", el cual contiene un copy-paste de todos los post sobresalientes. Los artículos contienen además del código, ilustraciones, enlaces a los post donde se publicaron dichos artículos, imagenes, etc. Lo que les puedo decir, es que, no es un libro común y corriente, es más bien, "querido diario", "el recuento" del trabajo de Antonio, es muy entretenido, ya que se deja aun lado mucha teoría, y es más bien "manos a la obra". Lo recomiendo bastante!.

viernes, 19 de diciembre de 2008

Crear Tooltips con CSS

Los tooltips son herramientas de ayuda visual las cuales funcionan al situar o pulsar con el mouse sobre algún elemento gráfico, mostrando una ayuda adicional para informar al usuario de la finalidad del elemento sobre el que se encuentra.
por ejemplo:
Si deseamos hacerlo sobre Web, un ejemplo seria el alt en imágenes o el title en enlaces , pero si queremos personalizar Tooltips, podemos hacerlo através de JavaScript o CSS, la cual dependerá el gusto de cada quien, para mi, se me hizo más sencillo crear tooltips por medio de CSS.

Los pasos para crear tu propio tooltip con CSS + HTML son:

Hoja de Estilo:

Definir los colores de los enlaces por default:
a{font:15px Geneva, Arial, Helvetica, sans-serif; color:#CCCCCC; text-decoration:none;}
a:hover{border-bottom: 1px dashed #CCCCCC;}

Nuesto tooltip tiene el siguiente diseño:
a.tooltip:hover {text-decoration:none;}
a.tooltip span {display:none; margin:0 0 0 10px; padding:5px 5px; }
a.tooltip:hover span{display:inline; position:absolute; border:1px solid #cccccc; background:#ffffff; color:#666666;}

HTML

Para que funcione nuestro tooltip, nuestros enlaces deben lucir de esta forma:
<a href="#" class="tooltip">EJEMPLO<span>Esto se mostrará al pasar el mouse sobre EJEMPLO</span></a>

¿Cual es el truco?

El truco es en que en la clase tooltip, declaramos el span como no visible, hasta que el mouse se posicione arriba, este se mostrará en línea, además le asignamos el diseño del dicho tooltip en el hover de la clase tooltip, no antes. Para poder posicionar en donde quieran el tooltip, lo hacen por medio del tooltip span el cual yo le asigne un margin y padding a mi gusto, ustedes pueden personalizar más este tooltip.

VER DEMO EN ACCIÓN >>

miércoles, 17 de diciembre de 2008

Acordiones (Cheat Sheets) para Desarrolladores Web

No cabe duda que es complicado acordarse de todas las sintaxis, elementos, y demás en cada lenguaje de programación web, ahora acordarse para todos es aun más complicado, es por eso que tuve la tarea de buscar algunos acordiones (cheat sheets) que nos simplificarán el trabajo a la hora de desarrollar.

jueves, 11 de diciembre de 2008

Cambiar la hoja de estilo (CSS) dependiendo el navegador

La precupación y el terror de muchos desarrolladores y diseñadores web (que debemos tener todos!), es el navegador del visitante. Que si el viejo Internet Explorer 6, que si con el Internet Explorer 7, Opera, Chrome, Mozilla Firefox, y en cada uno de ellos sucede de que nuestro sitio se ve diferente. Por ejemplo, las transparencias de PNG no son soportadas por Internet Explorer 6, entonces da como resultado, una imagen con bordes blancos bastante feos. A su vez, el acomodo de los elementos suelen moverse, unos más arriba, abajo, lado izquierdo, etc.

Internet Explorer no respeta estándares, en comparación con Firefox, supuestamente para la versión 8, Internet Explorer va orientado hacia el desarrollador web , pero antes de que todos nuestros visitantes se muden a Firefox, Internet Explorer 8 u otro, tenemos que solucionar los problemas que ocurren para distintos navegadores.
La solución es: Crear diferentes hojas de estilo (CSS) para nuestra página web. Estas deben de proporcionar diferentes medidas, márgenes, etc., claro dependiendo el navegador. ¿Pero como se que navegador esta usando el visitante?, y cuando ya lo se, ¿como cambiar la hoja de estilo (css)?.
CSS proporciona comentarios condicionales, los cuales nos ayudarán a conocer los distintos navegadores y sus versiones:

Internet Explorer:

Compruebo si es Internet Explorer:
<!--[if IE]> <link rel="stylesheet" href="ie-style.css" type="text/css" />
<[end if]-->

Compruebo con gte si tiene la version 6 de Internet Explorer, es lo mismo, si cambio el 6 por el 7:
<!--[if IE 6]><link rel="stylesheet" href="ie6-style.css" type="text/css" /> <![endif]-->

Compruebo si el usuario usa versiones anteriores con lt :
<!--[if lt IE 6]><link rel="stylesheet" href="ieoldies-style.css" type="text/css" /> <![endif]-->

Otros condicionales: lte: anteriores o iguales a el. gte: igual o versiones arriba de el. gt: arriba de la version establecida (p.e. 6, sería arriba de esa versión).

Para los demás navegadores
:

FIREFOX
<!--[if FF]> <link rel="stylesheet" href="ff-style.css" type="text/css" /> <[end if]-->

OPERA
<!--[if Opera]> <link rel="stylesheet" href="opera-style.css" type="text/css" /> <[end if]-->

SAFARI
<!--[if Safari]> <link rel="stylesheet" href="safari-style.css" type="text/css" /> <[end if]-->
<!--[if Konquerer]> <link rel="stylesheet" href="konquerer-style.css" type="text/css" /> <[end if]-->

iCAB
<!--[if iCab]> <link rel="stylesheet" href="icab-style.css" type="text/css" /> <[end if]-->

FLOCK
<!--[if Flock]> <link rel="stylesheet" href="flock-style.css" type="text/css" /> <[end if]-->>


viernes, 5 de diciembre de 2008

Tabs usando jQuery

Ayer por la noche estuve pensando que sería bueno postear con relación a los Video tutoriales de jQuery, así que para darles un poco de práctica me puse a crear un pequeño TAB con jQuery y CSS.

Por donde empezar (XHTML):

La estructura de nuestro TAB, de manera que utilizaremos listas de HTML. De forma que la primera lista es el encabezado de nuestro TAB.

<ul>
<li><a href="#">BLOGS</a></li>
<li><a href="#">webs</a></li>
<li><a href="#">contenido</a></li>
</ul>

<ul>
<li><a href="#">Blog sobre Diseño Web</a></li>
<li><a href="#">Blog sobre PHP</a></li>
<li><a href="#">Blog sobre jQuery</a></li>
<li><a href="#">Blog sobre AJAX</a></li>
</ul>

<ul>
<li><a href="#">Web sobre PHP</a></li>
<li><a href="#">Web sobre jQuery</a></li>
<li><a href="#">Web sobre AJAX</a></li>
<li><a href="#">Web sobre Tecnlogía</a></li>
</ul>

<ul>
<li><a href="#">AJAX</a></li>
<li><a href="#">jQuery</a></li>
<li><a href="#">PHP</a></li>
<li><a href="#">CSS</a></li>
</ul>
Resultado:
Dar Formato a nuestro Tab (CSS):

Ahora pasaremos a cambiarlo a formato TAB, añadiremos estilos en CSS. Agregaremos Selectores y DIVs a nuestro código XHTML.

<div id="contenedor">

<h1>jQuery Tab</h1>

<div id="tab_contenedor">

<ul class="titulos">
<li><a href="#" title="contenido_1" class="tab activo">BLOGS</a></li>
<li><a href="#" title="contenido_2" class="tab">webs</a></li>
<li><a href="#" title="contenido_3" class="tab">contenido</a></li>
</ul>

<div id="tab_contenido">
<div id="contenido_1" class="contenido">
<ul>
<li><a href="#">Blog sobre Diseño Web</a></li>
<li><a href="#">Blog sobre PHP</a></li>
<li><a href="#">Blog sobre jQuery</a></li>
<li><a href="#">Blog sobre AJAX</a></li></ul>
</div>

<div id="contenido_2" class="contenido">
<ul>
<li><a href="#">Web sobre PHP</a></li>
<li><a href="#">Web sobre jQuery</a></li>
<li><a href="#">Web sobre AJAX</a></li>
<li><a href="#">Web sobre Tecnlogía</a></li>
</ul>
</div>

<div id="contenido_3" class="contenido">
<ul>
<li><a href="#">AJAX</a></li>
<li><a href="#">jQuery</a></li>
<li><a href="#">PHP</a></li>
<li><a href="#">CSS</a></li>
</ul>
</div>

</div>
</div>
¿Porqué he agrado etiquetas como contenedor, tab_contenedor,etc?.. aquí la respuesta ya en CSS.

<!--Color de la página, color de letra y tipo de letra-->
body{font-family:Arial, Helvetica, sans-serif; background: #023c4b; color:#FFFFFF;}

<!--Quitaremos el estilo a las Listas, para que dejen de tener esas bolitas a los lados jiji XD-->
ul,li{list-style:none;}

<!--Contenedor de todo el sitio, le asignamos un tamaño al igual lo Centramos con margin:10px auto-->
#contenedor{width:600px; margin:10px auto;}

<!-- TabContenedor es donde se encontrara el TAP, no el Cuerpo si no el TODO, en cambio TabContenido es el contendor del Contenido mostrado por cada encabezado-->
#tab_contenedor{padding:8px 8px; width:300px; background:#097793; border:1px solid #000000;}
#tab_contenido{padding:5px; background:#FFFFFF; border:1px solid #04667f;}

<!--El Encabezado del TAB, se mostrara en Linea (display:inline)-->
ul.titulos{margin:0px; padding:0px; margin-top:5px; margin-bottom:6px; }
ul.titulos li{display:inline;}

<!--Cada enlace del encabezado, se convertirá en Mayusculas, importante darle un Borde, para que se note que no esta activo, al igual que el Padding-->

ul.titulos li a{
color:#097793;
padding:5px 10px 6px 10px;
text-transform:uppercase;
border:1px solid #04667f;
background:#FFFFFF;}

<!--Aquí los Enlaces del Encabezado, lo que le da la gracia a que parezca TAB, es el border cambia a blanco en su parte de abajo, asi le da la perspectiva de que esta unido al contenido-->

ul.titulos li a:hover{border:1px solid #CCCCCC;}
ul.titulos li a.activo{color:#000000;
border-bottom: 1px solid #ffffff; background:#FFFFFF; }
a.tab{font: bold 15px Arial, Helvetica, sans-serif; text-decoration:none;}

<!--Un poco de estilo a las listas del contenido.-->
.contenido ul{margin:10px 0px; padding:0 11px;}
.contenido ul li{ margin-bottom:3px; font-size:15px;}
.contenido ul li a{color:#3f4c4f;}
.contenido ul li a:hover{color:#899fa5;}

<!--SUPER IMPORTANTE que el contenido_2 y 3 se encuentren en NO display, ya que con el jQuery, haremos que aparezcan al dar click sobre cada enlace relacionado.-->

#contenido_2, #contenido_3 { display:none; }

Resultado:

Por ultimo la programación (jQuery):

Si recuerdan, los métodos show y hide, era para mostrar y ocultar contenido, pues esos mismos utilizaremos para este TAB, se puede usar también el SlideUp/SlideDown, o si te gusta para FadeIn o FadeOut, como gustos, a mi me parecio una mejor opción tomar el Show/Hide. Recuerda que debes incluir la librería de jQuery!, por ejemplo (usando la nueva versión 1.2.6):
<script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>

Código para generar los Tabs:

<script type="text/javascript">
// Cuando cargue el documento
$(document).ready(function(){

// Cuando el enlace del encabezao sea clickeado
$("a.tab").click(function () {

// Apaga el Activo
$(".activo").removeClass("activo");

// Cambia Activo
$(this).addClass("activo");

// Despliega, escondiendo
$(".contenido").hide('slow');

// Muestra el contenido, obteniendo del atributo title del enlace (p.e. contenido_1), y muestra con 'show' el contenido
var muestra = $(this).attr("title");
$("#"+muestra).show('slow');

});

});
</script>

VER DEMO >>

viernes, 19 de septiembre de 2008

Transparencias PNG en Internet Explorer (IE) 5.5 y 6

Del GIF al PNG, ¿porqué?

En los 90´s con el boom de las páginas web, se hizo muy común utilizar el formato GIF, para el uso de imágenes y animaciones cortas. Este formato, hace que un archivo de imagen sea pequeño, y tenga la posibilidad de añadir la propiedad de transparencia. Pese a su mala calidad y no ser libre de uso (Unisys, dueños de la patente del algoritmo de comprensión LZW), fue muy aceptado en esa época.

A finales de los 90`s, se publica oficialmente por el WWC (World Wide Web Consortium) la especificación de un nuevo formato, el PNG. Bautizado con licencia libre de uso. Adopta características muy sobresalientes encontra del GIF, el cual quedaría rezagado en los últimos años.

Algunas ventajas del PNG contra el GIF

  • Comprensión sin pérdida de calidad.
  • Transparencia inferior, soporta hasta 16,7 millones de colores.
  • Posee 2 modos de conversión (estándar y progresivo)
  • Inclusión de metadatos

Desventajas del PNG

  • No permite crear animaciones
  • Por motivos de calidad, el archivo puede llegar hacer demasiado grande para una web

Problema de transparencia con los PNG`s en el IE 5.5 y 6

Para algunos de nosotros que nos gusta el diseño y desarrollo web, tenemos que estar pensando en todo. Tanto si el usuario tiene los requerimientos básicos del sistema, validaciones, navegadores, etc. Pues bien, si utilizas solo IE 7 o Mozilla Firefox o Opera o cualquier otro navegador moderno, no te abras dado cuenta de que las transparencias de las imágenes con PNG, no sirven en Internet Explorer 5.5 y 6, y a los usuarios con estos navegadores viejos, no pueden ver dichas transparencias, si no todo lo contrario, la imagen aparece con un odioso contorno/cuadro gris.

La solución….

Hay diversos metodos, pero les presento el que se me hizo más facil a mi parecer:

1. Descarga el archivo IEPNGFIX, que TwinHelix desarrollo.
2. Copia los archivos iepngfix.htc y blank.gif dentro de la carpeta de tu sitio web.
3. En tu Hoja de estilo (CSS), pega el siguiente codigo:

img, div, a, input { behavior: url(/AquíValaDirección/iepngfix.htc) }

4. Abre el archivo iepngfix.htc, y en la línea de BlankImg, pon correctamente la dirección al archivo blank.gif:

var blankImg = '/AquíValaDireccionalaImagen/blank.gif';

5. Listo!, ya tienes arreglado el problema de transparencia con PNG para IE 5.5 y 6

jueves, 18 de septiembre de 2008

Menú activo con CSS y PHP (en 2 diferentes formas)

Por su dinamismo, el menú interactivo da mucha vida a una página web. El usuario de manera visual se da cuenta en que sección esta del sitio, sin necesidad de remarcar el titulo de dicha sección.


¿Cómo ocurre?

En enlace del menu se queda selecionando al momento que se le da click, indicando la página actual que se esta mostrando en pantalla.

Ejemplo: Aquí muestro un sistema de reporte de prácticas que estoy haciendo en PHP, AJAX, CSS, etc., el cual, si notan, esta seleccionado "Usuarios", y se esta mostrando la página de dicho titulo. Dentro de esta tengo un TAB, el cual al igual que el menú horizontal princiapl, esta haciendo lo mismo, pero de manera embebida.
¿Cómo hacer un menú activo (current / active) ?

Existen muchas maneras, pero yo las he hecho en 2 formas diferentes, en mi parecer una es más funcional que la otra, pero cada quien a su criterio las usará, que al final, se trata de hacer lo mismo.
Crearemos nuestro archivo CSS, donde personalizaremos nuestro menú. (OJO no se necesita conocer mucho de CSS para hacer este tipo de menús, la verdad!!. No les explicaré el código por su simpleza, pero si, tienen dudas, no duden en preguntar).
/* Horizontal menu */

#menu{
padding: 0;
width: 100%;
background: transparent;
voice-family: "\"}\"";
voice-family: inherit;
}

#menu ul{
font: bold 11px Arial;
margin:0;
margin-left: 20px;
padding: 0;
list-style: none;
}

#menu li{
display: inline;
margin: 0 2px 0 0;
padding: 0;
text-transform:uppercase;
}

#menu a{
float: left;
display: block;
color: white;
margin: 0 1px 0 0; /*Margenes entre el menu*/
padding: 5px 10px;
text-decoration: none;
letter-spacing: 1px;
background-color: black; /*Color por Default*/
border-bottom: 1px solid white;
}

#menu a:hover{
background-color: #535353; /*Menu hover bgcolor*/
}

#menu #current a{ /*TAB seleccionado, Página Actual*/
background-color: #80931D;
border-color: #80931D;
}

Ya teniendo nuestra hoja de estilo pasaremos a programar nuestro menú, para ello, explicaré la primera forma:

1. Menú activo con función:
Crearemos una función que nos indiqué si estamos en la página actual


function Menu($sitio) {
$url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
if(ereg($sitio,$url)) {echo 'id="current"'; }
}

y el código de nuestro menú


Lo explico, la función llamada Menu, se manda ejecutar, recibiendo, la dirección del enlace, este se compara con la página actual que se este visuelizando en pantalla (por medio de HTTP_HOST y PHP SELF), si concuerdan estos dos (EREG), imprimirá/agregará el current (del CSS, quedando asi seleccionado.
Para mí esta es la mejor opción, porque trabaja con EREG (busca coincidencias), y no importa si nuestra página actual tiene envio de datos por GET, ejemplo: usuarios.php?id=3&cuenta=2, de todos modos servirá.
2. Menú activo con Array (vector)
Otra de las formas que conozco, es usar un array con las páginas que tenemos en nuestro sitio web.
$url=$_SERVER['REQUEST_URI']; //Obtengo la página actual

Después creo el Array:
$current = Array(
"index.php" => "Inicio",
"cuenta.php" => "Cuenta",
"usuarios.php" => "Usuarios");
Obtengo el valor:
$title=$current[$url];

Despues de esto, comparare lo que me esta devolviendo title, en cada enlace de nuestro menu:



Esta forma no es muy conveniente por lo que les comentaba anteriormente, pero funciona también!.