Ir al contenido principal

Tabs, menú de contenidos con pestañas. Versión CSS

Sistema de navegación por pestañas (Tabs) con la pseudoclase :checked y bastante CSS.

Seguro conocerás este sistema de pestañas, que nos permite mostrar de manera alternativa distintos contenidos en un mismo espacio.
Hay distintas versiones como con jQuery, o utilizando CSS, más específicamente la pseudoclase :target.



Aquí veremos como obtener un resultado similar, pero utilizando la pseudoclase :checked.

Comencemos con la estructura.
<div id="contenedor">
    <input id="tab-1" type="radio" name="radio-set" class="tab-selector-1" checked="checked" />
    <label for="tab-1" class="tab-label-1">Pestaña1</label>
    
    <input id="tab-2" type="radio" name="radio-set" class="tab-selector-2" />
    <label for="tab-2" class="tab-label-2">Pestaña2</label>
    
    <input id="tab-3" type="radio" name="radio-set" class="tab-selector-3" />
    <label for="tab-3" class="tab-label-3">Pestaña3</label>
    
    <input id="tab-4" type="radio" name="radio-set" class="tab-selector-4" />
    <label for="tab-4" class="tab-label-4">Pestaña4</label>
                            
    <div class="content">
        <div class="content-1">
            Contenido1
        </div>
        <div class="content-2">
            Contenido2
        </div>
        <div class="content-3">
            Contenido3
        </div>
        <div class="content-4">
            Contenido4
        </div>
    </div>
</div>

Ahora el CSS que será el mecanismo de este sistema. Es largo, así que te tendrás que tomar tiempo por si quieres personalizarlo a tu gusto.
#contenedor {
    margin: 40px auto;
    width: 750px;  /* Ancho del contenedor */
box-sizing: border-box;
-moz-box-sizing: border-box;
}
#contenedor input { height: 32px; visibility: hidden; }
#contenedor label { float: left; cursor: pointer; font-size: 15px;  /* Tamaño del texto de las pestañas */ line-height: 40px; height: 40px; padding: 0 20px; display: block; color: #888;  /* Color del texto de las pestañas */ text-align: center; border-radius: 5px 5px 0 0; background: #eee;  /* Fondo de las pestañas */ margin-right: 5px; }
#contenedor input:hover + label { background: #ddd;  /* Fondo de las pestañas al pasar el cursor por encima */ color: #666;  /* Color del texto de las pestañas al pasar el cursor por encima */ }
#contenedor input:checked + label { background: #FFDA91;  /* Fondo de las pestañas al presionar */ color: #444; /* Color de las pestañas al presionar */ z-index: 6; line-height: 45px; height: 45px; position: relative; top: -5px; -webkit-transition: .1s; -moz-transition: .1s; -o-transition: .1s; -ms-transition: .1s; }
.content { background: #FFDA91;  /* Fondo del contenido */ position: relative; width: 100%; height: 350px;  /* Alto del contenido */ padding: 30px; z-index: 5; border-radius: 0 5px 5px 5px; }
.content div { position: absolute; z-index: -100; opacity: 0; transition: all linear 0.1s; }
#contenedor input.tab-selector-1:checked ~ .content .content-1, #contenedor input.tab-selector-2:checked ~ .content .content-2, #contenedor input.tab-selector-3:checked ~ .content .content-3, #contenedor input.tab-selector-4:checked ~ .content .content-4 {     z-index: 100;     opacity: 1;     -webkit-transition: all ease-out 0.2s 0.1s; -moz-transition: all ease-out 0.2s 0.1s; -o-transition: all ease-out 0.2s 0.1s; -ms-transition: all ease-out 0.2s 0.1s; }

Aquí tienes un ejemplo de cómo quedaría el menú.


La primer pestaña ya se encuentra activada, por lo cual esto es lo primero que verán los lectores.
Además de texto, inserta lo quieras. Como imágenes.
...y cualquier otra cosa. Eso es todo, espero que te sea útil. Por cierto, esto es una adaptación de un tutorial de Codrops.
Invitame un café en cafecito.app

Comentarios

  1. Buena entrada man, ¿porque no usas SyntaxHighlighter?, te coparias con el código xDD

    ResponderEliminar
    Respuestas
    1. Ya lo había pensado, Andres. Pero por ahora me siento cómodo así :) Quizá luego lo pueda probar. Gracias por pasarte, adios.

      Eliminar
  2. Sólo un pequeño apunte, Lucas:
    Te olvidaste del empeño de los vídeos por no respetar el z-index, a no ser que declares el atributo v-mode
    Por si a alguien le es de ayuda o quiere ampliar un poco la info sobre z-index

    Un saludo

    ResponderEliminar
    Respuestas
    1. Gracias Kseso por la info. En verdad es algo que hay que tener en cuenta. Saludos :D

      Eliminar
    2. Me gustaron mucho estas tabs y son muy personalizables a veces deseo poner 3 videos en un post y con estas tabs se veria muy ordenado pero el problema que tengo es.. y como lo pongo? osea donde va el css y eso? o todo va dentro del post? espero una respuesta Gracias! Saludos.

      Eliminar
  3. Anónimo27/2/13

    No funciona en internet explorer

    pero igual gracias por el tutorial

    ResponderEliminar
  4. Me sirvió mucho tu código, para los que lo usen con inputs adentro tienen que comentar la siguiente linea:
    visibility: hidden;

    ResponderEliminar
  5. Anónimo23/6/13

    No puedo colocar un div dentro de las pestañas

    ResponderEliminar
  6. Armando30/7/13

    Gracias por el aporte

    ResponderEliminar
  7. Anónimo26/8/13

    Gracias amigo , pero tengo una pregunta, para Internet explorer 8 hay una solucion

    ResponderEliminar
  8. Como puedo modificar el contenido. Input esta como invisible para no mostrar los radio button pero si quiero colocar campos tipo input no salen..

    ResponderEliminar
  9. Muy Muy buen post sin jquery.js esta excelente , gracias.

    ResponderEliminar
    Respuestas
    1. Hola podrias enseñarme como ponerlo en mi blog? si no es mucho pedir :c

      Eliminar
  10. esta muy bueno, pero no funciona en IE, lastima

    ResponderEliminar

Publicar un comentario

Más leído

Galería de Imágenes Simple, con Javascript y CSS

Sistema de navegación por pestañas (Tabs) con la pseudoclase :checked y bastante CSS.

¡Hola! Ya extrañaba escribir en mi blog. Vuelvo con esta genial galería de imágenes que es muy fácil de insertar y es súper simple. Sólo es necesario insertar el HTML, y decorarlo un poco con CSS, veamos: <div id="galeria"> <div id="galeria_imagen"> <img id="imgGaleria" src=" URL-IMAGEN-POR-DEFECTO " /></div> <div id="galeria_miniaturas"> <img class="miniatura" onclick="javascript:document.getElementById('imgGaleria').src=this.src;" src=" URL-IMAGEN-1 " /> <img class="miniatura" onclick="javascript:document.getElementById('imgGaleria').src=this.src;" src=" URL-IMAGEN-2 " /> <img class="miniatura" onclick="javascript:document.getElementById('imgGaleria').src=this.src;" src=" URL-IMAGEN-3 " /> <img class="miniatura" onclick="javascript:document.getEle

Ventana flotante con botón cerrar

Sistema de navegación por pestañas (Tabs) con la pseudoclase :checked y bastante CSS.

Esto será algo muy útil cuando debas dejar algún mensaje o aviso para tus lectores. Se trata de una ventanita, con apariencia similar a las de Windows, que es flotante y tiene la opción de cerrar con un efecto fade utilizando un botón. Insertarla es muy simple, sólo pega este código en un gadget HTML/Javascript y puedes cambiar algunos valores para personalizar la ventana a tu gusto. <div id='ventana-flotante'>    <a class='cerrar' href='javascript:void(0);' onclick='document.getElementById(&apos;ventana-flotante&apos;).className = &apos;oculto&apos;'>x</a>    <div id='contenedor'>        <div class='contenido'> Aquí va el mensaje.        </div>    </div> </div> <style> #ventana-flotante { width: 360px;   /* Ancho de la ventana */ height: 90px;   /* Alto de la ventana */ background: #ceffad;   /* Color de fondo */ position: fixed; top: 200 px; left: 50%;

Efecto biselado con CSS

Sistema de navegación por pestañas (Tabs) con la pseudoclase :checked y bastante CSS.

Utilizando CSS, podemos crear un efecto de biselado para utilizar en botones, mensajes, contenedores o lo que se les ocurra. Veremos 2 formas de aplicar este efecto, una utilizando bordes y otra implementando la propiedad box-shadow . Con los bordes, encontraremos una forma más tradicional que nos permite que los bordes inferior y lateral derecho sean más oscuros simulando relieve. HTML <div class="biselado"> Texto </div> Hola, soy un cuadro con outset. .biselado { background: #2323ff ;   /* Fondo, debe ser más claro que el borde */ border: 5px outset #4444ff ;   /* Grosor del Borde */   /* Color del Borde */ color: white ;   /* Color del texto */ text-align: center ;   /* Alineación del texto */ text-shadow: -1px -1px rgba(0,0,0,.2); } O podemos lograr el efecto contrario, reemplazando la palabra outset que se encuentra antes del color del borde por inset . Hola, soy un cuadro con inset. Veamos ahora una manera más efectva de simul

Botón circular 3D realista con CSS

Sistema de navegación por pestañas (Tabs) con la pseudoclase :checked y bastante CSS.

El secreto está en la propiedad box-shadow . Luego border-radius para darle forma y ya lo obtenemos. See the Pen Botón tridimensional realista. by Lucas Maidana ( @LucasMaidana ) on CodePen . El HTML típico de un botón. <a class='boton' href='URL-DEL-BOTON'></a> Y el CSS. .boton {   background: url( http://www.ashleyjt.net/windows/images/Android.png )  /* Url de la imagen */  no-repeat center center, #62BC0F /* Color del botón */ ; background-size: 60%;  /* Tamaño de la imagen */   height: 200px;   /* Alto del botón */   width: 200px;   /* Ancho del botón */   display: table;   border-radius: 100%;   cursor: pointer;     box-shadow: /* Sombras externa */ inset 0 10px 15px rgba(255,255,255,.35), inset 0 -10px 15px rgba(0,0,0,.05), inset 10px 0 15px rgba(0,0,0,.05), inset -10px 0 15px rgba(0,0,0,.05), /* Sombra interna */ 0 5px 20px rgba(0,0,0,.1); } /* Al presionar */ .boton:active {   box-shadow: inset 0 5px 30px rgba(0,0,0,.2);  /* S

Texto con borde

Sistema de navegación por pestañas (Tabs) con la pseudoclase :checked y bastante CSS.

¿TEXTO CON BORDE? ¿Posible hacerlo sólo con CSS? SI ES POSIBLE NOTA : Esta propiedad no es compatible con todos los navegadores. Se recomienda Chrome o Firefox. Para lograrlo, debemos aplicar la propiedad text-shadow  para lograr muchas sombras del mismo color simulando un sólo borde. A <div class="texto1"> Texto </div> le aplicaremos: .texto1 { color:white;   /* Color del texto */ text-shadow: 1px 1px 0 blue ,                   -1px -1px blue ,                    1px -1px blue ,                   -1px 1px blue ,                    0 1px blue ,                    1px 0 blue ,                   -1px 0 blue ,                    0 -1px blue ; } Puedes cambiar blue por el color que desees. Aquí mas ejemplos. borde .texto2 { color:#AAFFB1; background:#AAFFB1; padding:20px 80px; text-shadow: 1px 1px 0 #2F7235, -1px -1px #2F7235, 1px -1px #2F7235, -1px 1px #2F7235, 0 1px #2F7235, 1px 0 #2F7235, -1px 0 #2F7235, 0 -1px #2F7235; } texto .