All Projects → kettanaito → Atomic Layout

kettanaito / Atomic Layout

Licence: mit
Physical representation of layout composition to create declarative responsive layouts in React.

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to Atomic Layout

Bedrock
Foundational Layout Primitives for your React App
Stars: ✭ 173 (-81.2%)
Mutual labels:  layout, styled-components, css-grid
React Css Grid
React layout component based on CSS Grid Layout and built with styled-components
Stars: ✭ 239 (-74.02%)
Mutual labels:  layout, styled-components, css-grid
React Gridit
React grid using CSS Grid and styled-components
Stars: ✭ 96 (-89.57%)
Mutual labels:  styled-components, css-grid
Interior
Design system for the modern web.
Stars: ✭ 77 (-91.63%)
Mutual labels:  layout, css-grid
Styled Bootstrap Components
The bootstrap components made with styled-components 💅
Stars: ✭ 196 (-78.7%)
Mutual labels:  layout, styled-components
Styled System
⬢ Style props for rapid UI development
Stars: ✭ 7,126 (+674.57%)
Mutual labels:  layout, styled-components
Grid
This package has moved and renamed
Stars: ✭ 2,079 (+125.98%)
Mutual labels:  layout, styled-components
Layouts
Grab-and-go layouts for React
Stars: ✭ 202 (-78.04%)
Mutual labels:  layout, styled-components
Css In Js
Autocomplete React Native / JS Styles and converting plain CSS to JS styles
Stars: ✭ 192 (-79.13%)
Mutual labels:  atom, styled-components
rebass
⚛️ React primitive UI components built with styled-system.
Stars: ✭ 7,844 (+752.61%)
Mutual labels:  styled-components, layout
Language Babel
ES2017, flow, React JSX and GraphQL grammar and transpilation for ATOM
Stars: ✭ 476 (-48.26%)
Mutual labels:  atom, styled-components
grid-layout
grid-layout is a layout engine which implements grid, can use in canvas/node-canvas
Stars: ✭ 43 (-95.33%)
Mutual labels:  layout, css-grid
Responsive Grid Of Hexagons
CSS responsive grid of hexagons
Stars: ✭ 481 (-47.72%)
Mutual labels:  layout, css-grid
Wwcode Hacktoberfest 2020
🌎 No intuito de colaborar e incentivar a participação de mais mulheres na comunidade open source , um pull request por vez, nós do Women Who Code Recife, criamos um projeto para participarmos desta causa incrível, e toda comunidade poder colaborar
Stars: ✭ 16 (-98.26%)
Mutual labels:  styled-components
Miniflux Legacy
Minimalist RSS reader (version 1.x)
Stars: ✭ 897 (-2.5%)
Mutual labels:  atom
Greedo Layout For Ios
Full aspect ratio grid layout for iOS
Stars: ✭ 837 (-9.02%)
Mutual labels:  layout
Animate Components
✨ Elemental components for doing animations in React
Stars: ✭ 908 (-1.3%)
Mutual labels:  styled-components
Flexbox
CSS library for easier work with flex boxes
Stars: ✭ 17 (-98.15%)
Mutual labels:  layout
Atom Clock
Clock for the Atom Editor
Stars: ✭ 5 (-99.46%)
Mutual labels:  atom
Statefullayout
Android layout to show template for loading, empty, error etc. states
Stars: ✭ 813 (-11.63%)
Mutual labels:  layout

Atomic Layout logo

Discord channel Spectrum channel


Atomic Layout is a spatial distribution library for React. It uses CSS Grid to define layout areas and render them as React components. This pattern encourages separation of elements and spacing, preventing contextual implementations and boosting maintenance of layouts.

import React from 'react'
import { Composition } from 'atomic-layout'

// Define layout areas: visual representation
// of what composes a layout, detached from
// what components are actually rendered.
const areasMobile = `
  thumbnail
  header
  footer
`

// Declare responsive changes of your areas.
// Operate in two dimensions, remove areas
// or introduce new ones.
const areasTablet = `
  thumbnail header
  thumbnail footer
`

const Card = ({ title, imageUrl, actions }) => (
  <Composition areas={areasMobile} areasMd={areasTablet} gap={20}>
    {/* Get React components based on provided areas */}
    {({ Thumbnail, Header, Footer }) => (
      <React.Fragment>
        <Thumbnail>
          {/* Render anything, including another Composition */}
          <img src={imageUrl} alt={title} />
        </Thumbnail>
        {/* Preserve semantics with polymorphic prop */}
        <Header as="h3">{title}</Header>
        {/* Responsive props: just suffix with a breakpoint name */}
        <Footer padding={10} paddingMd={20}>
          {actions}
        </Footer>
      </React.Fragment>
    )}
  </Composition>
)

export default Card

Atomic Layout is responsive-first. It uses Bootstrap 4 breakpoints by default, which you can always customize for your needs.

Motivation

Modern layout development is about modularity and composition. Following the best practices of Atomic design, we strive toward independent UI units that gradually compose into more meaningful pieces. While the attention paid to units implementation is thorough, we often overlook how to achieve layout composition that scales. It's as if we forget that spacing defines composition.

When it comes to distributing the spacing things get more difficult. First of all, true contextless spacing is hard. To make things worse, all present solutions couple spacing with UI elements, inevitably making small reusable pieces contextful and, thus, hard to maintain.

Atomic Layout helps you to compose your elements by introducing a dedicated spacing layer called Composition. It encourages you to separate concerns between UI elements' visual appearance and spacing between them. With the first-class responsive support at your disposal you can build gorgeous responsive permutations of your elements without leaving the dedicated spacing layer, keeping UI elements contextless and predictable. Embrace the era of a true layout composition!

Implementations

Atomic Layout has multiple implementations depending on the styling solution:

Package name Latest version Styling library
atomic-layout Package version styled-components
@atomic-layout/emotion Package version @emotion/styled

Documentation

See the Official documentation.

Here are some shortcuts for quick access:

Examples

Although the examples below use atomic-layout package, they are fully compatible with other styling implementations of the library (i.e. @atomic-layout/emotion).

Basics

Basic composition: square and circle

Basic composition

Combine two UI elements into a single one using Composition.

Component with responsive props

Responsive props

Change a prop's value depending on a breakpoint.

Composition of other compositions

Nested composition

Any element can be a composition and a composite at the same time.

Intermediate

Conditional rendering

Conditional rendering

Render or display elements conditionally based on breakpoints.

Custom configuration

Custom configuration

Configure a default measurement unit, custom breakpoints, and responsive behaviors.

Shorthand media query

Shorthand media query

Use a shorthand query function to declare inline media queries in CSS.

Materials

Artem speaking at React Finland

Creating layouts that last (React Finland, 2019)

Find out the main aspects of a layout's maintainability and why spacing plays a crucial role in it. Learn how to wield layout composition as an actual React component–a missing glue for your elements and design systems.

SurviveJS logo

Layout composition as a React component (SurviveJS)

Read through the extensive interview about how Atomic layout came to be, how it's different from other solutions, and which practices it encourages.

The Future of Layouts — Artem Zakharchenko

The future of layouts (React Vienna, 2018)

Watch Artem discussing the biggest obstacle to achieve maintainable layouts, and showcases a way to combine existing technologies to build clean UI implementations using Atomic layout.

Community

Reach out to us to share an awesome project you're building, or ask a question:

Browser support

Atomic Layout's browser support is made by the browser support of underlying technologies the library uses. Pay attention if your project can support CSS Grid to be sure you can use Atomic Layout.

See the Support table for CSS Grid. For Internet Explorer support please read this issue.

Contributing

By contributing to Atomic Layout you shape the way developers create reusable UI.

Please refer to the Contribution guidelines before committing to this project. We are thankful for any kind of contribution you may bring: discussion, issue report, or a pull request.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].