X

Crear tabs o pestañas con jQuery y CSS – Estructurando el contenido de una página web

En este artículo vamos a ver como se hacen tabs o pestañas con jQuery y CSS para agrupar la información de la página web de forma lógica y organizada.

Cada vez me gusta más jQuery y las cosas que se pueden hacer con este framework.

Un efecto en particular que me parece muy útil cuando quieres desplegar una cantidad grande de información en poco espacio es el uso de los tabs o pestañas.

El uso de tabs o pestañas, es una buena forma de estructurar la información de una página web de forma clara y diferenciada, ayudando al usuario a distinguir grupos de contenidos, así como los subgrupos que estos contienen.

Mediante el uso de jQuery suavizamos el comportamiento que las pestañas tendrían con CSS puro. Puedes ver un ejemplo de tabs hechos con CSS puro aquí: CSS Tabs.

Como puede apreciarse el cambio de una pestaña a otra es muy brusco. Con jQuery podemos solventar este aspecto del CSS.

Para que te hagas una idea de lo que vamos a hacer en este tutorial, aquí tienes una imagen de ejemplo:

El código para crear los tabs con jQuery y CSS

Bueno, para crear este efecto de pestañas en las páginas en las que trabajo, utilizo el código que el mismo Soh Tanaka publicó hace un tiempo en su blog, tabs simples con CSS y jQuery. Este diseñador creó un tutorial para incluir contenido en Tabs usando jQuery y CSS.

Un sencillo HTML

Básicamente el código HTML es el siguiente:

<ul class="tabs">
     <li><a href="#tab1">Gallery</a></li>
     <li><a href="#tab2">Submit</a></li>
</ul>

<div class="tab_container">
    <div class="tab_content" id="tab1">
        <!--Content-->
    </div>
    <div class="tab_content" id="tab2">
       <!--Content-->
    </div>
</div>

La magia viene con CSS

Este el CSS de los tabs:

ul.tabs {
 margin: 0;
 padding: 0;
 float: left;
 list-style: none;
 height: 32px; /*--Set height of tabs--*/
 border-bottom: 1px solid #999;
 border-left: 1px solid #999;
 width: 100%;
}
ul.tabs li {
 float: left;
 margin: 0;
 padding: 0;
 height: 31px; /*--Subtract 1px from the height of the unordered list--*/
 line-height: 31px; /*--Vertically aligns the text within the tab--*/
 border: 1px solid #999;
 border-left: none;
 margin-bottom: -1px; /*--Pull the list item down 1px--*/
 overflow: hidden;
 position: relative;
 background: #e0e0e0;
}
ul.tabs li a {
 text-decoration: none;
 color: #000;
 display: block;
 font-size: 1.2em;
 padding: 0 20px;
 border: 1px solid #fff; /*--Gives the bevel look with a 1px white border inside the list item--*/
 outline: none;
}
ul.tabs li a:hover {
 background: #ccc;
}
html ul.tabs li.active, html ul.tabs li.active a:hover  { /*--Makes sure that the active tab does not
        listen to the hover properties--*/
 background: #fff;
 border-bottom: 1px solid #fff; /*--Makes the active tab look like it's connected with
        its content--*/
}

Y este el CSS del contenido de los tabs:

.tab_container {
 border: 1px solid #999;
 border-top: none;
 overflow: hidden;
 clear: both;
 float: left; width: 100%;
 background: #fff;
}
.tab_content {
 padding: 20px;
 font-size: 1.2em;
}

Y para rematar los tabs, jQuery en acción

Y este el JavaScript para activar jQuery en los tabs (pestañas). Va en el header de la página, o mejor aún, en un archivo externo:

$(document).ready(function() {

 //When page loads...
 $(".tab_content").hide(); //Hide all content
 $("ul.tabs li:first").addClass("active").show(); //Activate first tab
 $(".tab_content:first").show(); //Show first tab content

 //On Click Event
 $("ul.tabs li").click(function() {

  $("ul.tabs li").removeClass("active"); //Remove any "active" class
  $(this).addClass("active"); //Add "active" class to selected tab
  $(".tab_content").hide(); //Hide all tab content

  var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to
                identify the active tab + content
  $(activeTab).fadeIn(); //Fade in the active ID content
  return false;
 });
});

Hay que acordarse también de cargar el core de jQuery en el head para que funcione. Yo particularmente lo cargo del CDN de Google en lugar de almacenarlo en el servidor, para evitar sobrecargar el hosting del sitio para el que estoy diseñando la página web:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
</script>

modificado el 8 marzo, 2018 15:29

Verónica Milán: Se dedica desde hace más de 14 años al diseño y desarrollo web y al marketing online. Apasionada de Internet y los proyectos online. Sigue muy de cerca todo lo que se cuece en cuanto a emprendimiento. Ha trabajado para empresas como ELPAIS, Banco Santander y Tuenti (Telefónica).

Ver comentarios (15)

  • Funciona muy bien, le he hecho algunos cambios en el código JS para que además del click en la pestaña, otros eventos determinen que pestaña quiero mostrar.
    Es una lástima que la imagen (al menos en mi caso) no se parezca en nada al resultado, porque precisamente me atrajo lo bien que se veía en la foto. Eso es publicidad engañosa :)

  • Excelente ejemplo. jQuery UI añade estilos innecesarios por lo que este código resulta más efectivo al usar sólo jQuery.

    Me funcionó al adaptarlo un poco, en la línea de $("ul.tabs li:first").addClass("active").show(); puede removerse el show() ya que los tabs no se ocultan.

  • No se amigo, pero he agregado el codico agregando las clases .tabs, .tab_content y .tab_container donde corresponden, he agregado el codigo jquery como un js, tambien agregue, e intente con varias versiones de jquery.min (desdes el cdn y alojado en una carpeta en el servidor) y no me funciona el codigo, el css encaja perfectametne, pero la funcionalidad de las tabs no da ni pa atras y pa delante.

  • Buenas!

    Anda perfecto, pero ahora necesito cambiar el tab activo cuando se carga la pagina.

    En vez de la primera tab (first) la ultima que en mi caso es la quinta.

    Ya probé reemplazando "First" por "Second" en el js y deja de funcionar.

    Alguna idea?

  • bueno, me convirtió el código,

    lo que hay que hacer es agregarle al UL inicial: class="tabs"
    y luego a cada DIV de contenido además del su correspondiente ID, agregar la clase : class="tab_content"

  • Hola Verónica, el ejemplo no funciona como está publicado, faltan asignar las clases .tabs y .tab_content . Completo quedaría así:

    Gallery
    Submit

    Gracias lo mismo, quería aportar las correcciones. Saludos.

  • Ricardo:
    El codigo jQuery debes insertarlo dentro de etiquetas que deberás colocar dentro de las etiquetas head.
    El script para incluir jQuery también va dentro de otras etiquetas que colocarías dentro de las etiquetas head.
    Ahh dentro de la plantilla CSS sólo debes colocar los estilos y nada más

  • Hola!! tengo muchas dudas, apenas me estoy iniciando en esto de las páginas web y diseños css.

    Lo primero:
    Inserté el codigo CSS en mi plantilla CSS.

    Segundo:
    ¿En dónde debo insertar el código JQuery?, en el header pero ¿en el header de dónde? no entiendo esa parte.
    Se debe insertar en mi plantilla general CSS y el script para activar JQuery se inserta en el head, pero en que head ¿en el de mi plantilla general css? o ¿cada vez que haga un articulo en mi blog, ¿debo insertar el codigo?.
    Necesito utilizar ese código CSS, porfavor ayudenme!

Artículos relacionados