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

Merge pull request #15 from phuoc-ng/fixed-corner

Add fixed corner
This commit is contained in:
phuoc-ng
2019-11-17 12:50:20 +07:00
committed by GitHub
5 changed files with 152 additions and 0 deletions

View File

@@ -5,6 +5,7 @@ import Home from './Home';
import Badge from './layouts/badge/Details'; import Badge from './layouts/badge/Details';
import ButtonWithIcon from './layouts/button-with-icon/Details'; import ButtonWithIcon from './layouts/button-with-icon/Details';
import Centering from './layouts/centering/Details'; import Centering from './layouts/centering/Details';
import FixedAtCorner from './layouts/fixed-at-corner/Details';
import HolyGrail from './layouts/holy-grail/Details'; import HolyGrail from './layouts/holy-grail/Details';
import InputAddon from './layouts/input-add-on/Details'; import InputAddon from './layouts/input-add-on/Details';
import MediaObject from './layouts/media-object/Details'; import MediaObject from './layouts/media-object/Details';
@@ -22,6 +23,7 @@ const App = () => {
<Route exact={true} path='/badge'><Badge /></Route> <Route exact={true} path='/badge'><Badge /></Route>
<Route exact={true} path='/button-with-icon'><ButtonWithIcon /></Route> <Route exact={true} path='/button-with-icon'><ButtonWithIcon /></Route>
<Route exact={true} path='/centering'><Centering /></Route> <Route exact={true} path='/centering'><Centering /></Route>
<Route exact={true} path='/fixed-at-corner'><FixedAtCorner /></Route>
<Route exact={true} path='/holy-grail'><HolyGrail /></Route> <Route exact={true} path='/holy-grail'><HolyGrail /></Route>
<Route exact={true} path='/input-add-on'><InputAddon /></Route> <Route exact={true} path='/input-add-on'><InputAddon /></Route>
<Route exact={true} path='/media-object'><MediaObject /></Route> <Route exact={true} path='/media-object'><MediaObject /></Route>

View File

@@ -4,6 +4,7 @@ import { Link } from 'react-router-dom';
import BadgeCover from './layouts/badge/Cover'; import BadgeCover from './layouts/badge/Cover';
import ButtonWithIconCover from './layouts/button-with-icon/Cover'; import ButtonWithIconCover from './layouts/button-with-icon/Cover';
import CenterCover from './layouts/centering/Cover'; import CenterCover from './layouts/centering/Cover';
import FixedAtCornerCover from './layouts/fixed-at-corner/Cover';
import HolyGrailCover from './layouts/holy-grail/Cover'; import HolyGrailCover from './layouts/holy-grail/Cover';
import InputAddonCover from './layouts/input-add-on/Cover'; import InputAddonCover from './layouts/input-add-on/Cover';
import MediaObjectCover from './layouts/media-object/Cover'; import MediaObjectCover from './layouts/media-object/Cover';
@@ -85,6 +86,12 @@ const Home = () => {
<h4 className="f4 mv0 pt3">Centering</h4> <h4 className="f4 mv0 pt3">Centering</h4>
</Link> </Link>
</div> </div>
<div className="pa1 w-20">
<Link to="/fixed-at-corner" className="link flex flex-column items-center justify-center tc hover-bg-black-10 br2 pa3">
<FixedAtCornerCover />
<h4 className="f4 mv0 pt3">Fixed at corner</h4>
</Link>
</div>
<div className="pa1 w-20"> <div className="pa1 w-20">
<Link to="/input-add-on" className="link flex flex-column items-center justify-center tc hover-bg-black-10 br2 pa3"> <Link to="/input-add-on" className="link flex flex-column items-center justify-center tc hover-bg-black-10 br2 pa3">
<InputAddonCover /> <InputAddonCover />

View File

@@ -0,0 +1,18 @@
import React from 'react';
import Frame from '../../placeholders/Frame';
import Triangle from '../../placeholders/Triangle';
const Cover = () => {
return (
<Frame>
<div className="relative">
<div className="absolute top-0 left-0">
<Triangle size={32} />
</div>
</div>
</Frame>
);
};
export default Cover;

View File

@@ -0,0 +1,83 @@
import React from 'react';
import DetailsLayout from '../../DetailsLayout';
import BrowserFrame from '../../placeholders/BrowserFrame';
import Triangle from '../../placeholders/Triangle';
import SampleCode from '../../SampleCode';
import useDocumentTitle from '../../useDocumentTitle';
const Details = () => {
useDocumentTitle('CSS Layout ∙ Fixed at corner');
return (
<DetailsLayout>
<h1 className="f1 tc">Fixed at corner</h1>
<BrowserFrame
content={
<div className="relative h-100">
<div className="absolute top-0 left-0">
<Triangle size={64} corner="tl" />
</div>
<div className="absolute top-0 right-0">
<Triangle size={64} corner="tr" />
</div>
<div className="absolute bottom-0 right-0">
<Triangle size={64} corner="br" />
</div>
<div className="absolute bottom-0 left-0">
<Triangle size={64} corner="bl" />
</div>
</div>
}
source={
<SampleCode
lang="html"
code={`
<div style="
position: relative;
">
<!-- Top-left corner -->
<div style="
left: 0;
position: absolute;
top: 0;
">
...
</div>
<!-- Top-right corner -->
<div style="
position: absolute;
top: 0;
right: 0;
">
...
</div>
<!-- Bottom-right corner -->
<div style="
bottom: 0;
position: absolute;
right: 0;
">
...
</div>
<!-- Bottom-left corner -->
<div style="
bottom: 0;
left: 0;
position: absolute;
">
...
</div>
</div>
`}
/>
}
/>
</DetailsLayout>
);
};
export default Details;

View File

@@ -0,0 +1,42 @@
import React from 'react';
const Triangle = ({ size = 16, corner = 'tl' }) => {
let bw = '';
let bc = '';
switch (corner) {
case 'tr':
bw = `0 ${size}px ${size}px 0`;
bc = 'transparent rgba(0, 0, 0, .3) transparent transparent';
break;
case 'br':
bw = `0 0 ${size}px ${size}px`;
bc = 'transparent transparent rgba(0, 0, 0, .3) transparent';
break;
case 'bl':
bw = `${size}px 0 0 ${size}px`;
bc = 'transparent transparent transparent rgba(0, 0, 0, .3)';
break;
case 'tl':
default:
bw = `${size}px ${size}px 0 0`;
bc = 'rgba(0, 0, 0, .3) transparent transparent transparent';
break;
}
return (
<div
style={{
borderColor: bc,
borderStyle: 'solid',
borderWidth: bw,
height: 0,
width: 0,
}}
/>
);
};
export default Triangle;