From 377bfcf12b7257014a8b541e0e0a6b0fd8307dfe Mon Sep 17 00:00:00 2001 From: Joost De Cock Date: Wed, 15 May 2019 16:06:38 +0200 Subject: [PATCH] :construction: CSS and component changes for dev site --- packages/components/src/Emblem/index.js | 16 +--- packages/components/src/Footer/index.js | 13 +-- packages/components/src/Navbar/index.js | 60 ++++++++---- packages/css-theme/src/_components.scss | 2 + packages/css-theme/src/_layout.scss | 1 + packages/css-theme/src/_mixins.scss | 9 +- packages/css-theme/src/_reset.scss | 6 ++ packages/css-theme/src/_theme-wrapper.scss | 6 ++ packages/css-theme/src/_typography.scss | 61 ++++++++++++ packages/css-theme/src/_utility.scss | 7 ++ packages/css-theme/src/_variables.scss | 2 + .../src/components/_breadcrumbs.scss | 31 ++++++ .../css-theme/src/components/_navbar.scss | 94 ++++++++++++++++++- .../css-theme/src/components/_topicstoc.scss | 83 ++++++++++++++++ packages/css-theme/src/elements/_a.scss | 8 +- packages/css-theme/src/elements/_code.scss | 21 +++-- packages/css-theme/src/elements/_footer.scss | 2 + packages/css-theme/src/elements/_ul.scss | 8 +- packages/css-theme/src/layout/_menu-toc.scss | 45 +++++++++ .../css-theme/src/layout/_section-aside.scss | 5 +- packages/css-theme/src/theme.scss | 3 + packages/i18n/src/locales/en/app.yaml | 1 + 22 files changed, 426 insertions(+), 58 deletions(-) create mode 100644 packages/css-theme/src/_typography.scss create mode 100644 packages/css-theme/src/_utility.scss create mode 100644 packages/css-theme/src/components/_breadcrumbs.scss create mode 100644 packages/css-theme/src/components/_topicstoc.scss create mode 100644 packages/css-theme/src/layout/_menu-toc.scss diff --git a/packages/components/src/Emblem/index.js b/packages/components/src/Emblem/index.js index 3d59cd9a059..1e5a5c8adbf 100644 --- a/packages/components/src/Emblem/index.js +++ b/packages/components/src/Emblem/index.js @@ -3,25 +3,19 @@ import PropTypes from "prop-types"; const Emblem = props => ( - {props.t1} - {props.t2} + {props.t1} + {props.t2} ); Emblem.propTypes = { - size: PropTypes.number, - c1: PropTypes.string, - c2: PropTypes.string, t1: PropTypes.string, - t2: PropTypes.string, + t2: PropTypes.string }; Emblem.defaultProps = { - size: 36, - c1: "#111111", - c2: "#111111", - t1: "", - t2: "", + t1: "Free", + t2: "Sewing" }; export default Emblem; diff --git a/packages/components/src/Footer/index.js b/packages/components/src/Footer/index.js index c523a076c05..bb359d09341 100644 --- a/packages/components/src/Footer/index.js +++ b/packages/components/src/Footer/index.js @@ -14,18 +14,16 @@ const Footer = props => { }; const links = { docs: { + blog: "https://" + props.language + ".freesewing.org/blog", aboutFreesewing: "https://" + props.language + ".freesewing.org/docs/about", - faq: "https://" + props.language + ".freesewing.org/docs/faq", - makerDocs: "https://" + props.language + ".freesewing.org/docs/", - devDocs: "https://" + props.language + ".freesewing.dev/" + faq: "https://" + props.language + ".freesewing.org/docs/faq" }, community: { becomeAPatron: "https://" + props.language + ".freesewing.org/patrons/join", - showcase: "https://" + props.language + ".freesewing.org/showcase", - makerBlog: "https://" + props.language + ".freesewing.org/blog", - devBlog: "https://" + props.language + ".freesewing.dev/blog" + makerDocs: "https://" + props.language + ".freesewing.org/docs/", + devDocs: "https://" + props.language + ".freesewing.dev/" } }; const styles = { @@ -63,9 +61,6 @@ const Footer = props => { } return (
-

- -

); diff --git a/packages/components/src/Navbar/index.js b/packages/components/src/Navbar/index.js index 9f98c3f896e..f932a6a83e4 100644 --- a/packages/components/src/Navbar/index.js +++ b/packages/components/src/Navbar/index.js @@ -43,24 +43,50 @@ const Navbar = props => { if (typeof props.home === "function") homeProps.onClick = props.home; else homeProps.href = props.home; + let logo = ( +
+ + {props.logo} + +
+ ); + let emblem = ( +
+ {props.emblem} +
+ ); + return (
-
- - {props.logo} - +
+ {Object.keys(props.navs.mleft).map(key => + renderNav(key, props.navs.mleft[key]) + )}
-
- {props.emblem} +
+ {logo} + {emblem} + {Object.keys(props.navs.left).map(key => + renderNav(key, props.navs.left[key]) + )} +
+
+
+ {logo} + {emblem} +
+
+
+ {Object.keys(props.navs.mright).map(key => + renderNav(key, props.navs.mright[key]) + )} +
+
+ {Object.keys(props.navs.right).map(key => + renderNav(key, props.navs.right[key]) + )}
- {Object.keys(props.navs.left).map(key => - renderNav(key, props.navs.left[key]) - )} -
- {Object.keys(props.navs.right).map(key => - renderNav(key, props.navs.right[key]) - )}
); @@ -70,13 +96,15 @@ Navbar.propTypes = { navs: PropTypes.object, logo: PropTypes.node, emblem: PropTypes.node, - home: PropTypes.oneOfType([PropTypes.string, PropTypes.func]) + home: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), + toggleMenu: PropTypes.func, + toggleToc: PropTypes.func }; Navbar.defaultProps = { home: "https://freesewing.org/", navs: { left: [], right: [] }, - logo: , - emblem: + logo: , + emblem: }; export default Navbar; diff --git a/packages/css-theme/src/_components.scss b/packages/css-theme/src/_components.scss index b558c6b856c..5b7f6745201 100644 --- a/packages/css-theme/src/_components.scss +++ b/packages/css-theme/src/_components.scss @@ -3,3 +3,5 @@ @import "components/draft"; @import "components/draft-configurator"; @import "components/draft-design"; +@import "components/topicstoc"; +@import "components/breadcrumbs"; diff --git a/packages/css-theme/src/_layout.scss b/packages/css-theme/src/_layout.scss index 99da32ce0af..a247f4309d9 100644 --- a/packages/css-theme/src/_layout.scss +++ b/packages/css-theme/src/_layout.scss @@ -1,2 +1,3 @@ @import "layout/section-aside"; +@import "layout/menu-toc"; diff --git a/packages/css-theme/src/_mixins.scss b/packages/css-theme/src/_mixins.scss index 56380971753..68d3c14720a 100644 --- a/packages/css-theme/src/_mixins.scss +++ b/packages/css-theme/src/_mixins.scss @@ -1,3 +1,10 @@ -@mixin body-font { font-family: -apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif; } +@mixin xs-screen { + @media (max-width: 599px) { @content; } +} +@mixin sm-screen { + @media (min-width: 600px) and (max-width: 959px) { @content; } +} + +@mixin body-font { font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; } @mixin title-font { font-family: 'Roboto Condensed', sans-serif; } @mixin fixed-font { font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; } diff --git a/packages/css-theme/src/_reset.scss b/packages/css-theme/src/_reset.scss index 293d3b1f131..f1ae38ca130 100644 --- a/packages/css-theme/src/_reset.scss +++ b/packages/css-theme/src/_reset.scss @@ -1,3 +1,9 @@ body { margin: 0; + font-size: 18px; + line-height: 1.5; + scroll-behavior: smooth; +} +img { + max-width: 100%; } diff --git a/packages/css-theme/src/_theme-wrapper.scss b/packages/css-theme/src/_theme-wrapper.scss index 1f79e0a03ad..55037dcd805 100644 --- a/packages/css-theme/src/_theme-wrapper.scss +++ b/packages/css-theme/src/_theme-wrapper.scss @@ -10,10 +10,16 @@ .theme-wrapper.light { background: $fc-bg-light; color: $fc-bg-dark; + .altbg { + background: $fc-altbg-light; + } } .theme-wrapper.dark { background: $fc-bg-dark; color: $fc-bg-light; + .altbg { + background: $fc-altbg-dark; + } } diff --git a/packages/css-theme/src/_typography.scss b/packages/css-theme/src/_typography.scss new file mode 100644 index 00000000000..d8c8cb5fd32 --- /dev/null +++ b/packages/css-theme/src/_typography.scss @@ -0,0 +1,61 @@ +h1,h2,h3,h4,h5,h6,button { @include title-font; } +h1 { + font-size: 3.5rem; + font-weight: 200; + margin: 1rem 0 2rem; +} +h2 { + font-size: 2.5rem; + border-top: 1px solid $oc-gray-4; + margin: 3.5rem 0 1rem; + padding: 1.5rem 0 1rem; + font-weight: 400; +} +.theme-wrapper.dark h2 { + border-color: $oc-gray-7; +} +h2.bare { + border: none; + margin: 0; +} +h3 { + font-size: 2rem; + margin: 1.75rem 0 1rem; +} +h4 { + font-size: 1.75rem; + margin: 1.5rem 0 0.75rem; +} +h5 { + font-size: 1.5rem; + margin: 1.25rem 0 0.5rem; +} +h6 { + font-size: 1.25rem; + margin: 1rem 0 0.25rem; +} +h2 a.anchor, +h3 a.anchor, +h4 a.anchor, +h5 a.anchor, +h6 a.anchor { + margin-left: -20px; + margin-right: 4px; +} + +@include sm-screen { + h1 { font-size: 3rem; } + h2 { font-size: 2.25rem; } +} +@include xs-screen { + h1 { + font-size: 2.5rem; + margin: 1rem 0 1.5rem; + } + h2 { + font-size: 2rem; + margin: 2.5rem 0 0.5rem; + } + h3 { font-size: 1.85rem; } + h4 { font-size: 1.65rem; } +} diff --git a/packages/css-theme/src/_utility.scss b/packages/css-theme/src/_utility.scss new file mode 100644 index 00000000000..f5e5f2aaa08 --- /dev/null +++ b/packages/css-theme/src/_utility.scss @@ -0,0 +1,7 @@ +@include xs-screen { + .only-xs { display: inherit!important; } + .not-xs { display: none!important; } +} +.only-xs { display: none; } +.not-xs { display: inherit; } + diff --git a/packages/css-theme/src/_variables.scss b/packages/css-theme/src/_variables.scss index ec5e0cf748f..0077aca5e5f 100644 --- a/packages/css-theme/src/_variables.scss +++ b/packages/css-theme/src/_variables.scss @@ -2,6 +2,8 @@ $fc-text-light: $oc-gray-9; $fc-text-dark: $oc-gray-0; $fc-bg-light: $oc-gray-0; $fc-bg-dark: $oc-gray-9; +$fc-altbg-light: $oc-gray-1; +$fc-altbg-dark: $oc-gray-8; $fc-notice-light: $oc-yellow-7; $fc-notice-dark: $oc-lime-3; $fc-hoverbg-light: $oc-gray-1; diff --git a/packages/css-theme/src/components/_breadcrumbs.scss b/packages/css-theme/src/components/_breadcrumbs.scss new file mode 100644 index 00000000000..89f21802a84 --- /dev/null +++ b/packages/css-theme/src/components/_breadcrumbs.scss @@ -0,0 +1,31 @@ +nav.breadcrumbs { + ul { + @include title-font; + margin-left: 0; + padding-left: 0; + font-size: 95%; + li { + list-style-type: none; + display: inline-block; + } + li:first-child:before { + content: ""; + padding: 0; + } + li:before { + content: "ยป"; + padding: 0 0.25rem; + font-size: 125%; + } + } +} + +.theme-wrapper.dark { + nav.breadcrumbs { + ul { + li { + } + } + } +} + diff --git a/packages/css-theme/src/components/_navbar.scss b/packages/css-theme/src/components/_navbar.scss index 49f13977714..333c207cb0e 100644 --- a/packages/css-theme/src/components/_navbar.scss +++ b/packages/css-theme/src/components/_navbar.scss @@ -5,6 +5,10 @@ header.navbar { padding: 0 26px; background: $fc-bg-dark; z-index: 15; + div.only-xs, + div.not-xs { + align-items: center; + } div.logo { height: 64px; @@ -14,20 +18,35 @@ header.navbar { display: flex; align-items: center; color: $oc-gray-2; - a { text-decoration: none; } + a { + text-decoration: none; + height: 42px; + width: 42px; + } } div.emblem { margin-right: 26px; - a { text-decoration: none; } + a { + text-decoration: none!important; + @include title-font; + font-size: 26px; + span.lem { color: $oc-gray-2; } + span.emb { color: $fc-link-dark; } + } + } + div.spread { + flex-grow: 1; + display: flex; + align-items: center; } - div.spread { flex-grow: 1} a.nav, button { @include title-font; + text-decoration: none!important; margin: 0; padding: 0 13px; height: 60px; - color: $fc-text-dark; + color: $fc-text-dark!important; border: 0; line-height: 64px; border-bottom: 4px solid $fc-bg-dark; @@ -65,3 +84,70 @@ header.navbar > div { align-items: center; } + +@include xs-screen { + header.navbar { + position: fixed; + bottom: 0; + left: 0; + height: 42px; + width: calc(100% - 26px); + padding: 0 13px; + > div { + height: 42px; + } + div.spread { + justify-content: center; + } + div.logo, + div.emblem { + margin-right: 12px; + } + div.logo a { + height: 32px; + width: 32px; + } + div.emblem a { + font-size: 22px; + } + a.nav, + button { + border: 0; + padding: 0 6px; + height: 42px; + line-height: 42px; + } + } +} + +@include sm-screen { + header.navbar { + height: 54px; + width: calc(100% - 36px); + padding: 0 18px; + > div { + height: 54px; + } + div.logo, + div.emblem { + margin-right: 12px; + } + div.logo a { + height: 32px; + width: 32px; + } + div.emblem a { + font-size: 22px; + } + a.nav { + padding: 0 6px; + line-height: 54px; + height: 50px; + } + button { + padding: 0 6px; + height: 54px; + line-height: 54px; + } + } +} diff --git a/packages/css-theme/src/components/_topicstoc.scss b/packages/css-theme/src/components/_topicstoc.scss new file mode 100644 index 00000000000..389ac17c720 --- /dev/null +++ b/packages/css-theme/src/components/_topicstoc.scss @@ -0,0 +1,83 @@ +ul.topics { + margin: 0; + padding: 0; +} +ul.topics > li.topic { + @include title-font; + list-style-type: none; + //text-transform: uppercase; + margin: 0; + padding: 0; + a.topic { + display: block; + padding: 0.25rem 0.5rem; + border-left: 4px solid transparent; + color: $fc-text-light!important; + } + a.topic:hover { + background: $oc-gray-5; + text-decoration: none!important; + } +} +ul.topics > li.topic.active { + font-weight: bold; + a.topic { + border-left: 4px solid $fc-link-light; + } +} +ul.topics > li.topic > ul.topics.l1 { + font-weight: normal; + a { + color: $fc-text-light!important; + padding-left: 2.5rem; + display: block; + } + a:hover { + background: $oc-gray-3; + text-decoration: none!important; + } + li.active a { + font-weight: bold; + } + ul.links { + margin-left: 1.5rem; + > li > a { + display: inline; + padding: 0; + color: $fc-link-light!important; + font-weight: normal; + } + > li > a:hover { + text-decoration: underline!important; + background: transparent; + } + } +} + +.theme-wrapper.dark { + ul.topics > li.topic { + a.topic { + color: $fc-text-dark!important; + } + a.topic:hover { + background: $oc-gray-6; + } + } + ul.topics > li.topic > ul.topics.l1 { + a { + color: $fc-text-dark!important; + } + a:hover { + background: $oc-gray-7; + } + ul.links { + > li > a { + color: $fc-link-dark!important; + } + > li > a:hover { + text-decoration: underline!important; + background: transparent; + } + } + } +} diff --git a/packages/css-theme/src/elements/_a.scss b/packages/css-theme/src/elements/_a.scss index b4184d3be7d..ce8712cc0a5 100644 --- a/packages/css-theme/src/elements/_a.scss +++ b/packages/css-theme/src/elements/_a.scss @@ -1,12 +1,12 @@ -.theme-wrapper a { +.theme-wrapper a:not([role="button"]) { text-decoration: none; } -.theme-wrapper a:hover { +.theme-wrapper a:not([role="button"]):hover { text-decoration: underline; } -.theme-wrapper.light a { +.theme-wrapper.light a:not([role="button"]) { color: $fc-link-light; } -.theme-wrapper.dark a { +.theme-wrapper.dark a:not([role="button"]) { color: $fc-link-dark; } diff --git a/packages/css-theme/src/elements/_code.scss b/packages/css-theme/src/elements/_code.scss index b6238dcd0e2..ddda3a60240 100644 --- a/packages/css-theme/src/elements/_code.scss +++ b/packages/css-theme/src/elements/_code.scss @@ -1,21 +1,21 @@ .theme-wrapper.light :not(pre) > code[class*="language-"] { - padding: 0.125rem 0.5rem; - background: $oc-gray-6; - border: 1px $oc-gray-5 solid; + padding: 0.1rem 0.25rem; + background: $oc-gray-2; + border: 1px $oc-gray-3 solid; color: $oc-gray-9; } .theme-wrapper.dark :not(pre) > code[class*="language-"] { padding: 0.125rem 0.5rem; - background: $oc-gray-6; - border: 1px $oc-gray-5 solid; - color: $oc-gray-9; + background: $oc-gray-9; + border: 1px $oc-gray-7 solid; + color: $oc-gray-1; } div.gatsby-highlight { position: relative; } -div.gatsby-highlight pre.language-js { - padding-top: 1rem; +div.gatsby-highlight pre { + padding: 1.5rem 1rem; } pre.language-js:before, @@ -50,5 +50,8 @@ pre.language-svg:before { content: "svg"; background: rgba(129, 197, 255, 0.9); } - +code[class*="language-"], +pre[class*="language-"] { + white-space: pre-wrap; +} diff --git a/packages/css-theme/src/elements/_footer.scss b/packages/css-theme/src/elements/_footer.scss index bedc3945d87..e002e726a6b 100644 --- a/packages/css-theme/src/elements/_footer.scss +++ b/packages/css-theme/src/elements/_footer.scss @@ -1,4 +1,6 @@ footer { + @include title-font; + font-size: 90%; background: $fc-bg-dark; color: $fc-text-dark; margin: 0; diff --git a/packages/css-theme/src/elements/_ul.scss b/packages/css-theme/src/elements/_ul.scss index 88d338e89a1..f2d5758dd9c 100644 --- a/packages/css-theme/src/elements/_ul.scss +++ b/packages/css-theme/src/elements/_ul.scss @@ -1,8 +1,13 @@ ul.links { - padding-left: 1rem; + padding-left: 1.5rem; + line-height: 1.35; + font-size: 95%; + font-weight: normal; li { list-style-type: none; + a { display: inline-block; } } + li.active { font-weight: bold; } li:before { content: "\00a0"; background: $oc-gray-5; @@ -18,6 +23,7 @@ ul.links { li.nodot:before { content: none; } + li.active:before, li:hover:before { background: $fc-link-light; } diff --git a/packages/css-theme/src/layout/_menu-toc.scss b/packages/css-theme/src/layout/_menu-toc.scss new file mode 100644 index 00000000000..73837e73abd --- /dev/null +++ b/packages/css-theme/src/layout/_menu-toc.scss @@ -0,0 +1,45 @@ +@include xs-screen { + .theme-wrapper.light div.fs-sa aside, + .theme-wrapper.dark div.fs-sa aside, + .theme-wrapper.light div.menu, + .theme-wrapper.dark div.menu { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100vh; + padding: 2rem; + padding-top: 4rem; + max-width: 600px; + z-index: -10; + transition: opacity 0.5s ease 0s; + opacity: 0; + > ul, + > div { + transform: translate(0px, 20px); + transition: transform 0.5s ease 0s; + } + } +} +.theme-wrapper.show-toc div.fs-sa aside { + opacity: 1; + z-index: 10; + > ul { + transform: translate(0px, 0px); + } +} + +.theme-wrapper.light div.menu { + background: $oc-gray-1; +} +.theme-wrapper.dark div.menu { + background: $oc-gray-8; +} +.theme-wrapper.show-menu div.menu { + opacity: 1; + z-index: 10; + > div { + transform: translate(0px, 0px); + } +} + diff --git a/packages/css-theme/src/layout/_section-aside.scss b/packages/css-theme/src/layout/_section-aside.scss index 7a65dc0b620..012b87443e1 100644 --- a/packages/css-theme/src/layout/_section-aside.scss +++ b/packages/css-theme/src/layout/_section-aside.scss @@ -3,13 +3,13 @@ div.fs-sa { section{ width: 100%; - padding: 1rem; + padding: 1rem 1.5rem; } aside { padding: 1rem 0; max-width: 400px; min-width: 200px; - width: 30%; + width: 40%; background: $oc-gray-1; border-left: 1px solid $oc-gray-3; } @@ -21,7 +21,6 @@ div.fs-sa { } } - .theme-wrapper.dark { div.fs-sa { section { diff --git a/packages/css-theme/src/theme.scss b/packages/css-theme/src/theme.scss index e06524be569..8584b6d9dc9 100644 --- a/packages/css-theme/src/theme.scss +++ b/packages/css-theme/src/theme.scss @@ -4,7 +4,10 @@ @import "mixins"; @import "prism"; @import "theme-wrapper"; +@import "typography"; @import "layout"; @import "scroll"; @import "components"; @import "elements"; +@import "utility"; + diff --git a/packages/i18n/src/locales/en/app.yaml b/packages/i18n/src/locales/en/app.yaml index bb7b49ae833..11654ce9e8c 100644 --- a/packages/i18n/src/locales/en/app.yaml +++ b/packages/i18n/src/locales/en/app.yaml @@ -221,3 +221,4 @@ makerDocs: Maker documentation devDocs: Developer documentation makerBlog: Maker blog devBlog: Developer blog +slogan: A JavaScript library for made-to-measure sewing patterns