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

Tweak the details page

This commit is contained in:
Phuoc Nguyen
2019-11-21 14:29:12 +07:00
parent c23115431d
commit a105818990
29 changed files with 46 additions and 134 deletions

View File

@@ -1,16 +1,21 @@
import React from 'react';
import { Link } from 'react-router-dom';
import useDocumentTitle from './hooks/useDocumentTitle';
import Layout from './Layout';
const DetailsLayout = ({ children }) => {
const DetailsLayout = ({ title, children }) => {
useDocumentTitle(`CSS Layout ∙ ${title}`);
return (
<Layout>
<div className="mw8 center">
<div className="mv4">
<Link to="/" className="link black pa1 ba b--black-60">CSS Layout</Link>
</div>
<div className="mb5">
<div className="mv4">
<Link to="/" className="bg-dark-blue black br-pill link pa1 ph3 pv2 white">CSS Layout</Link>
</div>
<div className="bt br bl b--black-20 relative br4 br--top">
<h1 className="absolute bg-white f2 fw6 left-2 lh-copy ma0 ph2 top-0" style={{ left: '50%', transform: 'translate(-50%, -50%)' }}>{title}</h1>
<div className="pa5">
{children}
</div>
</div>

View File

@@ -2,7 +2,7 @@ import React from 'react';
const Footer = () => {
return (
<div className="mw8 center bl br bb b--black-20 flex justify-between">
<div className="bl br bb b--black-20 flex justify-between br4 br--bottom">
<div className="bt br b--black-20 relative" style={{ flex: 1 }}>
<h3 className="absolute bg-white f4 left-2 lh-copy ma0 ph2 top-0" style={{ transform: 'translate(0, -50%)' }}>PRODUCTS</h3>

View File

@@ -33,13 +33,13 @@ const Home = () => {
return (
<Layout>
<div className="pt5 pb4">
<h1 className="f1 fw6 flex items-center justify-center">
CSS Layout
</h1>
<h2 className="fw1 tc lh-copy">a collection of popular layouts and patterns made with CSS</h2>
</div>
<div className="mw8 center bl br b--black-20">
<div className="mt5 bl br bt b--black-20 br4 br--top">
<div className="relative">
<h1 className="absolute bg-white f2 fw6 left-2 lh-copy ma0 ph2 top-0" style={{ left: '50%', transform: 'translate(-50%, -50%)' }}>CSS Layout</h1>
<h2 className="fw1 tc lh-copy ma0 pa4">a collection of popular layouts and patterns made with CSS</h2>
</div>
<div className="bt b--black-20 relative">
<h3 className="absolute bg-white f4 left-2 lh-copy ma0 ph2 top-0" style={{ transform: 'translate(0, -50%)' }}>Layouts</h3>

View File

@@ -8,9 +8,8 @@ const Layout = ({ children }) => {
}, []);
return (
<div className="mw8 mv4 center">
<div className="mw8 mb5 center">
{children}
<Footer />
</div>
);

View File

@@ -3,14 +3,10 @@ import React from 'react';
import DetailsLayout from '../../DetailsLayout';
import BrowserFrame from '../../placeholders/BrowserFrame';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Badge');
return (
<DetailsLayout>
<h1 className="f1 tc">Badge</h1>
<DetailsLayout title="Badge">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center">

View File

@@ -4,14 +4,10 @@ import DetailsLayout from '../../DetailsLayout';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Breadcrumb');
return (
<DetailsLayout>
<h1 className="f1 tc">Breadcrumb</h1>
<DetailsLayout title="Breadcrumb">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center">

View File

@@ -5,14 +5,10 @@ import BrowserFrame from '../../placeholders/BrowserFrame';
import Circle from '../../placeholders/Circle';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Button with icon');
return (
<DetailsLayout>
<h1 className="f1 tc">Button with icon</h1>
<DetailsLayout title="Button with icon">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center">

View File

@@ -5,14 +5,10 @@ import Block from '../../placeholders/Block';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Card');
return (
<DetailsLayout>
<h1 className="f1 tc">Card</h1>
<DetailsLayout title="Card">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center pa3">

View File

@@ -5,14 +5,10 @@ import BrowserFrame from '../../placeholders/BrowserFrame';
import Circle from '../../placeholders/Circle';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Centering');
return (
<DetailsLayout>
<h1 className="f1 tc">Centering</h1>
<DetailsLayout title="Centering">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center">

View File

@@ -4,14 +4,10 @@ import DetailsLayout from '../../DetailsLayout';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Triangle from '../../placeholders/Triangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Fixed at corner');
return (
<DetailsLayout>
<h1 className="f1 tc">Fixed at corner</h1>
<DetailsLayout title="Fixed at corner">
<BrowserFrame
content={
<div className="relative h-100">

View File

@@ -5,14 +5,10 @@ import Block from '../../placeholders/Block';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Holy grail');
return (
<DetailsLayout>
<h1 className="f1 tc">Holy grail</h1>
<DetailsLayout title="Holy grail">
<BrowserFrame
content={
<div className="h-100 flex flex-column">

View File

@@ -4,14 +4,10 @@ import DetailsLayout from '../../DetailsLayout';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Input add-on');
return (
<DetailsLayout>
<h1 className="f1 tc">Input add-on</h1>
<DetailsLayout title="Input add-on">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center">

View File

@@ -6,14 +6,10 @@ import BrowserFrame from '../../placeholders/BrowserFrame';
import Rectangle from '../../placeholders/Rectangle';
import Square from '../../placeholders/Square';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Media object');
return (
<DetailsLayout>
<h1 className="f1 tc">Media object</h1>
<DetailsLayout title="Media object">
<BrowserFrame
content={
<div className="h-100 flex items-start pa3">

View File

@@ -5,14 +5,10 @@ import BrowserFrame from '../../placeholders/BrowserFrame';
import Circle from '../../placeholders/Circle';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Menu');
return (
<DetailsLayout>
<h1 className="f1 tc">Menu</h1>
<DetailsLayout title="Menu">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center">

View File

@@ -6,14 +6,10 @@ import BrowserFrame from '../../placeholders/BrowserFrame';
import Circle from '../../placeholders/Circle';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Modal');
return (
<DetailsLayout>
<h1 className="f1 tc">Modal</h1>
<DetailsLayout title="Modal">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center">

View File

@@ -5,14 +5,10 @@ import Block from '../../placeholders/Block';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Circle from '../../placeholders/Circle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Notification');
return (
<DetailsLayout>
<h1 className="f1 tc">Notification</h1>
<DetailsLayout title="Notification">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center">

View File

@@ -5,14 +5,10 @@ import BrowserFrame from '../../placeholders/BrowserFrame';
import Circle from '../../placeholders/Circle';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Pagination');
return (
<DetailsLayout>
<h1 className="f1 tc">Pagination</h1>
<DetailsLayout title="Pagination">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center pa3">

View File

@@ -4,14 +4,10 @@ import DetailsLayout from '../../DetailsLayout';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Previous and next buttons');
return (
<DetailsLayout>
<h1 className="f1 tc">Previous and next buttons</h1>
<DetailsLayout title="Previous and next buttons">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center">

View File

@@ -6,14 +6,10 @@ import Block from '../../placeholders/Block';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Pricing table');
return (
<DetailsLayout>
<h1 className="f1 tc">Pricing table</h1>
<DetailsLayout title="Pricing table">
<BrowserFrame
content={
<div className="h-100 flex items-center justify-center pa3">

View File

@@ -3,19 +3,16 @@ import React, { useState } from 'react';
import DetailsLayout from '../../DetailsLayout';
import BrowserFrame from '../../placeholders/BrowserFrame';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
import useInterval from '../../hooks/useInterval';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Progress bar');
const [progress, setProgress] = useState(0);
useInterval(() => {
setProgress(v => v === 100 ? 0 : v + 1);
}, 1 * 100);
return (
<DetailsLayout>
<h1 className="f1 tc">Progress bar</h1>
<DetailsLayout title="Progress bar">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center">

View File

@@ -5,14 +5,10 @@ import Block from '../../placeholders/Block';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Same height columns');
return (
<DetailsLayout>
<h1 className="f1 tc">Same height columns</h1>
<DetailsLayout title="Same height columns">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center pa3">

View File

@@ -4,14 +4,10 @@ import DetailsLayout from '../../DetailsLayout';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Block from '../../placeholders/Block';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Sidebar');
return (
<DetailsLayout>
<h1 className="f1 tc">Sidebar</h1>
<DetailsLayout title="Sidebar">
<div className="lh-copy mb3">Try to scroll the main content!</div>
<BrowserFrame
content={

View File

@@ -5,14 +5,10 @@ import Circle from '../../placeholders/Circle';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Slider');
return (
<DetailsLayout>
<h1 className="f1 tc">Slider</h1>
<DetailsLayout title="Slider">
<BrowserFrame
content={
<div className="h-100 flex flex-column items-center justify-center">

View File

@@ -6,14 +6,10 @@ import Block from '../../placeholders/Block';
import Circle from '../../placeholders/Circle';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Split screen');
return (
<DetailsLayout>
<h1 className="f1 tc">Split screen</h1>
<DetailsLayout title="Split screen">
<BrowserFrame
content={
<div className="h-100 flex">

View File

@@ -4,18 +4,15 @@ import { Link } from 'react-router-dom';
import DetailsLayout from '../../DetailsLayout';
import BrowserFrame from '../../placeholders/BrowserFrame';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Stepper input');
const [value, setValue] = useState(0);
const decrease = () => setValue(value - 1);
const increase = () => setValue(value + 1);
const change = (e) => setValue(parseInt(e.target.value, 10));
return (
<DetailsLayout>
<h1 className="f1 tc">Stepper input</h1>
<DetailsLayout title="Stepper input">
<div className="lh-copy mb3">
The content of minus and plus buttons are centered by using the technique in the <Link to="/centering" className="link">Centering</Link> page.
</div>

View File

@@ -5,14 +5,10 @@ import Block from '../../placeholders/Block';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Sticky footer');
return (
<DetailsLayout>
<h1 className="f1 tc">Sticky footer</h1>
<DetailsLayout title="Sticky footer">
<div className="lh-copy mb3">
The footer always sticks to the bottom if the main content is short.
</div>

View File

@@ -5,14 +5,10 @@ import Block from '../../placeholders/Block';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Rectangle from '../../placeholders/Rectangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Sticky header');
return (
<DetailsLayout>
<h1 className="f1 tc">Sticky header</h1>
<DetailsLayout title="Sticky header">
<div className="lh-copy mb3">Try to scroll the main content to see the header sticks to the top of page.</div>
<BrowserFrame
content={

View File

@@ -3,16 +3,13 @@ import React, { useState } from 'react';
import DetailsLayout from '../../DetailsLayout';
import BrowserFrame from '../../placeholders/BrowserFrame';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../hooks/useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Switch');
const [checked, setChecked] = useState(false);
const toggle = () => setChecked(c => !c);
return (
<DetailsLayout>
<h1 className="f1 tc">Switch</h1>
<DetailsLayout title="Switch">
<div className="lh-copy mb3">The checkbox is placed inside a label. So when clicking on the label, the checkbox will be checked even though it's hidden.</div>
<BrowserFrame
content={

View File

@@ -5,7 +5,8 @@ const BrowserFrame = ({ content, source }) => {
const flip = () => setContentActive(isActive => !isActive);
return (
<div className="br2 ba b--black-20" style={{ boxShadow: '0 24px 48px -8px rgba(0, 0, 0, .5)' }}>
<div className="br2 ba b--black-20" style={{ boxShadow: '0 16px 40px -8px rgba(0, 0, 0, .5)' }}>
<div className="flex ph3 pv2 bb b--black-20 items-center bg-black-05">
<div className="br-100 mr1 w1 h1 bg-red" />
<div className="br-100 mr1 w1 h1 bg-gold" />