Estoy un poco atorado. He creado casi todo en la imagen de abajo. A lo que me ato es a tratar de descubrir cómo lo configuraría para que cuando un usuario haga clic en uno de los enlaces haga que la línea de abajo se ponga roja (después de que se cargue la siguiente página). Obviamente necesitaría usar Jquery para detectar la página y luego agregar css en línea, pero lo que estoy luchando es que quiero que esto sea lo más fácil posible para poder dar esta plantilla a otros y luego pueden agregar o eliminar elementos como necesario. Estaba tratando de averiguar si de alguna manera podría usar un elemento li
para hacer esto, pero todavía no he encontrado la manera. ¿Alguien tiene alguna idea para ayudarme?Puede esta navegación hacerse completamente en CSS
Respuesta
Construye tu menú como este, en HTML:
<body id='Search' >
<div id='menu'>
<div class='bars'></div>
<a href='/home/' title='Home'>Home</a>
<a href='/community/' title='Community'>Community</a>
<a href='/search/' title='Search'>Search</a>
<a href='/contact/' title='Contact'>Contact</a>
<div class='bars shift'></div>
</div>
</body>
Tenga en cuenta que el cuerpo de la etiqueta tiene una página específica id (como sugiere Cody). También tenga en cuenta que esta identificación debe ser la misma que el valor del atributo de título para el enlace del menú.
continuación, utilizar este CSS:
.bars {border-top:1px solid #CCC;border-bottom:1px solid #CCC;height:5px;}
.shift {margin-top:-6px;}
#menu {font-family:arial;font-size:12pt;text-align:center;}
#menu a {display:inline-block;padding:7px;text-decoration:none;color:#000;}
.active {border-bottom:5px solid red;}
Por último, anadir este jQuery para cada página:
$(document).ready(function(){
var id = $('body').attr('id');
$('#menu a').each(function() {
var title = $(this).attr('title');
$(this).removeClass('active');
if (title == id) $(this).addClass('active');
});
});
Puede ver una demostración en vivo de violín here. (Para probar, simplemente cambie la identificación del elemento del cuerpo y presione ejecutar.)
EDITAR: Las ventajas de este método en comparación con el método de Cody Grays es que no necesita modificar el CSS cada vez que cambia el HTML cuando agrega, elimina o edita un elemento del menú. Por otro lado usa jQuery. Sin embargo, si desea una solución de CSS pura, solo elimine jQuery y el ID del elemento de cuerpo, y en su lugar aplique directamente la clase .active al enlace particular, dependiendo de la página en particular (similar a la sugerencia de jackJoe).
Esto se puede modificar fácilmente si debe usar elementos <li>
.
Es bastante sencillo. Crear una clase para el estado "activo" y el estilo que:
<li class="active">Home</li>
y estilo que (depende de la estructura HTML, pero se entiende la idea)
CSS:
.active {
border-bottom: 3px red solid;
}
Todo lo que necesita hacer es colocar la clase cuando se carga la página (lado del servidor, por ejemplo)
Puede hacerlo the way jackJoe suggests y configure el lado del servidor de la clase active
en la página seleccionada actualmente, pero también puede hacerlo con CSS puro y un poco de planificación previa.
Esto implica establecer primero el atributo id
para la etiqueta <body>
de su página, que es una buena práctica para entrar de todos modos. Entonces, su archivo CSS se aprovechará de ese cuerpo id
para determinar qué <li>
debería aparecer como "activo".
Muestra código de la página:
<body id="main"> <!-- change this id for each page -->
<ul>
<li class="main-nav"><a href="#">Main</a></li>
<li class="community-nav"><a href="/community">Community</a></li>
<li class="search-nav"><a href="/search">Search</a></li>
</ul>
</body>
Muestra CSS:
li.main-nav,
li.community-nav,
li.search-nav
{
background: #FFF;
/* your other awesome styles */
}
#main li.main-nav,
#community li.community-nav,
#search li.search-nav
{
/* style the active tab differently */
background: #F00;
}
De esta manera, el código HTML para la sección de navegación puede estar completamente estática en cada página. No tiene que mostrarse en el lado del servidor ni modificarse dinámicamente en el lado del cliente.
Hay un buen reportaje sobre esta técnica disponible a través de trucos CSS: ID Your Body For Greater CSS Control and Specificity
Vine aquí para escribir esta técnica. Upvotes para usted, mi buen señor. –
Mira, no entiendo por qué las personas se molestan con basura como "¡no use selectores de ID en CSS!" Técnicas como esta son para qué ID es mejor. – BoltClock
El problema con su sugerencia es que cuando agrega un nuevo elemento al menú, también necesita agregar la nueva clase. Además, usar una clase "activa" en el elemento de menú te ayuda a separar el artículo en caso de que tengas subtemas. – jackJoe
- 1. ¿Puede Maven hacerse menos detallado?
- 2. Cómo ocultar completamente la barra de navegación en iPhone/HTML5
- 3. ¿Cómo puede el código SwingWorker hacerse comprobable
- 4. ¿Puede hacerse eco el tamaño de SESSION?
- 5. css espacio de navegación horizontal
- 6. CSS Span no se envuelve completamente
- 7. CSS Navegación Sprite - Formas impares (no cuadradas)
- 8. paralelogramo fondo de navegación con CSS
- 9. ¿Pueden dos clases hacerse amigos?
- 10. ¿Qué significa "@" en esta declaración de CSS?
- 11. ¿Puede redis reemplazar completamente a mysql?
- 12. ¿Qué es esta regla de CSS?
- 13. Menú de navegación CSS/JavaScript encima de Flash en Firefox
- 14. No se puede diseñar completamente un ListBox/Scrollviewer en WPF
- 15. No se puede encoger completamente y centrar un elemento
- 16. Puede alguien explicarme esta `StaleDataException`
- 17. ¿Cómo puedo solucionar esta anomalía de CSS?
- 18. ¿Alguien puede explicar esta sintaxis?
- 19. ¿Puede cada iteración de un for loop/for_each hacerse en paralelo? (C++ 11)
- 20. eliminar completamente
- 21. ¿Puede CSS agregar texto automáticamente?
- 22. ¿Cómo deshabilito completamente el caché?
- 23. ¿Puede auth_user.username de django ser varchar (75)? ¿Cómo podría hacerse eso?
- 24. Pesos de fuente Web Safe - ¿Cómo hacerse más delgado?
- 25. CSS - ¿Cómo añadir puntos entre el título de navegación
- 26. Completamente nuevo en SharePoint 2010
- 27. No entiendo completamente JavaScript Threading
- 28. ¿Por qué aspnet_compiler.exe es tan lento (y puede hacerse más rápido)?
- 29. Make JSpinner completamente numérico
- 30. C# ¿Alguien puede explicar esta lógica booleana
Al igual que puede introducir una identificación del cuerpo estáticamente de antemano o dinámicamente con la programación del lado del servidor, también puede aplicar la clase activa por adelantado o por el lado del servidor. – Stefan