菜单

菜单集合

相关源文件

Semantic UI 中的菜单集合提供了一个灵活的导航组件,用于组织内容并引导用户浏览应用程序。本文档描述了 Semantic UI 框架内菜单组件的结构、类型、状态和变体。有关表单样式,请参阅 表单集合,有关布局网格,请参阅 网格系统

基本结构

菜单集合由一个带有类 .ui.menu 的容器组成,其中包含带有类 .item 的单个菜单项。菜单支持各种嵌入式元素,包括图标、标签、输入框和下拉菜单。

来源: src/definitions/collections/menu.less30-46 src/definitions/collections/menu.less74-94

菜单容器 (.ui.menu) 是一个 flex 容器,具有预定义的边距、背景、字体和边框样式。默认情况下,它水平显示菜单项。

.ui.menu {
  display: flex;
  margin: @margin;
  font-family: @fontFamily;
  background: @background;
  font-weight: @fontWeight;
  border: @border;
  box-shadow: @boxShadow;
  border-radius: @borderRadius;
  min-height: @minHeight;
}

来源: src/definitions/collections/menu.less30-40

菜单项 (.ui.menu .item) 是菜单内的交互式元素。它们在定位、内边距和过渡方面具有一致的样式。

.ui.menu .item {
  position: relative;
  vertical-align: middle;
  line-height: 1;
  text-decoration: none;
  -webkit-tap-highlight-color: transparent;
  flex: 0 0 auto;
  user-select: none;
  
  background: @itemBackground;
  padding: @itemVerticalPadding @itemHorizontalPadding;
  text-transform: @itemTextTransform;
  color: @itemTextColor;
  font-weight: @itemFontWeight;
  transition: @itemTransition;
}

来源: src/definitions/collections/menu.less79-94

菜单可以包含各种组件来增强功能和外观。

来源: src/definitions/collections/menu.less112-346

图标

可以使用 .icon 类将图标添加到菜单项中。它们具有预定义的透明度和外边距设置。

.ui.menu .item > i.icon {
  opacity: @iconOpacity;
  float: @iconFloat;
  margin: @iconMargin;
}

来源: src/definitions/collections/menu.less133-137

按钮

可以使用特定定位和外边距调整将按钮嵌入菜单项中。

.ui.menu:not(.vertical) .item > .button {
  position: relative;
  top: @buttonOffset;
  margin: @buttonMargin;
  padding-bottom: @buttonVerticalPadding;
  padding-top: @buttonVerticalPadding;
  font-size: @buttonSize;
}

来源: src/definitions/collections/menu.less143-150

菜单项可以作为下拉菜单发挥作用,并为触发器和下拉菜单提供额外的样式。

.ui.menu .dropdown.item .menu {
  min-width: calc(100% - 1px);
  border-radius: 0em 0em @dropdownMenuBorderRadius @dropdownMenuBorderRadius;
  background: @dropdownBackground;
  margin: @dropdownMenuDistance 0px 0px;
  box-shadow: @dropdownMenuBoxShadow;
  flex-direction: column !important;
}

来源: src/definitions/collections/menu.less213-220 src/definitions/collections/menu.less224-258

标签

标签可以添加到菜单项中,以显示计数或状态指示器。

.ui.menu .item > .label {
  background: @labelBackground;
  color: @labelTextColor;
  margin-left: @labelTextMargin;
  padding: @labelVerticalPadding @labelHorizontalPadding;
}

来源: src/definitions/collections/menu.less315-320

菜单和菜单项可以具有不同的状态,为用户提供视觉反馈。

来源: src/definitions/collections/menu.less396-458

悬停状态

菜单项在悬停时会显示视觉反馈,背景和文本颜色会发生变化。

.ui.link.menu .item:hover,
.ui.menu .dropdown.item:hover,
.ui.menu .link.item:hover,
.ui.menu a.item:hover {
  cursor: pointer;
  background: @hoverItemBackground;
  color: @hoverItemTextColor;
}

来源: src/definitions/collections/menu.less402-409

活动状态

活动状态指示当前选中的项目。

.ui.menu .active.item  {
  background: @activeItemBackground;
  color: @activeItemTextColor;
  font-weight: @activeItemFontWeight;
  box-shadow: @activeItemBoxShadow;
}

来源: src/definitions/collections/menu.less428-433

禁用状态

禁用状态的菜单项视觉上会变暗,并且不可交互。

.ui.menu .item.disabled,
.ui.menu .item.disabled:hover {
  cursor: default !important;
  background-color: transparent !important;
  color: @disabledTextColor !important;
}

来源: src/definitions/collections/menu.less453-458

Semantic UI 提供各种菜单类型以满足不同的 UI 需求。

来源: src/definitions/collections/menu.less464-1212

垂直菜单

垂直菜单将菜单项垂直堆叠,而不是水平堆叠。

.ui.vertical.menu {
  display: block;
  flex-direction: column;
  background: @verticalBackground;
  box-shadow: @verticalBoxShadow;
}

来源: src/definitions/collections/menu.less494-499

二级菜单

二级菜单外观更柔和,默认没有边框或背景。

.ui.secondary.menu {
  background: @secondaryBackground;
  margin-left: -@secondaryItemSpacing;
  margin-right: -@secondaryItemSpacing;
  border-radius: 0em;
  border: none;
  box-shadow: none;
}

来源: src/definitions/collections/menu.less774-781

指示菜单

指示菜单使用指针来指示活动项。

.ui.pointing.menu .active.item:after {
  background: @arrowActiveColor !important;
  margin: 0em !important;
  box-shadow: none !important;
  border: none !important;
}

来源: src/definitions/collections/menu.less901-947

选项卡菜单

选项卡菜单模仿选项卡的外观,通常与选项卡式内容一起使用。

.ui.tabular.menu {
  border-radius: 0em;
  box-shadow: none !important;
  border: none;
  background: @tabularBackground;
  border-bottom: @tabularBorderWidth solid @tabularBorderColor;
}

来源: src/definitions/collections/menu.less596-602

文本菜单

文本菜单没有背景、边框或其他装饰元素,仅显示文本。

.ui.text.menu {
  background: none transparent;
  border-radius: 0px;
  box-shadow: none;
  border: none;
  margin: @textMenuMargin;
}

来源: src/definitions/collections/menu.less1020-1027

Semantic UI 提供各种变体来定制菜单的外观和行为。

来源: src/definitions/collections/menu.less1215-1458

颜色

可以使用 Semantic UI 的颜色系统为菜单和菜单项着色。

.ui.menu .red.active.item,
.ui.red.menu .active.item {
  border-color: @red !important;
  color: @red !important;
}

来源: src/definitions/collections/menu.less1259-1320

Inverted(反色)

反转菜单具有深色背景和浅色文本,反转了默认的配色方案。

.ui.inverted.menu {
  border: @invertedBorder;
  background: @invertedBackground;
  box-shadow: @invertedBoxShadow;
}

来源: src/definitions/collections/menu.less1327-1331

堆叠式

堆叠式菜单会在移动设备上自动转换为垂直布局。

@media only screen and (max-width: @largestMobileScreen) {
  .ui.stackable.menu {
    flex-direction: column;
  }
  .ui.stackable.menu .item {
    width: 100% !important;
  }
}

来源: src/definitions/collections/menu.less1223-1254

响应式行为

Semantic UI 中的菜单设计用于跨不同设备尺寸工作,并具有针对移动设备的特定行为。

移动端适配

对于小屏幕,菜单可以

  1. 使用堆叠式变体垂直堆叠
  2. 调整容器宽度以填充可用空间
@media only screen and (max-width: @largestMobileScreen) {
  .ui.menu > .ui.container {
    width: 100% !important;
    margin-left: 0em !important;
    margin-right: 0em !important;
  }
}

来源: src/definitions/collections/menu.less379-385

定制

可以通过修改主题文件中的变量来定制Semantic UI的菜单集合。

关键定制变量

可变描述默认值
@background菜单背景颜色#FFFFFF
@itemVerticalPadding菜单项的垂直内边距@relativeSmall
@itemHorizontalPadding菜单项的水平内边距@relativeLarge
@activeItemBackground活动项目的背景颜色@transparentBlack
@activeItemTextColor活动项目的文本颜色@selectedTextColor
@hoverItemBackground悬停项目的背景颜色@subtleTransparentBlack
@secondaryItemMargin次级菜单项的边距0em @secondaryItemSpacing

来源: src/themes/default/collections/menu.variables10-22 src/themes/default/collections/menu.variables162-178

主题继承

菜单样式遵循Semantic UI的主题继承模式,其中默认值可以通过以下方式覆盖:

  1. 网站范围的变量
  2. 组件特定的变量
  3. 变体特定的变量

来源: src/definitions/collections/menu.less14-20