1
0
mirror of https://github.com/phuoc-ng/csslayout.git synced 2025-08-06 14:16:50 +02:00

Merge pull request #4 from phuoc-ng/sticky-footer

Sticky footer
This commit is contained in:
phuoc-ng
2019-11-15 17:39:10 +07:00
committed by GitHub
6 changed files with 118 additions and 4 deletions

View File

@@ -3,6 +3,7 @@ import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import Home from './Home';
import Centering from './layouts/Centering';
import StickyFooter from './layouts/StickyFooter';
const App = () => {
return (
@@ -10,6 +11,7 @@ const App = () => {
<Switch>
<Route exact={true} path='/'><Home /></Route>
<Route exact={true} path='/centering'><Centering /></Route>
<Route exact={true} path='/sticky-footer'><StickyFooter /></Route>
</Switch>
</Router>
);

View File

@@ -2,6 +2,7 @@ import React from 'react';
import { Link } from 'react-router-dom';
import CenterCover from './covers/CenterCover';
import StickyFooterCover from './covers/StickyFooterCover';
import Layout from './Layout';
import useDocumentTitle from './useDocumentTitle';
@@ -10,7 +11,18 @@ const Home = () => {
return (
<Layout>
<h2 className="f2 lh-copy">Pattern</h2>
<h2 className="f2 lh-copy">Layouts</h2>
<div className="flex flex-wrap justify-between">
<div className="w-30">
<Link to="/sticky-footer" className="link flex flex-column items-center justify-center bg-black-05 br2 pa3">
<StickyFooterCover />
<h4 className="f4 mv0 pv3">Sticky footer</h4>
</Link>
</div>
</div>
<h2 className="f2 lh-copy">Patterns</h2>
<div className="flex flex-wrap justify-between">
<div className="w-30">

View File

@@ -0,0 +1,38 @@
import React from 'react';
import Frame from '../placeholders/Frame';
import Line from '../placeholders/Line';
const StickyFooterCover = () => {
return (
<Frame size="medium">
<div className="h-100 flex flex-column">
<div className="flex-shrink-0">
<div className="w-100 flex items-center pa2">
<div className="w1"><Line /></div>
<div className="w1 ml-auto"><Line /></div>
<div className="w1 ml1"><Line /></div>
</div>
<Line size="medium" />
</div>
<div className="flex-grow-1">
<div className="pa2">
<div className="w3 mb2"><Line /></div>
<div className="w3 mb2"><Line /></div>
<div className="w2"><Line /></div>
</div>
</div>
<div className="flex-shrink-0">
<Line size="medium" />
<div className="w-100 flex items-center pa2">
<div className="w1"><Line /></div>
<div className="w1 ml1"><Line /></div>
<div className="w1 ml1"><Line /></div>
</div>
</div>
</div>
</Frame>
);
};
export default StickyFooterCover;

View File

@@ -0,0 +1,57 @@
import React from 'react';
import DetailsLayout from '../DetailsLayout';
import BrowserFrame from '../placeholders/BrowserFrame';
import SampleCode from '../SampleCode';
import useDocumentTitle from '../useDocumentTitle';
const StickyFooter = () => {
useDocumentTitle('CSS Layout ∙ Sticky footer');
return (
<DetailsLayout name="Sticky footer">
<div className="lh-copy mb3">
The footer is always sticky at the bottom if the main content is short.
</div>
<BrowserFrame
content={
<div className="h-100 flex flex-column ba b--black-30 bw1">
<div className="flex-shrink-0 bb b--black-30 bw1 pa3">
Header
</div>
<div className="flex-grow-1 pa3">
Content
</div>
<div className="flex-shrink-0 bt b--black-30 bw1 pa3">
Footer
</div>
</div>
}
source={
<SampleCode
lang="html"
code={`
<div style="
display: flex;
flex-direction: column;
height: '100%';
">
<header style="flex-shrink: 0;">
...
</header>
<main style="flex-grow: 1;">
...
</main>
<footer style="flex-shrink: 0;">
...
</footer>
</div>
`}
/>
}
/>
</DetailsLayout>
);
};
export default StickyFooter;

View File

@@ -1,10 +1,13 @@
import React from 'react';
const Frame = ({ children }) => {
const Frame = ({ children, size }) => {
const bw = (size === 'medium' ? '2px' : '1px');
return (
<div
className="ba b--black-30 br2"
style={{
borderWidth: bw,
height: '100px',
width: '100px',
}}

View File

@@ -1,10 +1,12 @@
import React from 'react';
const Line = () => {
const Line = ({ size }) => {
const h = (size === 'medium' ? '2px' : '1px');
return (
<div
className="w-100 bg-black-30"
style={{ height: '1px' }}
style={{ height: h }}
/>
);
};