123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- /**
- * The website contains two main components: the sidebar and the textbook page.
- * This file specifies the layout and includes classes to show/hide the sidebar
- * on small screens.
- *
- * The actual styling for the sidebar and page are located in their respective
- * component SCSS files. This file manages the layout and width only.
- *
- * By default, the sidebar is not visible.
- *
- * [1]: The entire page is positioned relative so that when the page overflows
- * (e.g. sidebar open on small screens) the user can't scroll left/right.
- * [2]: The sidebar and the textbook page are positioned absolute so that we
- * can use translate() on the textbook page to reveal the sidebar.
- * [3]: Setting the background color hides the sidebar when it's behind the
- * page (otherwise the page is transparent).
- *
- * When the sidebar is visible:
- *
- * [4]: Shift the textbook page over to the left. On small screens, the page
- * will overflow since the sidebar takes up most of the screen.
- * [5]: On larger screens, the page and sidebar have enough room to read them
- * simultaneously, so make sure that the page doesn't overflow.
- */
- $left-sidebar-width: 300px;
- $textbook-page-max-width: 950px;
- $right-sidebar-width: 220px;
- $topbar-height: 60px;
- .c-textbook {
- /* [1] */
- position: relative;
- height: 100vh;
- overflow: hidden;
- margin: 0 0 0 auto;
- }
- .c-topbar {
- background-color: $book-background-color;
- position: fixed;
- top: 0;
- height: $topbar-height;
- width: 100%;
- left: 0;
- padding: $spacing-unit-small $spacing-unit-small 0 $spacing-unit-med * 2;
- z-index: 1;
- transition: top 250ms, transform 250ms ease; // For animations
- }
- @include mq($until: tablet) {
- .c-topbar.hidetop {
- // At desktop, we stop hiding the navbar
- top: -250px;
- }
- }
- .c-textbook__sidebar,
- .c-textbook__page {
- /* [2] */
- height: 100vh;
- overflow: auto;
- position: fixed;
- background-color: $book-background-color;; /* [3] */
- }
- .c-textbook__sidebar {
- width: $left-sidebar-width;
- top: 0;
- left: 0;
- }
- .c-textbook__page {
- width: $textbook-page-width;
- transition: transform 250ms ease;
- left: 0;
- padding: 0 $spacing-unit $spacing-unit-small $spacing-unit-small * 3;
- overflow-x: visible;
- @include mq($from: laptop) {
- // At desktop, we show the right TOC
- padding-right: calc(100% - #{$left-sidebar-width} - #{$textbook-page-max-width});
- }
- &:focus {
- /* [2] */
- outline: none;
- }
- }
- .sidebar__right {
- // By default we hide the sidebar
- display: none;
- // Spacing for the sidebar
- width: $right-sidebar-width - $spacing-unit-small; // To account for the small margin on the right
- position: relative;
- float: right;
- z-index: 1; // Keep sidebar under page content
- @include mq($from: tablet) {
- // Show right TOC at laptop size
- display: block;
- }
- }
- .js-show-sidebar {
- .c-textbook__page, .c-topbar {
- /* [4] */
- transform: translate($left-sidebar-width, 0);
- @include mq($from: tablet) {
- /* [5] */
- width: calc(100% - #{$left-sidebar-width});
- }
- }
- }
- .c-textbook__content {
- clear: both;
- padding-top: $topbar-height * 1.5;
- width: 95%;
- }
- .c-page__nav {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding-top: 30px;
- }
- // Make sure that the bottom content has the same width as non-sidebar content
- .footer, .c-page__nav {
- @include mq($from: laptop) {
- width: $textbook-page-with-sidebar-width;
- }
- }
- // Scrollbar width
- ::-webkit-scrollbar {
- width: 5px;
- background: #f1f1f1;
- }
- ::-webkit-scrollbar-thumb {
- background: #c1c1c1;
- }
- main, nav {
- scrollbar-width: thin;
- }
|