Skip to content

Menu

CMenu es un componente de navegación sin estilos visuales propios. Proporciona la estructura semántica div.c-menu > nav > ul.links y deja al proyecto consumidor el control total sobre el contenido de cada ítem.


Importación

JavaScript (Vue 3)

js
import { CMenu } from '@bedrock/core/vue';

SCSS

scss
// Emite los estilos base de .c-menu
@use '@bedrock/core/menu';

Props

PropTipoDefaultDescripción
tagString'div'Etiqueta HTML del elemento raíz.

Slots

SlotDescripción
defaultElementos <li> del menú. El consumidor decide el contenido de cada ítem.

Estructura renderizada

html
<div class="c-menu">
  <nav>
    <ul class="links">
      <!-- slot: <li> elementos del consumidor -->
    </ul>
  </nav>
</div>

Ejemplos de uso

html
<CMenu>
  <li><a href="/inicio"><span class="text">Inicio</span></a></li>
  <li><a href="/sobre"><span class="text">Sobre nosotros</span></a></li>
  <li><a href="/contacto"><span class="text">Contacto</span></a></li>
</CMenu>

Con ítem activo

Marca el ítem activo con data-active en el <li>. El proyecto consumidor lo estiliza con @include attr(active).

html
<CMenu>
  <li data-active><a href="/inicio"><span class="text">Inicio</span></a></li>
  <li><a href="/sobre"><span class="text">Sobre nosotros</span></a></li>
</CMenu>
html
<CMenu>
  <li data-active><CLink href="/inicio">Inicio</CLink></li>
  <li><CLink href="/sobre">Sobre nosotros</CLink></li>
</CMenu>

Como elemento <nav> directo

html
<CMenu tag="nav">
  <li><a href="/inicio"><span class="text">Inicio</span></a></li>
</CMenu>

Estilos en el proyecto consumidor

CMenu emite únicamente la estructura flex de la lista y el display: flex en los enlaces. El proyecto consumidor define tipografía, colores, espaciado y estados.

scss
// src/components/nav/_menu.scss
@use 'bedrock-config' as *;
@use '@bedrock/core/menu';

.c-menu {
  .links {
    gap: spacing(7);

    @include bpFrom(xl) {
      flex-direction: row;
    }
  }

  .links > li > a {
    .text {
      @include typeset(nav);
      color: color(text);
      @include transition((color));
    }

    @include hover {
      .text { color: color(primary); }
    }
  }

  // Ítem activo (data-active en el <li>)
  .links > li {
    @include attr(active) {
      > a .text { color: color(primary); }
    }
  }

  // Adapatación a fondo oscuro
  @include context(background, dark) {
    .links > li > a .text { color: color(white); }
  }
}

Publicado bajo licencia MIT.