1
0
mirror of https://github.com/NigelOToole/pixel-borders.git synced 2025-08-30 17:20:06 +02:00

Minor refactor and restructure of project

This commit is contained in:
Nigel O'Toole
2019-05-23 10:36:35 +01:00
parent 2cddd8cb8b
commit 6f63c6a540
16 changed files with 848 additions and 1093 deletions

View File

@@ -2,7 +2,7 @@
[Live demo](http://nigelotoole.github.io/pixel-borders/)
## A SASS mixin to add pixelated borders to HTML elements, which can be customized for different sizes, colour coding,inset borders.
## A SASS mixin to add pixelated borders to HTML elements, which can be customized for different sizes, styles and colour coding.
## Installation
@@ -14,10 +14,16 @@ $ npm install pixel-borders --save-dev
### Import
After adding the repo as a dependency you can import it into your SASS files. Alternatively you can download the pixel-borders.scss from this repo and add it to your project folder directly.
After installation you can import it into your SASS files with the statement below.
```scss
@import "node_modules/pixel-borders/src/styles/pixel-borders.scss";
@import "pixel-borders/src/styles/pixel-borders.scss";
```
You can also just import the mixins without the demo styles.
```scss
@import "pixel-borders/src/styles/pixel-borders/pixel-borders-mixins";
```
#### Pixel borders mixin options

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Pixel borders - A SASS mixin to add pixelated borders to HTML elements</title>
<title>Pixel borders - SASS mixin to add pixelated borders to HTML elements</title>
<link rel="stylesheet" href="styles/site.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cutive+Mono|Lato:300,400">
@@ -30,7 +30,7 @@
<div class="fullwidth">
<div class="container separator">
<h2 class="m-0">A SASS mixin to add pixelated borders to HTML elements, which can be customized for different sizes, colour coding,inset borders.</h2>
<h2 class="m-0">A SASS mixin to add pixelated borders to HTML elements, which can be customized for different sizes, styles and colour coding.</h2>
</div>
</div>
@@ -84,9 +84,13 @@
<h3>Import</h3>
<p>After adding the repo as a dependency you can import it into your SASS files. Alternatively you can download the pixel-borders.scss from this repo and add it to your project folder directly.</p>
<p>After installation you can import it into your SASS files with the statement below. Alternatively you can download the pixel-borders.scss from this repo and add it to your project folder directly.</p>
<pre><code>@import "node_modules/pixel-borders/src/styles/pixel-borders.scss";</code></pre>
<pre><code>@import "pixel-borders/src/styles/pixel-borders.scss";</code></pre>
<p>You can also just import the mixins without the demo styles.</p>
<pre><code>@import "pixel-borders/src/styles/pixel-borders/pixel-borders-mixins";</code></pre>
<h4>Pixel borders mixin options</h4>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,11 +1,12 @@
// ----- Imports and variables ------
const { src, dest, watch, series, parallel, lastRun } = require('gulp');
const gulpLoadPlugins = require('gulp-load-plugins');
const $ = gulpLoadPlugins();
const browserSync = require('browser-sync');
const server = browserSync.create();
const del = require('del');
const { argv } = require('yargs');
const $ = gulpLoadPlugins();
const server = browserSync.create();
const autoprefixer = require('autoprefixer');
const port = argv.port || 9000;
@@ -16,61 +17,31 @@ const isDev = !isProd && !isTest;
const paths = {
src: 'src',
dest: 'docs',
tmp: '.tmp',
gulp: './tasks/gulp'
tmp: '.tmp'
};
// ----- Import tasks ------
function getTask(task) {
return require(`${paths.gulp}/${task}.js`)({ src, dest }, $, paths, isProd, server);
}
// ----- Tasks ------
function styles() {
return src(`${paths.src}/styles/*.scss`)
.pipe($.plumber())
.pipe($.if(!isProd, $.sourcemaps.init()))
.pipe($.sass.sync({
outputStyle: 'expanded',
precision: 10,
includePaths: ['.']
})
.on('error', $.sass.logError))
.pipe($.postcss([
autoprefixer()
]))
.pipe($.if(!isProd, $.sourcemaps.write()))
.pipe(dest(`${paths.tmp}/styles`))
.pipe(server.reload({stream: true}));
};
const { styles } = getTask('styles');
exports.styles = styles;
const { images } = getTask('images');
exports.images = images;
// ----- Build tasks ------
function compress() {
return src([`${paths.src}/*.html`, `${paths.tmp}/*/**/*.{html,css,js}`])
// .pipe($.useref({searchPath: [`${paths.tmp}`, `${paths.src}`, '.']}))
// .pipe($.if(/\.js$/, $.uglify({compress: {drop_console: true}})))
// .pipe($.if(/\.css$/, $.postcss([cssnano({safe: true, autoprefixer: false})])))
// .pipe($.if(/\.html$/, $.htmlmin({
// collapseWhitespace: true,
// minifyCSS: true,
// minifyJS: {compress: {drop_console: true}},
// processConditionalComments: true,
// removeComments: true,
// removeEmptyAttributes: true,
// removeScriptTypeAttributes: true,
// removeStyleLinkTypeAttributes: true
// })))
.pipe(dest(`${paths.dest}`));
}
function clean() {
return del([`${paths.tmp}`, `${paths.dest}`])
}
exports.clean = clean;
function measureSize() {
return src(`${paths.dest}/**/*`)
.pipe($.size({title: 'build', gzip: true}));
}
const build = series(
clean,
parallel(
series(parallel(styles), compress),
images
),
measureSize
);
// ----- Serve tasks ------
function startAppServer() {
@@ -89,23 +60,30 @@ function startAppServer() {
});
watch([
`${paths.src}/*.html`,
`${paths.src}/images/**/*`
`${paths.src}/*.html`
]).on('change', server.reload);
watch(`${paths.src}/**/*.scss`, styles);
}
let serve;
if (isDev) {
serve = series(clean, parallel(styles), startAppServer);
} else if (isProd) {
serve = series(build, startDistServer);
}
let serve = series(clean, styles, startAppServer);
exports.serve = serve;
// ----- Build tasks ------
function compress() {
return src([`${paths.src}/*.html`, `${paths.tmp}/*/**/*.{html,css,js}`])
.pipe(dest(`${paths.dest}`));
}
function clean() {
return del([`${paths.tmp}`, `${paths.dest}`])
}
exports.clean = clean;
const build = series(clean, styles, compress);
exports.build = build;
exports.dist = build;
exports.default = build;

809
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{
"name": "pixel-borders",
"description": "A SASS mixin to add pixelated borders to HTML elements.",
"version": "1.0.1",
"description": "SASS mixin to add pixelated borders to HTML elements.",
"version": "1.1.0",
"main": "src/styles/pixel-borders.scss",
"repository": {
"type": "git",
@@ -24,31 +24,28 @@
"engines": {
"node": ">=4"
},
"devDependencies": {
"autoprefixer": "^9.4.4",
"browser-sync": "^2.2.1",
"cross-env": "^5.2.0",
"del": "^3.0.0",
"gulp": "^4.0.0",
"gulp-cli": "^2.0.1",
"gulp-filter": "^5.1.0",
"gulp-if": "^2.0.2",
"gulp-load-plugins": "^1.2.4",
"gulp-plumber": "^1.0.1",
"gulp-postcss": "^8.0.0",
"gulp-sass": "^4.0.2",
"gulp-size": "^3.0.0",
"gulp-sourcemaps": "^2.2.0",
"yargs": "12.0.5"
},
"scripts": {
"start": "gulp serve",
"build": "cross-env NODE_ENV=production gulp",
"tasks": "gulp --tasks"
},
"browserslist": [
"> 1%",
"last 2 versions",
"Firefox ESR"
]
],
"devDependencies": {
"autoprefixer": "^9.4.4",
"browser-sync": "^2.26.5",
"cross-env": "^5.2.0",
"del": "^3.0.0",
"gulp": "^4.0.0",
"gulp-cli": "^2.0.1",
"gulp-if": "^2.0.2",
"gulp-load-plugins": "^1.5",
"gulp-plumber": "^1.0.1",
"gulp-postcss": "^8.0.0",
"gulp-sass": "^4.0.2",
"gulp-sourcemaps": "^2.2.0",
"yargs": "^12.0.5"
},
"scripts": {
"start": "gulp serve",
"build": "cross-env NODE_ENV=production gulp"
}
}

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Pixel borders - A SASS mixin to add pixelated borders to HTML elements</title>
<title>Pixel borders - SASS mixin to add pixelated borders to HTML elements</title>
<link rel="stylesheet" href="styles/site.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cutive+Mono|Lato:300,400">
@@ -30,7 +30,7 @@
<div class="fullwidth">
<div class="container separator">
<h2 class="m-0">A SASS mixin to add pixelated borders to HTML elements, which can be customized for different sizes, colour coding,inset borders.</h2>
<h2 class="m-0">A SASS mixin to add pixelated borders to HTML elements, which can be customized for different sizes, styles and colour coding.</h2>
</div>
</div>
@@ -84,9 +84,13 @@
<h3>Import</h3>
<p>After adding the repo as a dependency you can import it into your SASS files. Alternatively you can download the pixel-borders.scss from this repo and add it to your project folder directly.</p>
<p>After installation you can import it into your SASS files with the statement below.</p>
<pre><code>@import "node_modules/pixel-borders/src/styles/pixel-borders.scss";</code></pre>
<pre><code>@import "pixel-borders/src/styles/pixel-borders.scss";</code></pre>
<p>You can also just import the mixins without the demo styles.</p>
<pre><code>@import "pixel-borders/src/styles/pixel-borders/pixel-borders-mixins";</code></pre>
<h4>Pixel borders mixin options</h4>

View File

@@ -1,228 +1,2 @@
// Generate SVG image for pixelated corners
@function pixel-borders-image($corner-size, $color) {
$svg: '';
$svg-path: '';
$svg-size: $corner-size * 6;
$color: str-replace('' + $color, '#', '%23');
@if $corner-size == 1 {
$svg-path: 'M0 2h2v2H0zM2 0h2v2H2zM4 2h2v2H4zM2 4h2v2H2z';
} @else {
$svg-path: 'M2 2h2v2H2zM4 0h2v2H4zM10 4h2v2h-2zM0 4h2v2H0zM6 0h2v2H6zM8 2h2v2H8zM8 8h2v2H8zM6 10h2v2H6zM0 6h2v2H0zM10 6h2v2h-2zM4 10h2v2H4zM2 8h2v2H2z';
}
$svg: 'data:image/svg+xml,<svg xmlns=\'http://www.w3.org/2000/svg\' width=\'#{$svg-size}\' height=\'#{$svg-size}\'><path d=\'#{$svg-path}\' fill=\'#{$color}\' /></svg>';
@return $svg;
}
// String replace function - replace `$search` with `$replace` in `$string`
@function str-replace($string, $search, $replace: '') {
$index: str-index($string, $search);
@if $index {
@return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
}
@return $string;
}
// Pixel border
@mixin pixel-borders($corner-size: 1, $border-size: 4px, $border-color: #000, $border-inset-color: false) {
@supports (border-image-source: none) {
border-radius: ($border-size * ($corner-size + 2)) + ($corner-size * 2);
}
border-style: solid;
border-width: $border-size;
border-color: $border-color;
border-image-slice: $corner-size * 2;
border-image-width: $corner-size;
border-image-outset: 0;
border-image-source: url(pixel-borders-image($corner-size, $border-color));
@if $border-inset-color {
@include pixel-inset-border($border-size, $border-inset-color);
}
}
// Pixel inset border
@mixin pixel-inset-border($border-inset-size: 4px, $border-inset-color: #ddd, $border-inset-sides: 'bottom-right', $border-inset-color-br: false, $border-inset-color-tl: false) {
$box-shadow: '';
@if not($border-inset-color-br) {
$border-inset-color-br: $border-inset-color;
}
@if not($border-inset-color-tl) {
$border-inset-color-tl: $border-inset-color;
}
position: relative;
&::after {
content: '';
position: absolute;
z-index: 0;
bottom: 0;
right: 0;
width: 100%;
height: 100%;
@if $border-inset-sides == 'bottom-right' or $border-inset-sides == false {
$box-shadow: inset -#{$border-inset-size} -#{$border-inset-size} $border-inset-color-br;
}
@if $border-inset-sides == 'top-left' {
$box-shadow: inset $border-inset-size $border-inset-size $border-inset-color-tl;
}
@if $border-inset-sides == 'all' {
$box-shadow: inset -#{$border-inset-size} -#{$border-inset-size} $border-inset-color-br, inset $border-inset-size $border-inset-size $border-inset-color-tl;
}
box-shadow: $box-shadow;
}
}
// Pixel box - Colours for border and inset are calculated using $background-color unless $border-color is passed
@mixin pixel-box($corner-size, $border-size, $background-color, $border-color: false, $border-inset: true, $border-inset-size: false, $border-inset-color: false, $border-inset-sides: false, $border-inset-color-br: false, $border-inset-color-tl: false) {
$background-color-hover: darken($background-color, 5);
@if not($border-color) {
$border-color: darken($background-color, 20);
}
@include pixel-borders($corner-size: $corner-size, $border-size: $border-size, $border-color: $border-color);
@if $border-inset-sides == 'all' and not($border-inset-color) {
$border-inset-color-br: darken($background-color, 10);
$border-inset-color-tl: lighten($background-color, 15);
}
@if not($border-inset-color) {
$border-inset-color: darken($background-color, 10);
}
@if $border-inset-sides == 'top-left' {
$border-inset-color: lighten($background-color, 15);
}
@if $border-inset {
@include pixel-inset-border($border-inset-size: $border-size, $border-inset-color: $border-inset-color, $border-inset-sides: $border-inset-sides, $border-inset-color-br: $border-inset-color-br, $border-inset-color-tl: $border-inset-color-tl);
}
background-color: $background-color;
&:hover, &:focus {
background-color: $background-color-hover;
}
}
// ----- Demo styles -----
.pixel-borders {
position: relative;
display: inline-block;
margin: 0 15px 15px 0;
padding: 15px 20px;
background-color: #fff;
font-family: "Press Start 2P", Arial Black, Arial Bold, Arial, sans-serif;
}
// Simple examples with default styling
.pixel-borders--1 {
@include pixel-borders();
}
.pixel-borders--1-inset {
@include pixel-borders($border-inset-color: #ddd);
}
.pixel-borders--2 {
@include pixel-borders($corner-size: 2);
}
.pixel-borders--2-inset {
@include pixel-borders($corner-size: 2);
&::after {
@include pixel-borders($corner-size: 1, $border-color: #ddd);
content: '';
position: absolute;
z-index: 0;
bottom: 0;
right: 0;
border-image-width: 0 1 1 0;
width: calc(100% - 4px);
height: calc(100% - 4px);
}
}
// Examples using the pixel box mixin to colour code the elements
.pixel-box--light {
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #fff);
}
.pixel-box--primary {
color: #fff;
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #209cee);
}
.pixel-box--success {
color: #fff;
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #92cc41);
}
.pixel-box--warning {
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #f7d51d);
}
.pixel-box--error {
color: #fff;
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #e76e55);
}
// Custom examples to show flexibility of the mixins
.pixel-box--light-custom {
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #fff, $border-inset-color: #999, $border-inset-sides: 'all');
}
.pixel-box--primary-custom {
color: #fff;
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #209cee, $border-inset: false);
}
.pixel-box--success-custom {
color: #fff;
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #92cc41, $border-inset-sides: 'top-left');
}
.pixel-box--warning-custom {
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #f7d51d, $border-inset-sides: 'all');
}
.pixel-box--error-custom {
color: #fff;
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #e76e55, $border-color: #000);
}
@import "pixel-borders/pixel-borders-mixins";
@import "pixel-borders/pixel-borders";

View File

@@ -0,0 +1,133 @@
// Generate SVG image for pixelated corners
@function pixel-borders-image($corner-size, $color) {
$svg: '';
$svg-path: '';
$svg-size: $corner-size * 6;
$color: str-replace('' + $color, '#', '%23');
@if $corner-size == 1 {
$svg-path: 'M0 2h2v2H0zM2 0h2v2H2zM4 2h2v2H4zM2 4h2v2H2z';
} @else {
$svg-path: 'M2 2h2v2H2zM4 0h2v2H4zM10 4h2v2h-2zM0 4h2v2H0zM6 0h2v2H6zM8 2h2v2H8zM8 8h2v2H8zM6 10h2v2H6zM0 6h2v2H0zM10 6h2v2h-2zM4 10h2v2H4zM2 8h2v2H2z';
}
$svg: 'data:image/svg+xml,<svg xmlns=\'http://www.w3.org/2000/svg\' width=\'#{$svg-size}\' height=\'#{$svg-size}\'><path d=\'#{$svg-path}\' fill=\'#{$color}\' /></svg>';
@return $svg;
}
// String replace function - replace `$search` with `$replace` in `$string`
@function str-replace($string, $search, $replace: '') {
$index: str-index($string, $search);
@if $index {
@return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
}
@return $string;
}
// Pixel border
@mixin pixel-borders($corner-size: 1, $border-size: 4px, $border-color: #000, $border-inset-color: false) {
@supports (border-image-source: none) {
border-radius: ($border-size * ($corner-size + 2)) + ($corner-size * 2);
}
border-style: solid;
border-width: $border-size;
border-color: $border-color;
border-image-slice: $corner-size * 2;
border-image-width: $corner-size;
border-image-outset: 0;
border-image-source: url(pixel-borders-image($corner-size, $border-color));
@if $border-inset-color {
@include pixel-inset-border($border-size, $border-inset-color);
}
}
// Pixel inset border
@mixin pixel-inset-border($border-inset-size: 4px, $border-inset-color: #ddd, $border-inset-sides: 'bottom-right', $border-inset-color-br: false, $border-inset-color-tl: false) {
$box-shadow: '';
@if not($border-inset-color-br) {
$border-inset-color-br: $border-inset-color;
}
@if not($border-inset-color-tl) {
$border-inset-color-tl: $border-inset-color;
}
position: relative;
&::after {
content: '';
position: absolute;
z-index: 0;
bottom: 0;
right: 0;
width: 100%;
height: 100%;
@if $border-inset-sides == 'bottom-right' or $border-inset-sides == false {
$box-shadow: inset -#{$border-inset-size} -#{$border-inset-size} $border-inset-color-br;
}
@if $border-inset-sides == 'top-left' {
$box-shadow: inset $border-inset-size $border-inset-size $border-inset-color-tl;
}
@if $border-inset-sides == 'all' {
$box-shadow: inset -#{$border-inset-size} -#{$border-inset-size} $border-inset-color-br, inset $border-inset-size $border-inset-size $border-inset-color-tl;
}
box-shadow: $box-shadow;
}
}
// Pixel box - Colours for border and inset are calculated using $background-color unless $border-color is passed
@mixin pixel-box($corner-size, $border-size, $background-color, $border-color: false, $border-inset: true, $border-inset-size: false, $border-inset-color: false, $border-inset-sides: false, $border-inset-color-br: false, $border-inset-color-tl: false) {
$background-color-hover: darken($background-color, 5);
@if not($border-color) {
$border-color: darken($background-color, 20);
}
@include pixel-borders($corner-size: $corner-size, $border-size: $border-size, $border-color: $border-color);
@if $border-inset-sides == 'all' and not($border-inset-color) {
$border-inset-color-br: darken($background-color, 10);
$border-inset-color-tl: lighten($background-color, 15);
}
@if not($border-inset-color) {
$border-inset-color: darken($background-color, 10);
}
@if $border-inset-sides == 'top-left' {
$border-inset-color: lighten($background-color, 15);
}
@if $border-inset {
@include pixel-inset-border($border-inset-size: $border-size, $border-inset-color: $border-inset-color, $border-inset-sides: $border-inset-sides, $border-inset-color-br: $border-inset-color-br, $border-inset-color-tl: $border-inset-color-tl);
}
background-color: $background-color;
&:hover, &:focus {
background-color: $background-color-hover;
}
}

View File

@@ -0,0 +1,93 @@
// ----- Border styles -----
.pixel-borders {
position: relative;
display: inline-block;
margin: 0 15px 15px 0;
padding: 15px 20px;
background-color: #fff;
font-family: "Press Start 2P", Arial Black, Arial Bold, Arial, sans-serif;
}
// One pixel borders
.pixel-borders--1 {
@include pixel-borders();
}
.pixel-borders--1-inset {
@include pixel-borders($border-inset-color: #ddd);
}
// Two pixel borders
.pixel-borders--2 {
@include pixel-borders($corner-size: 2);
}
.pixel-borders--2-inset {
@include pixel-borders($corner-size: 2);
&::after {
@include pixel-borders($corner-size: 1, $border-color: #ddd);
content: '';
position: absolute;
z-index: 0;
bottom: 0;
right: 0;
border-image-width: 0 1 1 0;
width: calc(100% - 4px);
height: calc(100% - 4px);
}
}
// Examples using the pixel box mixin to colour code the elements
.pixel-box--light {
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #fff);
}
.pixel-box--primary {
color: #fff;
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #209cee);
}
.pixel-box--success {
color: #fff;
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #92cc41);
}
.pixel-box--warning {
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #f7d51d);
}
.pixel-box--error {
color: #fff;
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #e76e55);
}
// Custom examples to show flexibility of the mixins
.pixel-box--light-custom {
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #fff, $border-inset-color: #999, $border-inset-sides: 'all');
}
.pixel-box--primary-custom {
color: #fff;
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #209cee, $border-inset: false);
}
.pixel-box--success-custom {
color: #fff;
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #92cc41, $border-inset-sides: 'top-left');
}
.pixel-box--warning-custom {
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #f7d51d, $border-inset-sides: 'all');
}
.pixel-box--error-custom {
color: #fff;
@include pixel-box($corner-size: 1, $border-size: 4px, $background-color: #e76e55, $border-color: #000);
}

View File

@@ -1,222 +1,2 @@
// ----- Demo site styles -----
@import "normalize";
// ----- Base styles -----
*,
*:before,
*:after {
box-sizing: border-box;
}
body {
font-family: "Lato", -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #333;
background-color: #fff;
}
a {
color: #1976D2;
text-decoration: none;
transition: color 0.3s;
&:hover, &:focus {
color: #2196F3;
}
}
// Type
h1, h2, h3, h4, h5, h6 {
font-weight: 300;
small {
font-size: 60%;
}
}
h1, h2 {
margin: 0 0 1rem 0;
}
h3, h4, h5, h6 {
margin: 0 0 .5rem 0;
}
h1 { font-size: 2.5rem; }
h2 { font-size: 2rem; }
h3 { font-size: 1.75rem; }
h4 { font-size: 1.5rem; }
h5 { font-size: 1.25rem; }
h6 { font-size: 1rem; }
p {
margin: 0 0 1rem 0;
}
strong, th {
font-weight: 800;
}
pre, code {
font-family: 'Cutive Mono', monospace;
background-color: #f3f3f3;
}
pre {
display: block;
padding: .75rem 1rem;
margin: 0 0 1.5rem 0;
overflow: auto;
font-size: 1rem;
word-break: break-all;
word-wrap: break-word;
border: 1px solid #bbb;
border-radius: 4px;
}
.table {
width: 100%;
margin: 0 0 1rem 0;
border-collapse: collapse;
th, td {
padding: .25rem .5rem;
text-align: left;
vertical-align: top;
border: 1px solid #ddd;
}
}
// ----- Layout -----
.fullwidth {
.container {
width: 100%;
padding-top: 2rem;
padding-bottom: 2rem;
}
}
.fullwidth--sm {
.container {
padding-top: 1rem;
padding-bottom: 1rem;
}
}
.container {
width: 100%;
max-width: 1140px;
margin: 0 auto;
padding-left: 1rem;
padding-right: 1rem;
}
.subsection {
margin: 0 0 2rem 0;
}
.separator {
border-bottom: 1px solid #ddd;
}
// ----- Header and footer -----
.header {
position: sticky;
top: 0;
z-index: 100;
width: 100%;
padding: .5rem 0;
color: #fff;
background-color: #1976D2;
box-shadow: 0 0 6px 6px rgba(0,0,0,0.1);
@media (min-width: 768px) {
padding: 1rem 0;
}
.container {
display: flex;
@media (max-width: 767px) {
flex-flow: column;
}
@media (min-width: 768px) {
align-items: center;
}
}
}
.logo-text {
margin: 0;
@media (max-width: 767px) {
font-size: 1.75rem;
}
}
.header--links {
.btn-demo {
margin: .5rem 0;
&:last-child {
margin-left: .5rem;
}
}
@media (min-width: 768px) {
margin-left: auto;
}
}
.footer {
text-align: center;
}
// ----- Buttons -----
.btn-demo {
display: inline-block;
text-align: center;
vertical-align: middle;
cursor: pointer;
border: 1px solid #bbb;
padding: 4px 12px 6px 12px;
font-size: 18px;
background-color: #fff;
border-radius: 4px;
transition: background-color .3s, color .3s;
&:hover, &:active {
background-color: #f3f3f3;
}
}
.btn-demo--white {
color: #fff;
border-color: #fff;
background-color: transparent;
}
// ----- Utilities -----
.m-0 {
margin: 0;
}
@import "site/normalize";
@import "site/site";

217
src/styles/site/_site.scss Normal file
View File

@@ -0,0 +1,217 @@
// ----- Base styles -----
*,
*:before,
*:after {
box-sizing: border-box;
}
body {
font-family: "Lato", -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #333;
background-color: #fff;
}
a {
color: #1976D2;
text-decoration: none;
transition: color 0.3s;
&:hover, &:focus {
color: #2196F3;
}
}
// Type
h1, h2, h3, h4, h5, h6 {
font-weight: 300;
small {
font-size: 60%;
}
}
h1, h2 {
margin: 0 0 1rem 0;
}
h3, h4, h5, h6 {
margin: 0 0 .5rem 0;
}
h1 { font-size: 2.5rem; }
h2 { font-size: 2rem; }
h3 { font-size: 1.75rem; }
h4 { font-size: 1.5rem; }
h5 { font-size: 1.25rem; }
h6 { font-size: 1rem; }
p {
margin: 0 0 1rem 0;
}
strong, th {
font-weight: 800;
}
pre, code {
font-family: 'Cutive Mono', monospace;
background-color: #f3f3f3;
}
pre {
display: block;
padding: .75rem 1rem;
margin: 0 0 1.5rem 0;
overflow: auto;
font-size: 1rem;
word-break: break-all;
word-wrap: break-word;
border: 1px solid #bbb;
border-radius: 4px;
}
.table {
width: 100%;
margin: 0 0 1rem 0;
border-collapse: collapse;
th, td {
padding: .25rem .5rem;
text-align: left;
vertical-align: top;
border: 1px solid #ddd;
}
}
// ----- Layout -----
.fullwidth {
.container {
width: 100%;
padding-top: 2rem;
padding-bottom: 2rem;
}
}
.fullwidth--sm {
.container {
padding-top: 1rem;
padding-bottom: 1rem;
}
}
.container {
width: 100%;
max-width: 1140px;
margin: 0 auto;
padding-left: 1rem;
padding-right: 1rem;
}
.subsection {
margin: 0 0 2rem 0;
}
.separator {
border-bottom: 1px solid #ddd;
}
// ----- Header and footer -----
.header {
position: sticky;
top: 0;
z-index: 100;
width: 100%;
padding: .5rem 0;
color: #fff;
background-color: #1976D2;
box-shadow: 0 0 6px 6px rgba(0,0,0,0.1);
@media (min-width: 768px) {
padding: 1rem 0;
}
.container {
display: flex;
@media (max-width: 767px) {
flex-flow: column;
}
@media (min-width: 768px) {
align-items: center;
}
}
}
.logo-text {
margin: 0;
@media (max-width: 767px) {
font-size: 1.75rem;
}
}
.header--links {
.btn-demo {
margin: .5rem 0;
&:last-child {
margin-left: .5rem;
}
}
@media (min-width: 768px) {
margin-left: auto;
}
}
.footer {
text-align: center;
}
// ----- Buttons -----
.btn-demo {
display: inline-block;
text-align: center;
vertical-align: middle;
cursor: pointer;
border: 1px solid #bbb;
padding: 4px 12px 6px 12px;
font-size: 18px;
background-color: #fff;
border-radius: 4px;
transition: background-color .3s, color .3s;
&:hover, &:active {
background-color: #f3f3f3;
}
}
.btn-demo--white {
color: #fff;
border-color: #fff;
background-color: transparent;
}
// ----- Utilities -----
.m-0 {
margin: 0;
}

View File

@@ -1,18 +0,0 @@
// Task type: Images: File copying, no processing, Icons: Processing nunjucks and data.json into HTML
// Src: /src
// Dest: Images: /dist, Icons: /tmp
const { lastRun } = require('gulp');
module.exports = function({ src, dest }, $, paths, isProd, server) {
function images() {
return src([`${paths.src}/images/**/*`], { since: lastRun(images) })
.pipe(dest(`${paths.dest}/images`));
};
return {
images
};
};

View File

@@ -1,30 +0,0 @@
// Task type: Processing sass
// Src: /src
// Dest: /tmp
const autoprefixer = require('autoprefixer');
module.exports = function({ src, dest }, $, paths, isProd, server) {
function styles() {
return src(`${paths.src}/styles/*.scss`)
.pipe($.plumber())
.pipe($.if(!isProd, $.sourcemaps.init()))
.pipe($.sass.sync({
outputStyle: 'expanded',
precision: 10,
includePaths: ['.']
})
.on('error', $.sass.logError))
.pipe($.postcss([
autoprefixer()
]))
.pipe($.if(!isProd, $.sourcemaps.write()))
.pipe(dest(`${paths.tmp}/styles`))
.pipe(server.reload({stream: true}));
};
return {
styles
};
};