diff --git a/src/components/Layout.module.scss b/src/components/Layout.module.scss index 07108ec..f6ee50b 100644 --- a/src/components/Layout.module.scss +++ b/src/components/Layout.module.scss @@ -1,6 +1,17 @@ @import 'variables'; .screen { - flex: 1; - padding: $spacer; + margin-top: $spacer * $line-height; + + > article { + display: grid; + grid-template-columns: + [full-start] minmax($spacer, 1fr) + [main-start] minmax(0, $screen-sm) [main-end] + minmax($spacer, 1fr) [full-end]; + + > * { + grid-column: main; + } + } } diff --git a/src/components/atoms/Content.jsx b/src/components/atoms/Content.jsx deleted file mode 100644 index a0282d8..0000000 --- a/src/components/atoms/Content.jsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' -import styles from './Content.module.scss' - -const Content = props => ( -
- {props.children} -
-) - -Content.propTypes = { - children: PropTypes.node -} - -export default Content diff --git a/src/components/atoms/Content.module.scss b/src/components/atoms/Content.module.scss deleted file mode 100644 index 5f00b6b..0000000 --- a/src/components/atoms/Content.module.scss +++ /dev/null @@ -1,4 +0,0 @@ -.content { - max-width: 38rem; - margin: 0 auto; -} diff --git a/src/components/atoms/FullWidth.module.scss b/src/components/atoms/FullWidth.module.scss index c368b9f..5756399 100644 --- a/src/components/atoms/FullWidth.module.scss +++ b/src/components/atoms/FullWidth.module.scss @@ -1,9 +1,5 @@ +@import 'variables'; + .fullWidth { - width: 100vw; - position: relative; - left: 50%; - right: 50%; - margin-left: -50vw; - margin-right: -50vw; - text-align: center; + grid-column: full !important; } diff --git a/src/components/molecules/ProjectImage.module.scss b/src/components/molecules/ProjectImage.module.scss index 2492b00..1284614 100644 --- a/src/components/molecules/ProjectImage.module.scss +++ b/src/components/molecules/ProjectImage.module.scss @@ -1,7 +1,6 @@ @import 'variables'; .projectImage { - max-height: 100vh; margin-left: auto; margin-right: auto; display: block; @@ -20,7 +19,6 @@ } img { - max-height: 100vh; display: block; } } diff --git a/src/components/molecules/ProjectLinks.module.scss b/src/components/molecules/ProjectLinks.module.scss index 3a82bb4..5c5ee92 100644 --- a/src/components/molecules/ProjectLinks.module.scss +++ b/src/components/molecules/ProjectLinks.module.scss @@ -3,18 +3,15 @@ .projectLinks { ul { padding: 0; - display: flex; - flex-wrap: wrap; - margin-left: -($spacer / 2); + display: grid; + grid-template-columns: 1fr 1fr; + grid-gap: $spacer / 2; } li { display: flex; align-items: center; justify-content: center; - flex: 0 0 calc(50% - #{$spacer / 2}); - margin-left: $spacer / 2; - margin-bottom: $spacer / 2; } a { diff --git a/src/components/molecules/ProjectNav.module.scss b/src/components/molecules/ProjectNav.module.scss index c73d7a5..2358fcc 100644 --- a/src/components/molecules/ProjectNav.module.scss +++ b/src/components/molecules/ProjectNav.module.scss @@ -4,7 +4,7 @@ // composes: fullWidth from '../atoms/FullWidth.module.scss'; white-space: nowrap; overflow-y: hidden; - overflow-x: scroll; + overflow-x: auto; -webkit-overflow-scrolling: touch; &::-webkit-scrollbar, @@ -22,7 +22,7 @@ margin-right: $spacer * 2; } - @media (min-width: 30rem) { + @media (min-width: $screen-xs) { width: 40vw; max-width: 500px; margin-left: $spacer * 2; diff --git a/src/components/molecules/ProjectTechstack.module.scss b/src/components/molecules/ProjectTechstack.module.scss index add141f..268db11 100644 --- a/src/components/molecules/ProjectTechstack.module.scss +++ b/src/components/molecules/ProjectTechstack.module.scss @@ -3,9 +3,9 @@ .projectTechstack { ul { padding: 0; - display: flex; - flex-wrap: wrap; - margin-left: -($spacer / 2); + display: grid; + grid-template-columns: 1fr 1fr; + grid-gap: $spacer / 2; } li { @@ -18,9 +18,6 @@ border-radius: .25rem; border: .05rem solid transparent; color: $brand-grey-light; - margin-left: $spacer / 2; - margin-bottom: $spacer / 2; - flex: 0 0 calc(50% - #{$spacer / 2}); font-size: $font-size-small; :global(.dark) & { diff --git a/src/pages/404.jsx b/src/pages/404.jsx index 1409bea..23bed97 100644 --- a/src/pages/404.jsx +++ b/src/pages/404.jsx @@ -2,9 +2,8 @@ import React, { Component } from 'react' import PropTypes from 'prop-types' import { Link } from 'gatsby' import giphyAPI from 'giphy-js-sdk-core' -import Content from '../components/atoms/Content' import Button from '../components/atoms/Button' -import './404.scss' +import styles from './404.module.scss' // Famous last words: // "It's just the 404 page so why not expose the dev API key" @@ -41,7 +40,7 @@ export default class NotFound extends Component { render() { return ( - +

Shenanigans, page not found.

You might want to check the url, or{' '} @@ -56,7 +55,7 @@ export default class NotFound extends Component { Show me another cat fail gif - +

) } } diff --git a/src/pages/404.scss b/src/pages/404.module.scss similarity index 100% rename from src/pages/404.scss rename to src/pages/404.module.scss diff --git a/src/pages/index.jsx b/src/pages/index.jsx index a986f1e..dd1b4ad 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -2,29 +2,26 @@ import React from 'react' import PropTypes from 'prop-types' import { Link, graphql } from 'gatsby' import ProjectImage from '../components/molecules/ProjectImage' -import FullWidth from '../components/atoms/FullWidth' import styles from './index.module.scss' const Home = ({ data }) => { const projects = data.allProjectsYaml.edges return ( - -
- {projects.map(({ node }) => { - const { slug, title, img } = node +
+ {projects.map(({ node }) => { + const { slug, title, img } = node - return ( -
- -

{title}

- - -
- ) - })} -
- + return ( +
+ +

{title}

+ + +
+ ) + })} +
) } diff --git a/src/pages/index.module.scss b/src/pages/index.module.scss index 606344a..8af32e5 100644 --- a/src/pages/index.module.scss +++ b/src/pages/index.module.scss @@ -1,13 +1,16 @@ @import 'variables'; .projects { - @media (min-width: 55rem) { - display: flex; - justify-content: space-between; - flex-wrap: wrap; + display: grid; + grid-template-columns: 1fr; + grid-gap: $spacer * 6; + + @media (min-width: $screen-md) { + grid-template-columns: 1fr 1fr; + grid-gap: $spacer * 3; max-width: calc(#{$projectImageMaxWidth} + #{$spacer * 2}); margin: 0 auto; - padding: $spacer $spacer * 2; + padding: $spacer $spacer * 3; } } @@ -26,23 +29,11 @@ } .project { - flex: 0 0 calc(50% - #{$spacer}); - text-align: center; - margin-bottom: $spacer * 6; position: relative; - @media (min-width: 55rem) { - margin-bottom: $spacer * 2; - } - - &:last-child { - margin-bottom: 0; - } - a { display: block; position: relative; - margin: 0 auto; &::after { content: ''; diff --git a/src/styles/_variables.scss b/src/styles/_variables.scss index 6c936b2..52a4acc 100644 --- a/src/styles/_variables.scss +++ b/src/styles/_variables.scss @@ -67,3 +67,11 @@ $color-headings--dark: $brand-main-light; ///////////////////////////////////// $spacer: ($font-size-base * $line-height); + +// Responsive breakpoints +///////////////////////////////////// + +$screen-xs: 30em; +$screen-sm: 40em; +$screen-md: 60em; +$screen-lg: 70em; diff --git a/src/templates/Project.jsx b/src/templates/Project.jsx index aa52bc8..749f354 100644 --- a/src/templates/Project.jsx +++ b/src/templates/Project.jsx @@ -3,7 +3,6 @@ import PropTypes from 'prop-types' import Helmet from 'react-helmet' import ReactMarkdown from 'react-markdown' import { graphql } from 'gatsby' -import Content from '../components/atoms/Content' import FullWidth from '../components/atoms/FullWidth' import ProjectImage from '../components/molecules/ProjectImage' import ProjectTechstack from '../components/molecules/ProjectTechstack' @@ -43,16 +42,16 @@ const Project = ({ data }) => { -
- +
+

{title}

- - - - +
+ + +
diff --git a/src/templates/Project.module.scss b/src/templates/Project.module.scss index 2278e81..9cd32cc 100644 --- a/src/templates/Project.module.scss +++ b/src/templates/Project.module.scss @@ -4,7 +4,7 @@ .spacer { margin-bottom: $spacer * 3; - @media (min-width: 30rem) { + @media (min-width: $screen-xs) { margin-bottom: $spacer * 6; } } @@ -12,7 +12,7 @@ .project__title { font-size: $font-size-h2; - @media (min-width: 30rem) { + @media (min-width: $screen-xs) { font-size: $font-size-h1; } } @@ -23,16 +23,14 @@ } .project__meta { - margin-top: $spacer * 5; margin-bottom: $spacer * 5; + display: grid; + grid-template-columns: 1fr; + grid-gap: $spacer; - @media (min-width: 40rem) { - display: flex; - justify-content: space-between; - - > div { - flex: 0 0 45%; - } + @media (min-width: $screen-sm) { + grid-template-columns: 1fr 1fr; + grid-gap: $spacer * 2; } }