@@ -73,7 +73,7 @@ You might be interested in my products:
|
|||||||
|
|
||||||
_Products_
|
_Products_
|
||||||
* [Blur Page - A browser extension to hide sensitive information on a web page](https://blur.page)
|
* [Blur Page - A browser extension to hide sensitive information on a web page](https://blur.page)
|
||||||
* [Check Browsers Support - A browser extension to check browser compatibility without leaving your tab](https://checkbrowsers.support")
|
* [Check Browsers Support - A browser extension to check browser compatibility without leaving your tab](https://checkbrowsers.support)
|
||||||
* [Fake Numbers - Generate fake and valid numbers](https://fakenumbers.io)
|
* [Fake Numbers - Generate fake and valid numbers](https://fakenumbers.io)
|
||||||
* [Form Validation - The best validation library for JavaScript](https://formvalidation.io)
|
* [Form Validation - The best validation library for JavaScript](https://formvalidation.io)
|
||||||
* [React PDF Viewer - A React component to view a PDF document](https://react-pdf-viewer.dev)
|
* [React PDF Viewer - A React component to view a PDF document](https://react-pdf-viewer.dev)
|
||||||
|
@@ -15,9 +15,10 @@ interface ProductProps {
|
|||||||
|
|
||||||
const Product: React.FC<ProductProps> = ({ product }) => {
|
const Product: React.FC<ProductProps> = ({ product }) => {
|
||||||
return (
|
return (
|
||||||
<div className="product">
|
<div className="product" style={{ backgroundColor: product.themeColor }}>
|
||||||
<a href={product.url}>
|
<a href={product.url}>
|
||||||
<img className="product__logo" src={`/assets/${slug(product.name)}.png`} alt={`${product.name} - ${product.description}`} />
|
<img className="product__logo" src={`/assets/${slug(product.name)}.png`} alt={`${product.name} - ${product.description}`} />
|
||||||
|
<h3 className="product__name">{product.name}</h3>
|
||||||
<div className="product__desc">{product.description}</div>
|
<div className="product__desc">{product.description}</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -4,19 +4,27 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
.product {
|
.product {
|
||||||
border: 1px solid rgba(0, 0, 0, .3);
|
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
|
color: #FFF;
|
||||||
margin: 1rem 0;
|
margin: 1rem 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
padding: 1rem;
|
||||||
}
|
}
|
||||||
.product a {
|
.product a {
|
||||||
|
color: #FFF;
|
||||||
|
text-align: center;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
.product__logo {
|
.product__logo {
|
||||||
|
display: flex;
|
||||||
height: auto;
|
height: auto;
|
||||||
width: 100%;
|
margin: 0 auto;
|
||||||
|
width: 6rem;
|
||||||
|
}
|
||||||
|
.product__name {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
margin: 1rem;
|
||||||
}
|
}
|
||||||
.product__desc {
|
.product__desc {
|
||||||
padding: 0.5rem;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
@@ -12,6 +12,12 @@ const ProductList: ProductModel[] = [
|
|||||||
description: 'A browser extension to hide sensitive information on a web page',
|
description: 'A browser extension to hide sensitive information on a web page',
|
||||||
themeColor: '#4e7fb8',
|
themeColor: '#4e7fb8',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'Check Browsers Support',
|
||||||
|
url: 'https://checkbrowsers.support',
|
||||||
|
description: 'A browser extension to check browser compatibility without leaving your tab',
|
||||||
|
themeColor: '#f33446',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'Form Validation',
|
name: 'Form Validation',
|
||||||
url: 'https://formvalidation.io',
|
url: 'https://formvalidation.io',
|
||||||
|
@@ -59,9 +59,8 @@ a {
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
.hero__logo img {
|
.hero__logo img {
|
||||||
height: 12rem;
|
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
width: 20rem;
|
width: 16rem;
|
||||||
}
|
}
|
||||||
.hero__heading {
|
.hero__heading {
|
||||||
color: var(--color-gray-9);
|
color: var(--color-gray-9);
|
||||||
@@ -154,13 +153,13 @@ pre {
|
|||||||
}
|
}
|
||||||
@media (min-width: 768px) {
|
@media (min-width: 768px) {
|
||||||
.sidebar {
|
.sidebar {
|
||||||
flex-basis: 10rem;
|
flex-basis: 12rem;
|
||||||
margin-left: 1rem;
|
margin-left: 1rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media (min-width: 1024px) {
|
@media (min-width: 1024px) {
|
||||||
.sidebar {
|
.sidebar {
|
||||||
flex-basis: 12rem;
|
flex-basis: 16rem;
|
||||||
margin-left: 2rem;
|
margin-left: 2rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -43,7 +43,8 @@ const HomePage = () => {
|
|||||||
<div className="hero">
|
<div className="hero">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="hero__logo"><img src="/assets/logo.png" alt="CSS Layout" /></div>
|
<div className="hero__logo"><img src="/assets/logo.png" alt="CSS Layout" /></div>
|
||||||
<h1 className="hero__heading">Popular Layouts & patterns made with CSS</h1>
|
<h1 className="home__heading">CSS Layout</h1>
|
||||||
|
<h2 className="hero__subheading">Popular Layouts & patterns made with CSS</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@@ -44,9 +44,10 @@
|
|||||||
}
|
}
|
||||||
.home__heading {
|
.home__heading {
|
||||||
color: var(--color-gray-9);
|
color: var(--color-gray-9);
|
||||||
font-size: 4rem;
|
font-size: 3rem;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
margin-bottom: 1rem;
|
margin: 1rem;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
.home__explore {
|
.home__explore {
|
||||||
background-color: var(--background-color);
|
background-color: var(--background-color);
|
||||||
|
@@ -7,6 +7,7 @@ import * as React from 'react';
|
|||||||
import { Helmet } from 'react-helmet';
|
import { Helmet } from 'react-helmet';
|
||||||
import Pattern from '../../constants/Pattern';
|
import Pattern from '../../constants/Pattern';
|
||||||
|
|
||||||
|
import RelatedPatterns from '../../components/RelatedPatterns';
|
||||||
import DetailsLayout from '../../layouts/DetailsLayout';
|
import DetailsLayout from '../../layouts/DetailsLayout';
|
||||||
import Block from '../../placeholders/Block';
|
import Block from '../../placeholders/Block';
|
||||||
import BrowserFrame from '../../placeholders/BrowserFrame';
|
import BrowserFrame from '../../placeholders/BrowserFrame';
|
||||||
@@ -22,8 +23,7 @@ const Details: React.FC<{}> = () => {
|
|||||||
<meta name="twitter:description" content="Create a timeline with CSS flexbox" />
|
<meta name="twitter:description" content="Create a timeline with CSS flexbox" />
|
||||||
<meta name="keywords" content="css flexbox, css timeline" />
|
<meta name="keywords" content="css flexbox, css timeline" />
|
||||||
</Helmet>
|
</Helmet>
|
||||||
<div className='p-8 pb-20'>
|
<BrowserFrame
|
||||||
<BrowserFrame
|
|
||||||
html={`
|
html={`
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<!-- Left vertical line -->
|
<!-- Left vertical line -->
|
||||||
@@ -111,77 +111,78 @@ css={`
|
|||||||
margin-left: 48px;
|
margin-left: 48px;
|
||||||
}
|
}
|
||||||
`}
|
`}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
alignItems: 'center',
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'column',
|
||||||
|
height: '100%',
|
||||||
|
justifyContent: 'center',
|
||||||
|
padding: '8px',
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
alignItems: 'center',
|
position: 'relative',
|
||||||
display: 'flex',
|
width: '60%',
|
||||||
flexDirection: 'column',
|
|
||||||
height: '100%',
|
|
||||||
justifyContent: 'center',
|
|
||||||
padding: '8px',
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
position: 'relative',
|
borderRight: '2px solid #aaa',
|
||||||
width: '60%',
|
height: '100%',
|
||||||
|
left: '16px',
|
||||||
|
position: 'absolute',
|
||||||
|
top: 0,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<ul
|
||||||
|
style={{
|
||||||
|
listStyleType: 'none',
|
||||||
|
margin: 0,
|
||||||
|
padding: 0,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div
|
<li style={{ marginBottom: '8px' }}>
|
||||||
style={{
|
<div style={{ alignItems: 'center', display: 'flex', marginBottom: '4px' }}>
|
||||||
borderRight: '2px solid #aaa',
|
<Circle backgroundColor='#aaa' size={32} />
|
||||||
height: '100%',
|
<div style={{ flex: 1, marginLeft: '16px' }}>
|
||||||
left: '16px',
|
<div style={{ width: '80%' }}><Rectangle /></div>
|
||||||
position: 'absolute',
|
|
||||||
top: 0,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<ul
|
|
||||||
style={{
|
|
||||||
listStyleType: 'none',
|
|
||||||
margin: 0,
|
|
||||||
padding: 0,
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<li style={{ marginBottom: '8px' }}>
|
|
||||||
<div style={{ alignItems: 'center', display: 'flex', marginBottom: '4px' }}>
|
|
||||||
<Circle backgroundColor='#aaa' size={32} />
|
|
||||||
<div style={{ flex: 1, marginLeft: '16px' }}>
|
|
||||||
<div style={{ width: '80%' }}><Rectangle /></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div style={{ marginLeft: '48px' }}>
|
</div>
|
||||||
<Block numberOfBlocks={10} blockHeight={2} />
|
<div style={{ marginLeft: '48px' }}>
|
||||||
|
<Block numberOfBlocks={10} blockHeight={2} />
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li style={{ marginBottom: '8px' }}>
|
||||||
|
<div style={{ alignItems: 'center', display: 'flex', marginBottom: '4px' }}>
|
||||||
|
<Circle backgroundColor='#aaa' size={32} />
|
||||||
|
<div style={{ flex: 1, marginLeft: '16px' }}>
|
||||||
|
<div style={{ width: '60%' }}><Rectangle /></div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</div>
|
||||||
<li style={{ marginBottom: '8px' }}>
|
<div style={{ marginLeft: '48px' }}>
|
||||||
<div style={{ alignItems: 'center', display: 'flex', marginBottom: '4px' }}>
|
<Block numberOfBlocks={15} blockHeight={2} />
|
||||||
<Circle backgroundColor='#aaa' size={32} />
|
</div>
|
||||||
<div style={{ flex: 1, marginLeft: '16px' }}>
|
</li>
|
||||||
<div style={{ width: '60%' }}><Rectangle /></div>
|
<li style={{ marginBottom: '8px' }}>
|
||||||
</div>
|
<div style={{ alignItems: 'center', display: 'flex', marginBottom: '4px' }}>
|
||||||
|
<Circle backgroundColor='#aaa' size={32} />
|
||||||
|
<div style={{ flex: 1, marginLeft: '16px' }}>
|
||||||
|
<div style={{ width: '60%' }}><Rectangle /></div>
|
||||||
</div>
|
</div>
|
||||||
<div style={{ marginLeft: '48px' }}>
|
</div>
|
||||||
<Block numberOfBlocks={15} blockHeight={2} />
|
<div style={{ marginLeft: '48px' }}>
|
||||||
</div>
|
<Block numberOfBlocks={10} blockHeight={2} />
|
||||||
</li>
|
</div>
|
||||||
<li style={{ marginBottom: '8px' }}>
|
</li>
|
||||||
<div style={{ alignItems: 'center', display: 'flex', marginBottom: '4px' }}>
|
</ul>
|
||||||
<Circle backgroundColor='#aaa' size={32} />
|
|
||||||
<div style={{ flex: 1, marginLeft: '16px' }}>
|
|
||||||
<div style={{ width: '60%' }}><Rectangle /></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style={{ marginLeft: '48px' }}>
|
|
||||||
<Block numberOfBlocks={10} blockHeight={2} />
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</BrowserFrame>
|
</div>
|
||||||
</div>
|
</BrowserFrame>
|
||||||
|
|
||||||
|
<RelatedPatterns patterns={[Pattern.ZigzagTimeline]} />
|
||||||
</DetailsLayout>
|
</DetailsLayout>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@@ -7,6 +7,7 @@ import * as React from 'react';
|
|||||||
import { Helmet } from 'react-helmet';
|
import { Helmet } from 'react-helmet';
|
||||||
import Pattern from '../../constants/Pattern';
|
import Pattern from '../../constants/Pattern';
|
||||||
|
|
||||||
|
import RelatedPatterns from '../../components/RelatedPatterns';
|
||||||
import DetailsLayout from '../../layouts/DetailsLayout';
|
import DetailsLayout from '../../layouts/DetailsLayout';
|
||||||
import Block from '../../placeholders/Block';
|
import Block from '../../placeholders/Block';
|
||||||
import BrowserFrame from '../../placeholders/BrowserFrame';
|
import BrowserFrame from '../../placeholders/BrowserFrame';
|
||||||
@@ -23,8 +24,7 @@ const Details: React.FC<{}> = () => {
|
|||||||
<meta name="twitter:description" content="Create a zigzag timeline" />
|
<meta name="twitter:description" content="Create a zigzag timeline" />
|
||||||
<meta name="keywords" content="css timeline, css zigzag timeline" />
|
<meta name="keywords" content="css timeline, css zigzag timeline" />
|
||||||
</Helmet>
|
</Helmet>
|
||||||
<div className='p-8 pb-20'>
|
<BrowserFrame
|
||||||
<BrowserFrame
|
|
||||||
html={`
|
html={`
|
||||||
<div class="zigzag-timeline__item">
|
<div class="zigzag-timeline__item">
|
||||||
<!-- Milestone -->
|
<!-- Milestone -->
|
||||||
@@ -82,52 +82,53 @@ css={`
|
|||||||
transform: translate(50%, -50%);
|
transform: translate(50%, -50%);
|
||||||
}
|
}
|
||||||
`}
|
`}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
alignItems: 'center',
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'column',
|
||||||
|
height: '100%',
|
||||||
|
justifyContent: 'center',
|
||||||
|
margin: '0 auto',
|
||||||
|
padding: '0.5rem',
|
||||||
|
width: '60%',
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
style={{
|
className='zigzag-timeline__item'
|
||||||
alignItems: 'center',
|
style={{
|
||||||
display: 'flex',
|
padding: '1rem 1.5rem',
|
||||||
flexDirection: 'column',
|
|
||||||
height: '100%',
|
|
||||||
justifyContent: 'center',
|
|
||||||
margin: '0 auto',
|
|
||||||
padding: '0.5rem',
|
|
||||||
width: '60%',
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div
|
<div className='zigzag-timeline__milestone'/>
|
||||||
className='zigzag-timeline__item'
|
<div style={{ marginBottom: '1rem', width: '80%' }}><Rectangle /></div>
|
||||||
style={{
|
<Block numberOfBlocks={10} />
|
||||||
padding: '1rem 1.5rem',
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<div className='zigzag-timeline__milestone'/>
|
|
||||||
<div style={{ marginBottom: '1rem', width: '80%' }}><Rectangle /></div>
|
|
||||||
<Block numberOfBlocks={10} />
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
className='zigzag-timeline__item'
|
|
||||||
style={{
|
|
||||||
padding: '1rem 1.5rem',
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<div className='zigzag-timeline__milestone' />
|
|
||||||
<div style={{ marginBottom: '1rem', width: '60%' }}><Rectangle /></div>
|
|
||||||
<Block numberOfBlocks={20} />
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
className='zigzag-timeline__item'
|
|
||||||
style={{
|
|
||||||
padding: '1rem 1.5rem',
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<div className='zigzag-timeline__milestone' />
|
|
||||||
<div style={{ marginBottom: '1rem', width: '70%' }}><Rectangle /></div>
|
|
||||||
<Block numberOfBlocks={15} />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</BrowserFrame>
|
<div
|
||||||
</div>
|
className='zigzag-timeline__item'
|
||||||
|
style={{
|
||||||
|
padding: '1rem 1.5rem',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div className='zigzag-timeline__milestone' />
|
||||||
|
<div style={{ marginBottom: '1rem', width: '60%' }}><Rectangle /></div>
|
||||||
|
<Block numberOfBlocks={20} />
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
className='zigzag-timeline__item'
|
||||||
|
style={{
|
||||||
|
padding: '1rem 1.5rem',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div className='zigzag-timeline__milestone' />
|
||||||
|
<div style={{ marginBottom: '1rem', width: '70%' }}><Rectangle /></div>
|
||||||
|
<Block numberOfBlocks={15} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</BrowserFrame>
|
||||||
|
|
||||||
|
<RelatedPatterns patterns={[Pattern.Timeline]} />
|
||||||
</DetailsLayout>
|
</DetailsLayout>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 50 KiB |
BIN
public/assets/check-browsers-support.png
Normal file
After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 40 KiB |