Element Framework

Sidebar Layout

  • HTML
  • JS
  • CSS
<ef-sidebar-layout>
  <ef-header slot="sidebar-header" level="1">Sidebar Layout</ef-header>
  <ef-panel slot="sidebar-content" spacing>Menus</ef-panel>
  <ef-panel slot="main-content" spacing>This is awesome.</ef-panel>
</ef-sidebar-layout>

                  
ef-sidebar-layout {
  height: 200px;
}

[slot="sidebar-content"] {
  text-align: center;
  padding: 50px 0;
  background-color: #dfe2e8;
}

[slot="main-content"] {
  text-align: center;
  padding: 90px 0;
  background-color: #f1f1f1;
}

ef-sidebar-layout provides an app layout with a sidebar. There are four sections where a component can be slotted in.

  • Sidebar header
  • Sidebar content
  • Main header
  • Main content

The header slots can be omitted. Also, the component will automatically provide a vertical scrollbar if content is too long.

Using sidebar layout

ef-sidebar-layout is a layout, it is up to the developer to slot any contents into it. Typically, ef-sidebar-layout should be used together with ef-header for header slots, and ef-panel for content. Components that are used inside the layout must be imported by the app.

  • HTML
  • JS
  • CSS
<ef-sidebar-layout>
  <ef-header slot="sidebar-header" level="1">Sidebar Layout</ef-header>
  <ef-panel slot="sidebar-content" spacing class="sidebar-content">Sidebar Content</ef-panel>
  <ef-header slot="main-header" level="1">Main Header</ef-header>
  <ef-panel slot="main-content" spacing class="main-content">Main Content</ef-panel>
</ef-sidebar-layout>

                  
ef-sidebar-layout {
  height: 200px;
}

[slot="sidebar-content"] {
  text-align: center;
  padding: 70px 0;
}

[slot="main-content"] {
  text-align: center;
  padding: 70px 0;
}
<ef-sidebar-layout>
  <ef-header slot="sidebar-header" level="1">Sidebar Header</ef-header>
  <ef-panel slot="sidebar-content" spacing>Sidebar Content</ef-panel>
  <ef-header slot="main-header" level="1">Main Header</ef-header>
  <ef-panel slot="main-content" spacing>Main Content</ef-panel>
</ef-sidebar-layout>

Add toolbar commands

Menus on header could be implemented by using slots of ef-header.

  • HTML
  • JS
  • CSS
<ef-sidebar-layout>
  <ef-header slot="sidebar-header" level="1">Title</ef-header>
  <ef-panel slot="sidebar-content" spacing>Sidebar Content</ef-panel>
  <ef-header slot="main-header" level="1">
    <ef-button slot="right" transparent icon="settings"></ef-button>
    <ef-button slot="right" transparent icon="share"></ef-button>
  </ef-header>
  <ef-panel slot="main-content" spacing>Main Content</ef-panel>
</ef-sidebar-layout>

                  
ef-sidebar-layout {
  height: 200px;
}

[slot="sidebar-content"] {
  text-align: center;
  padding: 60px 0;
}

[slot="main-content"] {
  text-align: center;
  padding: 60px 0;
}
<ef-sidebar-layout>
  <ef-header slot="sidebar-header" level="1">Title</ef-header>
  <ef-panel slot="sidebar-content" spacing>Sidebar Content</ef-panel>
  <ef-header slot="main-header" level="1">
    <ef-button slot="right" transparent icon="settings"></ef-button>
    <ef-button slot="right" transparent icon="share"></ef-button>
  </ef-header>
  <ef-panel slot="main-content" spacing>Main Content</ef-panel>
</ef-sidebar-layout>

Toggled sidebar

Sidebar can be hidden by adding the collapsed attribute. A toggle button to collapse the sidebar can be implemented by code.

  • HTML
  • JS
  • CSS
<ef-sidebar-layout id="layout">
  <ef-header slot="sidebar-header" level="1">Title</ef-header>
  <ef-panel spacing slot="sidebar-content">Sidebar Content</ef-panel>
  <ef-header slot="main-header" level="1">
    <ef-button transparent slot="left" id="toggleBtn" icon="leftpanel-open"></ef-button>
    <ef-button slot="right" transparent icon="settings"></ef-button>
  </ef-header>
  <ef-panel spacing slot="main-content">Main Content</ef-panel>
</ef-sidebar-layout>
var layout = document.getElementById('layout');
var toggleBtn = document.getElementById('toggleBtn');
toggleBtn.addEventListener('click', function() {
  layout.collapsed = !layout.collapsed;
  toggleBtn.setAttribute('icon', layout.collapsed ? 'leftpanel-closed' : 'leftpanel-open');
});
ef-sidebar-layout {
  height: 200px;
}

[slot="sidebar-content"] {
  text-align: center;
  padding: 60px 0;
}

[slot="main-content"] {
  text-align: center;
  padding: 60px 0;
}
<ef-sidebar-layout id="layout">
  <ef-header slot="sidebar-header" level="1">Title</ef-header>
  <ef-panel spacing slot="sidebar-content">Sidebar Content</ef-panel>
  <ef-header slot="main-header" level="1">
    <ef-button transparent slot="left" id="toggleBtn" icon="leftpanel-open"></ef-button>
    <ef-button slot="right" transparent icon="settings"></ef-button>
  </ef-header>
  <ef-panel spacing slot="main-content">Main Content</ef-panel>
</ef-sidebar-layout>

<script>
  var layout = document.getElementById('layout');
  var toggleBtn = document.getElementById('toggleBtn');
  toggleBtn.addEventListener('click', function () {
    layout.collapsed = !layout.collapsed;
    toggleBtn.setAttribute('icon', layout.collapsed ? 'leftpanel-closed' : 'leftpanel-open');
  });
</script>

Slots

sidebar-header
Sidebar header.
sidebar-content
Content of sidebar.
main-header
Main header.
main-content
Content of main section.

API Reference

Attributes

string
sidebar-width
Set the width of the sidebar. The value could be in both px or %, e.g. 300px, 30%
boolean
collapsed
Set to hide sidebar
"left" | "right"
sidebar-position
Set sidebar position to left or right

Properties

string
sidebarWidth
Set the width of the sidebar. The value could be in both px or %, e.g. 300px, 30%
boolean
collapsed
Set to hide sidebar
false
"left" | "right"
sidebarPosition
Set sidebar position to left or right
"left"
sidebar
Property to get sidebar