mirror of
https://github.com/phuoc-ng/csslayout.git
synced 2025-08-13 01:24:36 +02:00
Add sticky header
This commit is contained in:
@@ -4,6 +4,7 @@ import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
|
|||||||
import Home from './Home';
|
import Home from './Home';
|
||||||
import Centering from './layouts/Centering';
|
import Centering from './layouts/Centering';
|
||||||
import StickyFooter from './layouts/StickyFooter';
|
import StickyFooter from './layouts/StickyFooter';
|
||||||
|
import StickyHeader from './layouts/StickyHeader';
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
return (
|
return (
|
||||||
@@ -12,6 +13,7 @@ const App = () => {
|
|||||||
<Route exact={true} path='/'><Home /></Route>
|
<Route exact={true} path='/'><Home /></Route>
|
||||||
<Route exact={true} path='/centering'><Centering /></Route>
|
<Route exact={true} path='/centering'><Centering /></Route>
|
||||||
<Route exact={true} path='/sticky-footer'><StickyFooter /></Route>
|
<Route exact={true} path='/sticky-footer'><StickyFooter /></Route>
|
||||||
|
<Route exact={true} path='/sticky-header'><StickyHeader /></Route>
|
||||||
</Switch>
|
</Switch>
|
||||||
</Router>
|
</Router>
|
||||||
);
|
);
|
||||||
|
@@ -3,6 +3,7 @@ import { Link } from 'react-router-dom';
|
|||||||
|
|
||||||
import CenterCover from './covers/CenterCover';
|
import CenterCover from './covers/CenterCover';
|
||||||
import StickyFooterCover from './covers/StickyFooterCover';
|
import StickyFooterCover from './covers/StickyFooterCover';
|
||||||
|
import StickyHeaderCover from './covers/StickyHeaderCover';
|
||||||
import Layout from './Layout';
|
import Layout from './Layout';
|
||||||
import useDocumentTitle from './useDocumentTitle';
|
import useDocumentTitle from './useDocumentTitle';
|
||||||
|
|
||||||
@@ -28,22 +29,28 @@ const Home = () => {
|
|||||||
<div className="mw8 center pb4">
|
<div className="mw8 center pb4">
|
||||||
<h2 className="f2 lh-copy">Layouts</h2>
|
<h2 className="f2 lh-copy">Layouts</h2>
|
||||||
|
|
||||||
<div className="flex flex-wrap justify-between">
|
<div className="flex flex-wrap">
|
||||||
<div className="w-30">
|
<div className="pa2 w-20">
|
||||||
<Link to="/sticky-footer" className="link flex flex-column items-center justify-center bg-black-05 br2 pa3">
|
<Link to="/sticky-footer" className="link flex flex-column items-center justify-center bg-black-05 br2 ph3 pv4">
|
||||||
<StickyFooterCover />
|
<StickyFooterCover />
|
||||||
<h4 className="f4 mv0 pv3">Sticky footer</h4>
|
<h4 className="f4 mv0 pt3">Sticky footer</h4>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
<div className="pa2 w-20">
|
||||||
|
<Link to="/sticky-header" className="link flex flex-column items-center justify-center bg-black-05 br2 ph3 pv4">
|
||||||
|
<StickyHeaderCover />
|
||||||
|
<h4 className="f4 mv0 pt3">Sticky header</h4>
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2 className="f2 lh-copy">Patterns</h2>
|
<h2 className="f2 lh-copy">Patterns</h2>
|
||||||
|
|
||||||
<div className="flex flex-wrap justify-between">
|
<div className="flex flex-wrap">
|
||||||
<div className="w-30">
|
<div className="pa2 w-20">
|
||||||
<Link to="/centering" className="link flex flex-column items-center justify-center bg-black-05 br2 pa3">
|
<Link to="/centering" className="link flex flex-column items-center justify-center bg-black-05 br2 ph3 pv4">
|
||||||
<CenterCover />
|
<CenterCover />
|
||||||
<h4 className="f4 mv0 pv3">Centering</h4>
|
<h4 className="f4 mv0 pt3">Centering</h4>
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -7,7 +7,7 @@ const StickyFooterCover = () => {
|
|||||||
return (
|
return (
|
||||||
<Frame size="medium">
|
<Frame size="medium">
|
||||||
<div className="h-100 flex flex-column">
|
<div className="h-100 flex flex-column">
|
||||||
<div className="flex-shrink-0">
|
<div className="flex-shrink-0 b--black-30 br bw2">
|
||||||
<div className="w-100 flex items-center pa2">
|
<div className="w-100 flex items-center pa2">
|
||||||
<div className="w1"><Line /></div>
|
<div className="w1"><Line /></div>
|
||||||
<div className="w1 ml-auto"><Line /></div>
|
<div className="w1 ml-auto"><Line /></div>
|
||||||
@@ -15,7 +15,7 @@ const StickyFooterCover = () => {
|
|||||||
</div>
|
</div>
|
||||||
<Line size="medium" />
|
<Line size="medium" />
|
||||||
</div>
|
</div>
|
||||||
<div className="flex-grow-1">
|
<div className="flex-grow-1 b--black-30 br bw2">
|
||||||
<div className="pa2">
|
<div className="pa2">
|
||||||
<div className="w3 mb2"><Line /></div>
|
<div className="w3 mb2"><Line /></div>
|
||||||
<div className="w3 mb2"><Line /></div>
|
<div className="w3 mb2"><Line /></div>
|
||||||
|
30
client/covers/StickyHeaderCover.jsx
Normal file
30
client/covers/StickyHeaderCover.jsx
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import Frame from '../placeholders/Frame';
|
||||||
|
import Line from '../placeholders/Line';
|
||||||
|
|
||||||
|
const StickyHeaderCover = () => {
|
||||||
|
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 b--black-30 br bw2">
|
||||||
|
<div className="pa2">
|
||||||
|
<div className="w3 mb2"><Line /></div>
|
||||||
|
<div className="w3 mb2"><Line /></div>
|
||||||
|
<div className="w2"><Line /></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Frame>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default StickyHeaderCover;
|
@@ -34,7 +34,7 @@ code={`
|
|||||||
<div style="
|
<div style="
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
height: '100%';
|
height: 100%;
|
||||||
">
|
">
|
||||||
<header style="flex-shrink: 0;">
|
<header style="flex-shrink: 0;">
|
||||||
...
|
...
|
||||||
|
50
client/layouts/StickyHeader.jsx
Normal file
50
client/layouts/StickyHeader.jsx
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import DetailsLayout from '../DetailsLayout';
|
||||||
|
import BrowserFrame from '../placeholders/BrowserFrame';
|
||||||
|
import SampleCode from '../SampleCode';
|
||||||
|
import useDocumentTitle from '../useDocumentTitle';
|
||||||
|
|
||||||
|
const StickyHeader = () => {
|
||||||
|
useDocumentTitle('CSS Layout ∙ Sticky header');
|
||||||
|
|
||||||
|
return (
|
||||||
|
<DetailsLayout name="Sticky header">
|
||||||
|
<BrowserFrame
|
||||||
|
content={
|
||||||
|
<div>
|
||||||
|
<div className="top-0 bg-white bb b--black-30 bw1 pa3" style={{ position: 'sticky' }}>
|
||||||
|
Header
|
||||||
|
</div>
|
||||||
|
<div className="pa3">
|
||||||
|
<div className="lh-copy mb3">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nulla facilisi morbi tempus iaculis urna id volutpat lacus. Urna id volutpat lacus laoreet non curabitur gravida. Eu mi bibendum neque egestas congue quisque egestas. Turpis egestas pretium aenean pharetra magna ac placerat. Proin sagittis nisl rhoncus mattis rhoncus urna. Est velit egestas dui id. Auctor neque vitae tempus quam pellentesque. Convallis a cras semper auctor neque. Consequat nisl vel pretium lectus quam id leo. Netus et malesuada fames ac. Dictum at tempor commodo ullamcorper a. Tellus in metus vulputate eu scelerisque. Morbi tristique senectus et netus et. Suscipit tellus mauris a diam maecenas sed enim. Eu facilisis sed odio morbi. Fermentum iaculis eu non diam phasellus.</div>
|
||||||
|
<div className="lh-copy mb3">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nulla facilisi morbi tempus iaculis urna id volutpat lacus. Urna id volutpat lacus laoreet non curabitur gravida. Eu mi bibendum neque egestas congue quisque egestas. Turpis egestas pretium aenean pharetra magna ac placerat. Proin sagittis nisl rhoncus mattis rhoncus urna. Est velit egestas dui id. Auctor neque vitae tempus quam pellentesque. Convallis a cras semper auctor neque. Consequat nisl vel pretium lectus quam id leo. Netus et malesuada fames ac. Dictum at tempor commodo ullamcorper a. Tellus in metus vulputate eu scelerisque. Morbi tristique senectus et netus et. Suscipit tellus mauris a diam maecenas sed enim. Eu facilisis sed odio morbi. Fermentum iaculis eu non diam phasellus.</div>
|
||||||
|
<div className="lh-copy mb3">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nulla facilisi morbi tempus iaculis urna id volutpat lacus. Urna id volutpat lacus laoreet non curabitur gravida. Eu mi bibendum neque egestas congue quisque egestas. Turpis egestas pretium aenean pharetra magna ac placerat. Proin sagittis nisl rhoncus mattis rhoncus urna. Est velit egestas dui id. Auctor neque vitae tempus quam pellentesque. Convallis a cras semper auctor neque. Consequat nisl vel pretium lectus quam id leo. Netus et malesuada fames ac. Dictum at tempor commodo ullamcorper a. Tellus in metus vulputate eu scelerisque. Morbi tristique senectus et netus et. Suscipit tellus mauris a diam maecenas sed enim. Eu facilisis sed odio morbi. Fermentum iaculis eu non diam phasellus.</div>
|
||||||
|
<div className="lh-copy">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nulla facilisi morbi tempus iaculis urna id volutpat lacus. Urna id volutpat lacus laoreet non curabitur gravida. Eu mi bibendum neque egestas congue quisque egestas. Turpis egestas pretium aenean pharetra magna ac placerat. Proin sagittis nisl rhoncus mattis rhoncus urna. Est velit egestas dui id. Auctor neque vitae tempus quam pellentesque. Convallis a cras semper auctor neque. Consequat nisl vel pretium lectus quam id leo. Netus et malesuada fames ac. Dictum at tempor commodo ullamcorper a. Tellus in metus vulputate eu scelerisque. Morbi tristique senectus et netus et. Suscipit tellus mauris a diam maecenas sed enim. Eu facilisis sed odio morbi. Fermentum iaculis eu non diam phasellus.</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
source={
|
||||||
|
<SampleCode
|
||||||
|
lang="html"
|
||||||
|
code={`
|
||||||
|
<div>
|
||||||
|
<header style="
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
">
|
||||||
|
...
|
||||||
|
</header>
|
||||||
|
<main>
|
||||||
|
...
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
`}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</DetailsLayout>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default StickyHeader;
|
@@ -25,7 +25,7 @@ const BrowserFrame = ({ content, source }) => {
|
|||||||
transform: isContentActive ? '' : 'rotateY(180deg)',
|
transform: isContentActive ? '' : 'rotateY(180deg)',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="absolute top-0 left-0 h-100 w-100" style={{ backfaceVisibility: 'hidden' }}>
|
<div className="overflow-scroll absolute top-0 left-0 h-100 w-100" style={{ backfaceVisibility: 'hidden' }}>
|
||||||
{content}
|
{content}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
Reference in New Issue
Block a user