Estoy usando github para alojar un sitio estático y Jekyll para generarlo.
Tengo una barra de menú (como <ul>
) y me gustaría que a la <li>
correspondiente a la página actual se le asigne una clase diferente para resaltar CSS.
Entonces, algo como un pseudocódigo:
<li class={(hrefpage==currentpage)?"highlight":"nothighlight"} ...>
O tal vez incluso generar el todo <ul>
en Jekyll.
¿Cómo se puede hacer esto con cambios mínimos fuera de la infracción <ul>
?
Respuestas:
Sí, usted puede hacer esto.
Para lograrlo aprovecharemos que la página actual siempre está representada por la variable líquida:
page
en la plantilla, y además que cada publicación / página tiene un identificador único en supage.url
atributo.Esto significa que solo tenemos que usar un bucle para construir nuestra página de navegación y, al hacerlo, podemos verificar
page.url
cada miembro del bucle. Si encuentra una coincidencia, sabe resaltar ese elemento. Aquí vamos:Esto funciona como se esperaba. Sin embargo, probablemente no quieras que todas tus páginas estén en la barra de navegación. Para emular la "agrupación" de páginas, puede hacer algo como esto:
Ahora las páginas se pueden "agrupar". Para asignar un grupo a una página, debe especificarlo en las páginas YAML Front Matter:
¡Finalmente puedes usar tu nuevo código! Donde sea que necesite que su navegación vaya en su plantilla, simplemente "llame" a su archivo de inclusión y páselo algunas páginas y el grupo que desea mostrar:
Ejemplos
Esta funcionalidad es parte del marco Jekyll-Bootstrap . Puede ver la documentación exacta del código que se describe aquí: http://jekyllbootstrap.com/api/bootstrap-api.html#jbpages_list
Finalmente puedes verlo en acción dentro del propio sitio web. Solo mire la navegación de la derecha y verá que la página actual está resaltada en verde: Ejemplo de enlace de navegación resaltado
fuente
jekyll 2.4.0 | Error: The included file '/Users/joelglovier/project/jekyllsite/_includes/pages_list' should exist and should not be a symlink
.html
extensión a pages_list e incluirla en su lugarCreo que para el requisito de navegación más simple, las soluciones enumeradas son demasiado complejas. Aquí hay una solución que no implica nada frontal, javascript, bucles, etc.
Dado que tenemos acceso a la URL de la página, podemos normalizar y dividir la URL y probar contra los segmentos, así:
Por supuesto, esto solo es útil si los segmentos estáticos proporcionan los medios para delinear la navegación. Algo más complicado, y tendrás que usar la parte delantera como demostró @RobertKenny.
fuente
classs="active"
?.active
, entonces sí. En la respuesta anterior, el autor dice que la clase para llamar en su hoja de estilo es.current
. No es gran cosa.Similar a la solución de @ ben-foster pero sin usar jQuery
Necesitaba algo simple, esto es lo que hice.
En mi asunto principal agregué una variable llamada
active
p.ej
Tengo una navegación incluida con la siguiente sección
Esto funciona para mí ya que la cantidad de enlaces en la navegación es muy limitada.
fuente
Aquí está mi solución, que creo que es la mejor manera de resaltar la página actual:
Defina una lista de navegación en su _config.yml como esta:
Luego, en su archivo _includes / header.html , debe recorrer la lista para verificar si la página actual ( page.url ) se parece a algún elemento de la lista de navegación, si es así, simplemente configure la clase activa y agréguela a la
<a>
etiqueta:Y debido a que está utilizando el operador contiene en lugar del operador igual = , no tiene que escribir código adicional para que funcione con URL como '/ blog / post-name /' o 'projects / project-name / ' . Funciona muy bien.
PD: No olvide establecer la variable de enlace permanente en sus páginas.
fuente
/
porque todas las URL de página contienen la barra inclinada. Las siguientes obras:{% for link in site.navigation %} {% assign class = nil %} {% if page.url == link.url %} {% assign class = 'active' %} {% elsif page.url != '/' and page.url contains link.url %} {% assign class = 'active parent' %} {% endif %} <a href="{{link.url}}" class="{{class}}">{{link.title}}</a> {% endfor %}
Usé un poco de JavaScript para lograr esto. Tengo la siguiente estructura en el menú:
Este fragmento de JavaScript destaca la página correspondiente actual:
fuente
Mi enfoque es definir una variable personalizada en la parte frontal de YAML de la página y generarla en el
<body>
elemento:Mis enlaces de navegación incluyen el identificador de la página a la que enlazan:
En la portada de la página, configuramos la identificación de la página:
Y finalmente un poco de jQuery para establecer el enlace activo:
fuente
La navegación de su sitio web debe ser una lista desordenada. Para que los elementos de la lista se iluminen cuando están activos, el siguiente script líquido les agrega una clase 'activa'. Esta clase debe tener un estilo con CSS. Para detectar qué enlace está activo, el script usa 'contiene', como puede ver en el código siguiente.
Este código es compatible con todos los estilos de enlaces permanentes de Jekyll. La declaración 'contiene' resalta con éxito el primer elemento del menú en las siguientes URL:
Fuente: http://jekyllcodex.org/without-plugin/simple-menu/
fuente
Muchas respuestas confusas aquí. Simplemente uso un
if
:Me refiero directamente a la página y la pongo dentro de la clase que quiero
Hecho. Rápido.
fuente
He estado usando
page.path
y saliendo del nombre de archivo.fuente
Ya hay muchas buenas respuestas.
Prueba esto.
Altero ligeramente las respuestas anteriores.
_data/navigation.yaml
En una página ->
portfolio.html
(Lo mismo para todas las páginas con un nombre de página activo relativo)Navigation html part
fuente
si está utilizando el tema Minima para jekyll, solo necesita agregar un ternario en el atributo de clase en header.html:
el extracto completo:
agregue esto a su _config.yml
Y luego, por supuesto, su css:
fuente
Aquí hay un método jQuery para hacer lo mismo
fuente