martes, 20 de julio de 2010

Firebug: una navaja suiza para desarrolladores

No me imagino un día normal de trabajo desarrollando páginas web sin Firebug, una extensión para desarrollo de Firefox que te permite hacer mil cosas con ayuda del navegador.

En la parte izquierda, podemos navegar por todo el DOM de la página. En la parte derecha, al posicionarnos sobre algún elemento del DOM (de la parte izquierda) aparecen 3 pestañas muy útiles: Style, Layout y DOM. En Style, podemos ver toda la cascada de estilo del elemento e incluso podemos modificar, agregar y eliminar estilos "en caliente" y verlos de inmediato reflejados en la página que estamos analizando en ése momento.

La dirección para conseguir el plugin de Firefox es ésta: https://addons.mozilla.org/es-ES/firefox/addon/1843/
Hacemos click en el botón verde "Añadir a Firefox" y una vez instalado, lo podemos desplegar en cualquier momento, en cualquier página, haciendo click en el ícono de una cucaracha abajo, a la derecha del navegador.

Otros plugins muy útiles para el desarrollador, y que uso a diario, de la mano de Firebug son:

ColorZilla es un color picker para obtener el color de cualquier pixel.

MeasureIt para medir en pixeles.

Web Developer toolbar ofrece varias opciones para trabajar, como deshabilitar el JavaScript, validar la página, deshabilitar las imágenes, mostrar sus rutas, dimensiones, etc.

HttpFox te da control sobre lo que realmente está cargando el navegador cuando ingresas a una página, haces click a un botón, formulario, etc.

Otra pestaña muy útil es "Net" en la parte derecha, nos permite ver todo el proceso de carga de la página: archivos .js, hojas de estilo .css y en general, todo lo que cargue el navegador para poder desplegar la página, y además les pone cronómetro a cada archivo por separado y en total.

martes, 6 de julio de 2010

Drop Down Menu, jQuery y CSS

Primero el producto terminado.

La librería jquery la pueden agregar al javascript de ésta forma en la sección <head>:
 
<script type="text/javascript" 
 src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js">
</script>
 

Primero un poco de HTML de ejemplo:

<ul class="topnav">
    <li><a href="#">Home</a></li>
    <li>
        <a href="#">Tutorials</a>
        <ul class="subnav">
            <li><a href="#">Sub Nav Link</a></li>
            <li><a href="#">Sub Nav Link</a></li>
        </ul>
    </li>
    <li>
        <a href="#">Resources</a>
        <ul class="subnav">
            <li><a href="#">Sub Nav Link</a></li>
            <li><a href="#">Sub Nav Link</a></li>
        </ul>
    </li>
    <li><a href="#">About Us</a></li>
    <li><a href="#">Advertise</a></li>
    <li><a href="#">Submit</a></li>
    <li><a href="#">Contact Us</a></li>
</ul>

Luego el CSS:


ul.topnav {
    list-style: none;
    padding: 0 20px;
    margin: 0;
    float: left;
    width: 920px;
    background: #222;
    font-size: 1.2em;
    background: #002244;
}
ul.topnav li {
    float: left;
    margin: 0;
    padding: 0 15px 0 0;
    position: relative; /*--Declare X and Y axis base for sub navigation--*/
}
ul.topnav li a{
    padding: 10px 5px;
    color: #fff;
    display: block;
    text-decoration: none;
    float: left;
}
ul.topnav li a:hover{
    background: #003366;
}
ul.topnav li span { /*--Drop down trigger styles--*/
    width: 17px;
    height: 42px;
    float: left;
    background: #333333 url("drop_down_arrow.gif") 0 10px no-repeat;
}
ul.topnav li span.subhover {cursor: pointer;} /*--Hover effect for trigger--*/
ul.topnav li ul.subnav {
    list-style: none;
    position: absolute; /*--Important - Keeps subnav from affecting main navigation flow--*/
    left: 0; top: 35px;
    background: #333;
    margin: 0; padding: 0;
    display: none;
    float: left;
    width: 170px;
    border: 1px solid #111;
}
ul.topnav li ul.subnav li{
    margin: 0; padding: 0;
    border-top: 1px solid #252525; /*--Create bevel effect--*/
    border-bottom: 1px solid #444; /*--Create bevel effect--*/
    clear: both;
    width: 170px;
}
html ul.topnav li ul.subnav li a {
    float: left;
    width: 145px;
    background: #333;
    padding-left: 20px;
}
html ul.topnav li ul.subnav li a:hover { /*--Hover effect for subnav links--*/
    background: #222;
}




Finalmente un poco de jQuery:


$(document).ready(function(){

    $("ul.subnav").parent().append("<span></span>"); //Only shows drop down trigger when js is enabled (Adds empty span tag after ul.subnav*)

    $("ul.topnav li span").click(function() { //When trigger is clicked...

        //Following events are applied to the subnav itself (moving subnav up and down)
        $(this).parent().find("ul.subnav").slideDown('fast').show(); //Drop down the subnav on click

        $(this).parent().hover(function() {
        }, function(){
            $(this).parent().find("ul.subnav").slideUp('slow'); //When the mouse hovers out of the subnav, move it back up
        });

        //Following events are applied to the trigger (Hover events for the trigger)
        }).hover(function() {
            $(this).addClass("subhover"); //On hover over, add class "subhover"
        }, function(){    //On Hover Out
            $(this).removeClass("subhover"); //On hover out, remove class "subhover"
    });

});