">文档:<amp-sidebar> - amp.dev - AMP 框架
AMP

amp-sidebar

实验性
Bento

描述

提供一种方式来显示用于临时访问的元内容,例如导航、链接、按钮和菜单。

 

必需脚本

<script async custom-element="amp-sidebar" src="https://cdn.ampproject.org/v0/amp-sidebar-0.2.js"></script>

支持的布局

用法

提供一种显示临时访问元内容的方法,例如导航、链接、按钮、菜单。可以通过点击按钮显示侧边栏,同时主内容在视觉上保留在下方。

<amp-sidebar> 隐藏用于临时访问的元内容(导航链接、按钮、菜单等)。<amp-sidebar> 可以通过点击按钮和点击 amp-sidebar 外部来打开和关闭。但是,可以接受媒体查询的可选属性可用于在网站的其他部分显示元内容。子 <nav toolbar="(media query)" toolbar-target="elementID"> 元素允许侧边栏中的内容显示在主内容的其他部分。

  • 侧边栏只能出现在页面的左侧或右侧。
  • <amp-sidebar> 可以包含任何有效的 HTML 元素(由 AMP 支持)。
  • <amp-sidebar> 可以包含以下任何 AMP 元素
    • <amp-accordion>
    • <amp-img>
    • <amp-fit-text>
    • <amp-list>
    • <amp-live-list>
    • <amp-social-share>
  • 侧边栏的最大高度为 100vh,如果高度超过 100vh,则会出现垂直滚动条。默认高度在 CSS 中设置为 100vh,并且可以在 CSS 中覆盖。
  • 侧边栏的宽度可以使用 CSS 设置和调整(最小宽度为 45px)。
  • 当侧边栏打开时,amp-sidebar 和其蒙版上的触控缩放功能被禁用。
  • 建议<amp-sidebar> 作为 <body> 的直接子级,以保留逻辑 DOM 顺序(以便于访问),并避免容器元素改变其行为。请注意,具有设置的 z-indexamp-sidebar 祖先可能会导致侧边栏出现在其他元素(例如标题)下方,从而破坏其功能。

示例

在以下示例中,我们使用 amp-sidebar 来包含导航项。但是,第二个和第四个项目(导航项 2 和导航项 4)被分配到页面上的元素 ID。通过使用 on 属性,我们可以使用元素 ID 和 scrollTo 平滑滚动到元素。

<amp-sidebar id="sidebar1" layout="nodisplay" side="right">
  <ul>
    <li>Nav item 1</li>
    <li><a href="#idTwo" on="tap:idTwo.scrollTo">Nav item 2</a></li>
    <li>Nav item 3</li>
    <li><a href="#idFour" on="tap:idFour.scrollTo">Nav item 4</a></li>
    <li>Nav item 5</li>
    <li>Nav item 6</li>
  </ul>
</amp-sidebar>

在有效的 AMP 文档之外独立使用

Bento 允许你在非 AMP 页面中使用 AMP 组件,而无需完全提交到有效的 AMP。你可以获取这些组件,并将它们放在不支持 AMP 的框架和 CMS 的实现中。在我们的指南 在非 AMP 页面中使用 AMP 组件 中阅读更多内容。

要查找 amp-sidebar 的独立版本,请参阅 bento-sidebar

打开和关闭侧边栏

要在点击或单击元素时切换、打开或关闭侧边栏,请在元素上设置 on 操作属性,并指定以下操作方法之一

操作 描述
打开(默认) 打开侧边栏
关闭 关闭侧边栏
切换 切换侧边栏状态

如果用户点击部分可见的主内容区域,这将关闭侧边栏。

或者,按键盘上的 ESC 键也将关闭侧边栏。

示例

<button class="hamburger" on="tap:sidebar1.toggle"></button>
<button on="tap:sidebar1">Open</button>
<button on="tap:sidebar1.open">Open</button>
<button on="tap:sidebar1.close">x</button>

工具栏

您可以创建一个 toolbar 元素,通过使用媒体查询指定 toolbar 属性和 <nav> 元素上的元素 ID 指定 toolbar-target 属性,该 <nav> 元素是 <amp-sidebar> 的子元素,在 <body> 中显示。toolbar 复制 <nav> 元素及其子元素,并将该元素追加到 toolbar-target 元素中。

行为

  • 侧边栏可以通过添加带有 toolbar 属性和 toolbar-target 属性的导航元素来实现工具栏。
  • nav 元素必须是 <amp-sidebar> 的子元素,并遵循以下格式:<nav toolbar="(media-query)" toolbar-target="elementID">
    • 例如,这将是工具栏的有效用法:<nav toolbar="(max-width: 1024px)" toolbar-target="target-element">
  • 包含 toolbar 属性的 nav 只能包含一个 <ul><ol> 元素,其中包含 <li> 元素。
    • <li> 元素可能包含任何有效的 HTML 元素(AMP 支持)或 <amp-sidebar> 支持的任何 AMP 元素。
  • 工具栏行为仅在 toolbar 属性媒体查询有效时应用。此外,页面上必须存在具有 toolbar-target 属性 ID 的元素,才能应用工具栏。

示例:基本工具栏

在以下示例中,如果窗口宽度小于或等于 767px,我们将显示 toolbartoolbar 包含一个搜索输入元素。toolbar 元素将附加到 <div id="target-element"> 元素。

<amp-sidebar id="sidebar1" layout="nodisplay" side="right">
  <ul>
    <li>Nav item 1</li>
    <li><a href="#idTwo" on="tap:idTwo.scrollTo">Nav item 2</a></li>
    <li>Nav item 3</li>
    <li><a href="#idFour" on="tap:idFour.scrollTo">Nav item 4</a></li>
    <li>Nav item 5</li>
    <li>Nav item 6</li>
  </ul>

  <nav toolbar="(max-width: 767px)" toolbar-target="target-element">
    <ul>
      <li>
        <input placeholder="Search..." />
      </li>
    </ul>
  </nav>
</amp-sidebar>

<div id="target-element"></div>

工具栏样式

<amp-sidebar> 元素中的 toolbar 元素将根据 toolbar-target 元素是否显示或隐藏,将类应用到该元素。这对于对 toolbar 元素应用不同样式,然后应用 toolbar-target 元素非常有用。这些类是 amp-sidebar-toolbar-target-shownamp-sidebar-toolbar-target-hidden。当 toolbar-target 元素显示时,类 amp-sidebar-toolbar-target-shown 应用于 toolbar 元素。当 toolbar-target 元素隐藏时,类 amp-sidebar-toolbar-target-hidden 应用于 toolbar 元素。此外,可以通过 amp-sidebar-mask 自定义遮罩的不透明度。

示例:工具栏状态类

在以下示例中,如果窗口宽度小于或等于 767px,我们将显示 toolbartoolbar 包含一个搜索输入元素。toolbar 元素将附加到 <div id="target-element"> 元素。但是,当 <div id="toolbar-target"> 元素显示时,我们添加了一些自定义样式来隐藏 toolbar 元素。

<style amp-custom="">
  .amp-sidebar-toolbar-target-shown {
    display: none;
  }
</style>

<amp-sidebar id="sidebar1" layout="nodisplay" side="right">
  <ul>
    <li>Nav item 1</li>
    <li><a href="#idTwo" on="tap:idTwo.scrollTo">Nav item 2</a></li>
    <li>Nav item 3</li>
    <li><a href="#idFour" on="tap:idFour.scrollTo">Nav item 4</a></li>
    <li>Nav item 5</li>
    <li>Nav item 6</li>
  </ul>

  <nav toolbar="(max-width: 767px)" toolbar-target="target-element">
    <ul>
      <li>
        <input placeholder="Search..." />
      </li>
    </ul>
  </nav>
</amp-sidebar>

<div id="target-element"></div>

在溢出区域内自动滚动

amp-sidebar 可以自动滚动溢出的容器到第一个元素,该元素在侧边栏和工具栏情况下都用 autoscroll 作为属性进行装饰。

此功能在处理较长的导航列表并希望在页面加载时滚动侧边栏到当前导航项时很有用。

使用 toolbar 功能时,autoscroll 仅在 <nav toolbar> 元素设置为 overflow: autooverflow: scroll 时才起作用。

<style amp-custom="">
  nav [toolbar] {
    overflow: auto;
  }
</style>

<amp-sidebar id="sidebar1" layout="nodisplay" side="right">
  <nav toolbar="(max-width: 767px)" toolbar-target="target-element">
    <ul>
      <li>Nav item 1</li>
      <li>Nav item 2</li>
      <li>Nav item 3</li>
      <li autoscroll class="currentPage">Nav item 4</li>
      <li>Nav item 5</li>
      <li>Nav item 6</li>
    </ul>
  </nav>
</amp-sidebar>

<div id="target-element"></div>

请参阅 此示例文件,了解可用的示例代码。

构建嵌套菜单

<amp-sidebar> 通过名为 <amp-nested-menu> 的子组件支持钻取(嵌套)菜单。使用 <amp-nested-menu><amp-sidebar> 可以支持嵌套一层或多层子菜单(并在它们之间进行转换),如下例所示

使用 amp-nested-menu 时,将每个菜单项包装在 li 元素中以提高可访问性和键盘支持。

<button on="tap:sidebar1">Open Sidebar</button>
<amp-sidebar id="sidebar1" layout="nodisplay" style="width:300px">
  <amp-nested-menu layout="fill">
    <ul>
      <li>
        <h4 amp-nested-submenu-open>Open Sub-Menu</h4>
        <div amp-nested-submenu>
          <ul>
            <li>
              <h4 amp-nested-submenu-close>Go back</h4>
            </li>
            <li>
              <h4 amp-nested-submenu-open>Open Another Sub-Menu</h4>
              <div amp-nested-submenu>
                <h4 amp-nested-submenu-close>Go back</h4>
              </div>
            </li>
          </ul>
        </div>
      </li>
      <li>
        <a href="https://amp.org.cn/">Link</a>
      </li>
    </ul>
  </amp-nested-menu>
</amp-sidebar>
在游乐场中打开此代码段

有关嵌套菜单的完整文档以及动态内容加载等高级功能,请参阅 <amp-nested-menu>

用户体验注意事项

使用 <amp-sidebar> 时,请记住,您的用户通常会在 AMP 查看器中以移动设备查看您的页面,该查看器可能会显示固定位置页眉。此外,浏览器通常会在页面顶部显示它们自己的固定页眉。在屏幕顶部添加另一个固定位置元素会占用大量移动屏幕空间,而该内容不会为用户提供任何新信息。

因此,我们建议不要将打开侧边栏的提示放置在固定的全宽页眉中。

属性

side

指示侧边栏应从页面的哪一侧打开,leftright。如果未指定 side,则 side 值将从 body 标签的 dir 属性继承(ltr => leftrtl => right);如果不存在 dir,则 side 默认为 left

布局

指定侧边栏的显示布局,该布局必须为 nodisplay

open

侧边栏打开时存在此属性。

data-close-button-aria-label

用于为辅助功能添加的关闭按钮设置 ARIA 标签的可选属性。

toolbar

此属性存在于子 <nav toolbar="(media-query)" toolbar-target="elementID"> 元素中,并接受媒体查询以显示工具栏的时间。有关使用工具栏的更多信息,请参阅 工具栏 部分。

toolbar-target

此属性存在于子 <nav toolbar="(media-query)" toolbar-target="elementID"> 中,并接受页面上元素的 ID。toolbar-target 属性会将工具栏放置到页面上元素的指定 ID 中,而没有默认的工具栏样式。有关使用工具栏的更多信息,请参阅 工具栏 部分。

data-disable-swipe-close

amp-sidebar 上包含此属性会禁用滑动关闭。在使用移动设备或其他支持触控的设备时,将禁用滑动关闭侧边栏。

通用属性

此元素包含 通用属性,已扩展到 AMP 组件。

样式

可以使用标准 CSS 设置 amp-sidebar 组件的样式。

  • 可以设置 amp-sidebarwidth 来调整预设最小值 (45px) 和最大值 (80vw) 之间的宽度。
  • 如果需要,可以设置 amp-sidebar 的高度来调整侧边栏的高度。如果高度超过 100vw,侧边栏将具有垂直滚动条。侧边栏的预设高度为 100vw,可以在 CSS 中覆盖它以使其更短。
  • 侧边栏的当前状态通过 open 属性公开,当页面上的侧边栏打开时,该属性会设置在 amp-sidebar 标签上。

访问 AMP Start,了解可在 AMP 页面中使用的响应式预设导航菜单。

验证

请参阅 AMP 验证器规范中的 amp-sidebar 规则

需要更多帮助?

您已经阅读了本文档很多遍,但它并没有真正涵盖您所有的问题?也许其他人也有同感:在 Stack Overflow 上联系他们。

转到 Stack Overflow
发现错误或缺少功能?

AMP 项目强烈鼓励您参与和做出贡献!我们希望您成为我们开源社区的持续参与者,但我们也欢迎针对您特别热衷的问题进行一次性贡献。

转到 GitHub