GithubHelp home page GithubHelp logo

Comments (3)

pea avatar pea commented on June 3, 2024

This is how I imagine it

import styled from 'styled-components'
import {
  space,
  color,
  width,
  fontSize,
  flexWrap,
  flexDirection,
  alignItems,
  justifyContent,
  flex,
  order,
  alignSelf,
  themeGet
} from 'styled-system'

export const Box = styled('div')({
  boxSizing: 'border-box'
},
  space,
  color,
  width,
  fontSize,
  flex,
  order,
  alignSelf,
  props => props.css,
  props => {
    if (props.gutter) {
      return {
        padding: `${parseInt(props.theme.space[props.gutter], 10) / 2}px`
      }
    }
  }
)

Box.displayName = 'Box'

Box.propTypes = {
  ...space.propTypes,
  ...color.propTypes,
  ...width.propTypes,
  ...fontSize.propTypes,
}

const FlexWrapper = styled(Box)({
  display: 'flex'
},
  flexWrap,
  flexDirection,
  alignItems,
  justifyContent,
  props => {
    if (props.gutter) {
      return {
        margin: `${(parseInt(props.theme.space[props.gutter], 10) / 2) * -1}px;`,
        padding: 0
      }
    }
  }
)

FlexWrapper.displayName = 'Flex'

FlexWrapper.propTypes = {
  ...flexWrap.propTypes,
  ...flexDirection.propTypes,
  ...alignItems.propTypes,
  ...justifyContent.propTypes
}

export const Flex = class extends React.Component {
  renderChildren = () => {
    const { children } = this.props
    return React.Children
      .map(children, (child) => React.cloneElement(child, {
      gutter: this.props.gutter
    }))
  }

  render() {
    return <FlexWrapper {...this.props}>
      {this.renderChildren()}
    </FlexWrapper>
  }
}
<Flex flexWrap='wrap' gutter={1}>
  <Box width={1/2}>
    <Area />
  </Box>
  <Box width={1/2}>
    <Area />
  </Box>
</Flex>

from grid.

ilyaulyanov avatar ilyaulyanov commented on June 3, 2024

@pea there's a horizontal scroll bar that appears when the columns go edge to edge with the border, is there a way to fix that other than using overflow-x: hidden?

from grid.

jxnblk avatar jxnblk commented on June 3, 2024

I'd recommend making a wrapper around the Flex component that handles this sort of thing by applying props to its direct children. This library is meant to be lower-level and only directly affect styles of the components themselves

from grid.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.