diff --git a/src/common/EnableCollapsibleNavbar.res b/src/common/EnableCollapsibleNavbar.res
new file mode 100644
index 000000000..ff3c506cf
--- /dev/null
+++ b/src/common/EnableCollapsibleNavbar.res
@@ -0,0 +1,19 @@
+/**
+ * Hides the navbar when scrolling down on mobile, and causes it to reappear when scrolling back up.
+ */
+@jsx.component
+let make = (~children, ~isEnabled) => {
+  let scrollDir = Hooks.useScrollDirection()
+  if isEnabled {
+    <div
+      className={switch scrollDir {
+      | Up(_) => "group nav-appear"
+
+      | Down(_) => "group nav-disappear"
+      }}>
+      children
+    </div>
+  } else {
+    children
+  }
+}
diff --git a/src/components/Navigation.res b/src/components/Navigation.res
index 48bfb3863..8e3753bc0 100644
--- a/src/components/Navigation.res
+++ b/src/components/Navigation.res
@@ -71,7 +71,7 @@ module MobileNav = {
   }
 }
 
-/* isOverlayOpen: if the mobile overlay is toggled open */
+/* isOverlayOpen: if the mobile sidebar is toggled open */
 @react.component
 let make = (~fixed=true, ~isOverlayOpen: bool, ~setOverlayOpen: (bool => bool) => unit) => {
   let minWidth = "20rem"
@@ -80,7 +80,9 @@ let make = (~fixed=true, ~isOverlayOpen: bool, ~setOverlayOpen: (bool => bool) =
   let url = router.route->Url.parse
   let version = url->Url.getVersionString
 
-  let toggleOverlay = () => setOverlayOpen(prev => !prev)
+  let toggleOverlay = () => {
+    setOverlayOpen(prev => !prev)
+  }
 
   let fixedNav = fixed ? "fixed top-0" : "relative"
 
@@ -169,7 +171,7 @@ let make = (~fixed=true, ~isOverlayOpen: bool, ~setOverlayOpen: (bool => bool) =
       {isDocRoute(~route)
         ? <nav
             id="docs-subnav"
-            className="bg-white z-50 px-4 w-full h-12 shadow text-gray-60 text-12 md:text-14 transition duration-300 ease-out group-[.nav-disappear]:-translate-y-16 md:group-[.nav-disappear]:transform-none">
+            className="bg-white z-50 px-4 w-full h-12 shadow text-gray-60 text-12 md:text-14 transition duration-300 ease-out group-[.nav-disappear]:-translate-y-32 md:group-[.nav-disappear]:transform-none">
             <div
               className="pl-30 flex gap-6 lg:gap-10 items-center h-full w-full max-w-1280 m-auto">
               <Link
diff --git a/src/layouts/SidebarLayout.res b/src/layouts/SidebarLayout.res
index 96fc3e69c..9ee651864 100644
--- a/src/layouts/SidebarLayout.res
+++ b/src/layouts/SidebarLayout.res
@@ -138,22 +138,21 @@ module Sidebar = {
         id="sidebar"
         className={(
           isOpen ? "fixed w-full left-0 h-full z-20 min-w-320" : "hidden "
-        ) ++ " overflow-x-hidden md:block md:w-48 md:-ml-4 lg:w-1/5 md:h-auto md:relative overflow-y-visible bg-white"}>
+        ) ++ " overflow-x-hidden md:block md:w-48 md:-ml-4 lg:w-1/5 md:h-auto md:relative overflow-y-visible bg-white mt-28 md:mt-0"}>
         <aside
           id="sidebar-content"
           className="relative top-0 px-4 w-full block md:top-16 md:pt-4 md:sticky border-r border-gray-20 overflow-y-auto pb-24"
           style={ReactDOMStyle.make(~height="calc(100vh - 4.5rem", ())}>
+          <button
+            onClick={evt => {
+              ReactEvent.Mouse.preventDefault(evt)
+              toggle()
+            }}
+            className="md:hidden h-16 flex pt-2 right-4 absolute">
+            <Icon.Close />
+          </button>
           <div className="flex justify-between">
             <div className="w-3/4 md:w-full"> toplevelNav </div>
-            <button
-              style={{paddingTop: "72px"}}
-              onClick={evt => {
-                ReactEvent.Mouse.preventDefault(evt)
-                toggle()
-              }}
-              className="md:hidden h-16">
-              <Icon.Close />
-            </button>
           </div>
           preludeSection
           /* Firefox ignores padding in scroll containers, so we need margin
@@ -202,7 +201,7 @@ module BreadCrumbs = {
 module MobileDrawerButton = {
   @react.component
   let make = (~hidden: bool, ~onClick) =>
-    <button className={(hidden ? "hidden" : "") ++ " md:hidden mr-3"} onMouseDown=onClick>
+    <button className={(hidden ? "hidden " : "") ++ "md:hidden mr-3"} onMouseDown=onClick>
       <img className="h-4" src="/static/ic_sidebar_drawer.svg" />
     </button>
 }
@@ -222,6 +221,7 @@ let make = (
   ~children,
 ) => {
   let (isNavOpen, setNavOpen) = React.useState(() => false)
+
   let router = Next.Router.useRouter()
   let version = Url.parse(router.route).version
 
@@ -234,8 +234,11 @@ let make = (
 
   let breadcrumbs = breadcrumbs->Option.mapOr(React.null, crumbs => <BreadCrumbs crumbs />)
 
-  let (_isSidebarOpen, setSidebarOpen) = sidebarState
-  let toggleSidebar = () => setSidebarOpen(prev => !prev)
+  let (isSidebarOpen, setSidebarOpen) = sidebarState
+
+  let toggleSidebar = () => {
+    setSidebarOpen(prev => !prev)
+  }
 
   React.useEffect(() => {
     open Next.Router.Events
@@ -304,36 +307,38 @@ let make = (
 
   <>
     <Meta title=metaTitle version />
-    <div className={"mt-16 min-w-320 " ++ theme}>
-      <div className="w-full">
-        <Navigation isOverlayOpen=isNavOpen setOverlayOpen=setNavOpen />
-        <div className="flex lg:justify-center">
-          <div className="flex w-full max-w-1280 md:mx-8">
-            sidebar
-            <main className="px-4 w-full pt-20 md:ml-12 lg:mr-8 mb-32 md:max-w-576 lg:max-w-740">
-              //width of the right content part
-              <div
-                className={"z-10 fixed border-b shadow top-[112px] left-0 pl-4 bg-white w-full py-4 md:relative md:border-none md:shadow-none md:p-0 md:top-auto flex items-center transition duration-300 ease-out group-[.nav-disappear]:-translate-y-32 md:group-[.nav-disappear]:transform-none"}>
-                <MobileDrawerButton hidden=isNavOpen onClick={handleDrawerButtonClick} />
+    <EnableCollapsibleNavbar isEnabled={!isSidebarOpen && !isNavOpen}>
+      <div className={"mt-16 min-w-320 " ++ theme}>
+        <div className="w-full">
+          <Navigation isOverlayOpen=isNavOpen setOverlayOpen=setNavOpen />
+          <div className="flex lg:justify-center">
+            <div className="flex w-full max-w-1280 md:mx-8">
+              sidebar
+              <main className="px-4 w-full pt-20 md:ml-12 lg:mr-8 mb-32 md:max-w-576 lg:max-w-740">
+                //width of the right content part
                 <div
-                  className="truncate overflow-x-auto touch-scroll flex items-center space-x-4 md:justify-between mr-4 w-full">
-                  breadcrumbs
-                  editLinkEl
+                  className={"z-10 fixed border-b shadow top-[112px] left-0 pl-4 bg-white w-full py-4 md:relative md:border-none md:shadow-none md:p-0 md:top-auto flex items-center transition duration-300 ease-out group-[.nav-disappear]:-translate-y-64 md:group-[.nav-disappear]:transform-none"}>
+                  <MobileDrawerButton hidden=isNavOpen onClick={handleDrawerButtonClick} />
+                  <div
+                    className="truncate overflow-x-auto touch-scroll flex items-center space-x-4 md:justify-between mr-4 w-full">
+                    breadcrumbs
+                    editLinkEl
+                  </div>
                 </div>
-              </div>
-              <div className={hasBreadcrumbs ? "mt-10" : "mt-6 md:-mt-4"}>
-                <MdxProvider components> children </MdxProvider>
-              </div>
-              pagination
-            </main>
-            {switch rightSidebar {
-            | Some(ele) => ele
-            | None => React.null
-            }}
+                <div className={hasBreadcrumbs ? "mt-10" : "mt-6 md:-mt-4"}>
+                  <MdxProvider components> children </MdxProvider>
+                </div>
+                pagination
+              </main>
+              {switch rightSidebar {
+              | Some(ele) => ele
+              | None => React.null
+              }}
+            </div>
           </div>
         </div>
+        <Footer />
       </div>
-      <Footer />
-    </div>
+    </EnableCollapsibleNavbar>
   </>
 }