diff --git a/packages/big-design/src/components/Box/Box.tsx b/packages/big-design/src/components/Box/Box.tsx index 886b8bb47..353645c86 100644 --- a/packages/big-design/src/components/Box/Box.tsx +++ b/packages/big-design/src/components/Box/Box.tsx @@ -15,6 +15,7 @@ export interface BoxProps extends React.HTMLAttributes, DisplayP borderRight?: keyof Border; borderTop?: keyof Border; borderRadius?: keyof BorderRadius; + clearfix?: boolean; } interface PrivateProps { diff --git a/packages/big-design/src/components/Box/__snapshots__/spec.tsx.snap b/packages/big-design/src/components/Box/__snapshots__/spec.tsx.snap index ae071a8a6..424021730 100644 --- a/packages/big-design/src/components/Box/__snapshots__/spec.tsx.snap +++ b/packages/big-design/src/components/Box/__snapshots__/spec.tsx.snap @@ -11,6 +11,22 @@ exports[`has border props 1`] = ` /> `; +exports[`has clearfix prop 1`] = ` +.c0 { + box-sizing: border-box; +} + +.c0::after { + clear: both; + content: ""; + display: table; +} + +
+`; + exports[`has individual border props 1`] = ` .c0 { box-sizing: border-box; diff --git a/packages/big-design/src/components/Box/spec.tsx b/packages/big-design/src/components/Box/spec.tsx index 9de77c563..c8da81465 100644 --- a/packages/big-design/src/components/Box/spec.tsx +++ b/packages/big-design/src/components/Box/spec.tsx @@ -62,6 +62,12 @@ test('has shadow props', () => { expect(container.firstChild).toMatchSnapshot(); }); +test('has clearfix prop', () => { + const { container } = render(); + + expect(container.firstChild).toMatchSnapshot(); +}); + test('renders as a different tag', () => { const { getByTestId } = render(); const tag = getByTestId('box').tagName; diff --git a/packages/big-design/src/components/Box/styled.tsx b/packages/big-design/src/components/Box/styled.tsx index 6f2a520d0..e91eb6bb5 100644 --- a/packages/big-design/src/components/Box/styled.tsx +++ b/packages/big-design/src/components/Box/styled.tsx @@ -1,4 +1,5 @@ import { theme as defaultTheme } from '@bigcommerce/big-design-theme'; +import { clearFix } from 'polished'; import styled, { css } from 'styled-components'; import { withDisplay, withMargins, withPaddings } from '../../mixins'; @@ -11,6 +12,8 @@ export const StyledBox = styled.div` ${withPaddings()} box-sizing: border-box; + ${({ clearfix }) => clearfix && clearFix()}; + ${({ backgroundColor, theme }) => backgroundColor && css` diff --git a/packages/docs/PropTables/BoxPropTable.tsx b/packages/docs/PropTables/BoxPropTable.tsx index 84201debd..7667bb2da 100644 --- a/packages/docs/PropTables/BoxPropTable.tsx +++ b/packages/docs/PropTables/BoxPropTable.tsx @@ -60,6 +60,11 @@ const boxProps: Prop[] = [ types: ['normal', 'circle', 'none'], description: 'Determines type of border radius to be applied.', }, + { + name: 'clearfix', + types: ['boolean'], + description: 'Adds a clearfix for floating internal elements.', + }, ]; export const BoxPropTable: React.FC = props => (