From 84ab95ddc7b5dc159098aecf82ad922ffd4a3093 Mon Sep 17 00:00:00 2001 From: Roman Hotsiy Date: Tue, 13 Oct 2020 16:21:36 +0300 Subject: [PATCH] fix: make schema layout more responsive on small screen (#1411) --- src/common-elements/fields-layout.ts | 35 +++++++++++++++++-- .../SecurityRequirement.tsx | 11 ++++-- src/styled-components.ts | 4 +-- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/common-elements/fields-layout.ts b/src/common-elements/fields-layout.ts index 533ccb01bc..e6985f1537 100644 --- a/src/common-elements/fields-layout.ts +++ b/src/common-elements/fields-layout.ts @@ -1,6 +1,6 @@ // import { transparentize } from 'polished'; -import styled, { extensionsHook } from '../styled-components'; +import styled, { extensionsHook, media } from '../styled-components'; import { deprecatedCss } from './mixins'; export const PropertiesTableCaption = styled.caption` @@ -16,6 +16,11 @@ export const PropertyCell = styled.td<{ kind?: string }>` position: relative; padding: 10px 10px 10px 0; + ${media.lessThan('small')` + display: block; + overflow: hidden; + `} + tr:first-of-type > &, tr.last > & { border-left-width: 0; @@ -63,7 +68,7 @@ export const PropertyNameCell = styled(PropertyCell)` line-height: 20px; white-space: nowrap; font-size: 13px; - font-family: ${props => props.theme.typography.code.fontFamily}; + font-family: ${(props) => props.theme.typography.code.fontFamily}; &.deprecated { ${deprecatedCss}; @@ -77,12 +82,22 @@ export const PropertyNameCell = styled(PropertyCell)` export const PropertyDetailsCell = styled.td` border-bottom: 1px solid #9fb4be; padding: 10px 0; - width: ${props => props.theme.schema.defaultDetailsWidth}; + width: ${(props) => props.theme.schema.defaultDetailsWidth}; box-sizing: border-box; tr.expanded & { border-bottom: none; } + + ${media.lessThan('small')` + padding: 0 20px; + border-bottom: none; + border-left: 1px solid ${(props) => props.theme.schema.linesColor}; + + tr.last > & { + border-left: none; + } + `} `; export const PropertyBullet = styled.span` @@ -125,6 +140,20 @@ export const PropertiesTable = styled.table` vertical-align: middle; } + ${media.lessThan('small')` + display: block; + > tr, > tbody > tr { + display: block; + } + `} + + ${media.lessThan('small', false, ' and (-ms-high-contrast:none)')` + td { + float: left; + width: 100%; + } + `} + & ${InnerPropertiesWrap}, & diff --git a/src/components/SecurityRequirement/SecurityRequirement.tsx b/src/components/SecurityRequirement/SecurityRequirement.tsx index e6aafb3090..3a52ad810b 100644 --- a/src/components/SecurityRequirement/SecurityRequirement.tsx +++ b/src/components/SecurityRequirement/SecurityRequirement.tsx @@ -1,7 +1,7 @@ // import { transparentize } from 'polished'; import * as React from 'react'; -import styled from '../../styled-components'; +import styled, { media } from '../../styled-components'; import { Link, UnderlinedHeader } from '../../common-elements/'; import { SecurityRequirementModel } from '../../services/models/SecurityRequirement'; @@ -85,11 +85,14 @@ export class SecurityRequirement extends React.PureComponent props.theme.schema.defaultDetailsWidth}; + ${media.lessThan('small')` + margin-top: 10px; + `} `; const AuthHeader = styled(UnderlinedHeader)` @@ -101,6 +104,10 @@ const Wrap = styled.div` width: 100%; display: flex; margin: 1em 0; + + ${media.lessThan('small')` + flex-direction: column; + `} `; export interface SecurityRequirementsProps { diff --git a/src/styled-components.ts b/src/styled-components.ts index 9db27997c3..8acd13d4c5 100644 --- a/src/styled-components.ts +++ b/src/styled-components.ts @@ -13,10 +13,10 @@ const { } = styledComponents as styledComponents.ThemedStyledComponentsModule; export const media = { - lessThan(breakpoint, print?: boolean) { + lessThan(breakpoint, print?: boolean, extra?: string) { return (...args) => css` @media ${print ? 'print, ' : ''} screen and (max-width: ${props => - props.theme.breakpoints[breakpoint]}) { + props.theme.breakpoints[breakpoint]})${extra || ''} { ${(css as any)(...args)}; } `;