From c2ee11f4070eef69ea37ce042551c0df6034d64d Mon Sep 17 00:00:00 2001 From: Raphael Goetter Date: Sun, 4 May 2014 15:48:00 +0200 Subject: [PATCH] Sass version ! --- bower.json | 2 +- sass/00-config.scss | 76 +++++++++ sass/01-base.scss | 373 ++++++++++++++++++++++++++++++++++++++++++ sass/02-grids.scss | 137 ++++++++++++++++ sass/03-tables.scss | 35 ++++ sass/04-forms.scss | 82 ++++++++++ sass/05-icons.scss | 139 ++++++++++++++++ sass/06-rwd.scss | 181 ++++++++++++++++++++ sass/07-flexbox.scss | 24 +++ sass/08-print.scss | 70 ++++++++ sass/09-booleans.scss | 35 ++++ sass/10-gmaps.scss | 19 +++ sass/11-ie.scss | 102 ++++++++++++ sass/12-styling.scss | 104 ++++++++++++ sass/knacksass.zip | Bin 0 -> 11054 bytes sass/knacss.scss | 26 +++ 16 files changed, 1404 insertions(+), 1 deletion(-) create mode 100644 sass/00-config.scss create mode 100644 sass/01-base.scss create mode 100644 sass/02-grids.scss create mode 100644 sass/03-tables.scss create mode 100644 sass/04-forms.scss create mode 100644 sass/05-icons.scss create mode 100644 sass/06-rwd.scss create mode 100644 sass/07-flexbox.scss create mode 100644 sass/08-print.scss create mode 100644 sass/09-booleans.scss create mode 100644 sass/10-gmaps.scss create mode 100644 sass/11-ie.scss create mode 100644 sass/12-styling.scss create mode 100644 sass/knacksass.zip create mode 100644 sass/knacss.scss diff --git a/bower.json b/bower.json index 71d32cc..2a85863 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "KNACSS", - "version": "3.0.0", + "version": "3.0.1", "homepage": "http://www.knacss.com/", "authors": [ "Raphaël GOETTER, Alsacreations" diff --git a/sass/00-config.scss b/sass/00-config.scss new file mode 100644 index 0000000..6032595 --- /dev/null +++ b/sass/00-config.scss @@ -0,0 +1,76 @@ +// Config file : variables, mixins, ... + + +// booleans +$enable-ie678 : true; // "true" to activate IE6/IE7/IE8 support +$enable-styling : true; // "true" to design basic elements like code, mark, blockquotes, etc. +$enable-gmaps : true; // if google maps is used +$enable-skip-links : true; // "true" to design skip links for accessibility concerns +$enable-hyphens : true; // activate automatic hyphens on small screens +$enable-helpers-width : true; // decide whether or not you need width helpers +$enable-helpers-spacing : true; // decide whether or not you need spacing helpers + +// font sizes +$base-font-size : 14px; // if "14px" then 1em = 14px +$line-height : 1.5; // equiv line-height 1.5 +$h1-size : 3.2rem; // equiv "32px" +$h2-size : 2.8rem; // equiv "28px" +$h3-size : 2.4rem; // equiv "24px" +$h4-size : 2.0rem; // equiv "20px" +$h5-size : 1.8rem; // equiv "18px" +$h6-size : 1.6rem; // equiv "16px" + +// font stacks +$font-stack-common : Helvetica, Arial, sans-serif; // common font +$font-stack-monospace : Consolas, 'DejaVu Sans Mono', Courier, monospace; // monospace font +$font-stack-universal : FreeSans, Arimo, "Droid Sans", Helvetica, Arial, sans-serif; // universal stack + +// font colors +$base-color : #000; // text color on body +$base-color-link : #333; // primary links color; +$base-color-link-hover : #000; // primary hovered/focused links color; + +// backgrounds +$base-background : #fff; // body background color + +// spacings +$tiny-value : 0.5em; // tiny value for margins / paddings +$small-value : 1em; // small value for margins / paddings +$medium-value : 2em; // medium value for margins / paddings +$large-value : 4em; // large value for margins / paddings +$extra-large-value : 6em; // extra large value for margins / paddings +$ultra-large-value : 10em; // ultra large value for margins / paddings + +// breakpoints +$tiny-screen : 320px; // tiny screens media query +$small-screen : 480px; // small screens media query +$medium-screen : 768px; // small screens media query +$large-screen : 1024px; // large screens media query +$extra-large-screen : 1280px; // extra large screens media query +$ultra-large-screen : 1600px; // ultra large screens media query + +// misc +$gutter : 20px; // gutter value (%, px, em, rem) for grid layouts + + +// Sass mixins : don't touch or you'll be banned ;) +// px to em/rem + +@mixin rem($size) { + @if unitless($size) { + font-size: ($size * 1rem) / 1rem * $base-font-size; + font-size: $size * 1rem; + } + @else { + @warn "Please make sure `$size` is unitless." + } +} +@mixin em($size) { + @if unitless($size) { + $bf: $base-font-size / 1px; + font-size: $size / $bf * 1em; + } + @else { + @warn "Please make sure `$size` is unitless." + } +} \ No newline at end of file diff --git a/sass/01-base.scss b/sass/01-base.scss new file mode 100644 index 0000000..9cff210 --- /dev/null +++ b/sass/01-base.scss @@ -0,0 +1,373 @@ +@import "00-config"; +/*! +* www.KNACSS.com V3.0.0 (2014-05) @author: Raphael Goetter, Alsacreations (with help from Hugo Giraudel) +* Licence WTFPL http://www.wtfpl.net/ +*/ + +/* ----------------------------- */ +/* == soft reset */ +/* ----------------------------- */ + +/* switching box model for all elements */ +* { + box-sizing: border-box; +} + +/* soft reset */ +html, +body { + margin: 0; + padding: 0; +} +ul, +ol { + padding-left: 2em; +} +ul.unstyled { + list-style: none; +} +img { + height: auto; + vertical-align: middle; + border: 0; +} +audio, +canvas, +video { + display: inline-block; +} +svg:not(:root) { + overflow: hidden; +} + +/* ----------------------------- */ +/* == typography */ +/* ----------------------------- */ + +/* base font-size corresponds to "10px" and is adapted to rem unit */ +html { + font-size: 62.5%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + text-size-adjust: 100%; +} +body { + background-color: $base-background; + color: $base-color; + font-family: $font-stack-common; + font-size: ($base-font-size / 10px) + em; + line-height: $line-height; +} + +/* font-sizing for content */ +p, +.p-like, +ul, +ol, +dl, +blockquote, +pre, +td, +th, +label, +textarea, +caption, +details, +figure, +hgroup { + margin-top: 0.75em; + margin-bottom: 0; + line-height: $line-height; +} +h1, .h1-like { + font-size: $h1-size; +} +h2, .h2-like { + font-size: $h2-size; +} +h3, .h3-like { + font-size: $h3-size; +} +h4, .h4-like { + font-size: $h4-size; +} +h5, .h5-like { + font-size: $h5-size; +} +h6, .h6-like { + font-size: $h6-size; +} + +/* alternate font-sizing */ +.smaller { + @include em($base-font-size / 1px - 4); +} +.small { + @include em($base-font-size / 1px - 2); +} +.big { + @include em($base-font-size / 1px + 2); +} +.bigger { + @include em($base-font-size / 1px + 4); +} +.biggest { + @include em($base-font-size / 1px + 6); +} + +code, +pre, +samp, +kbd { + white-space: pre-line; /* IE fix */ + white-space: pre-wrap; + font-family: $font-stack-monospace; + line-height: normal; +} +em, +.em, +address, +cite, +dfn, +i, +var { + font-style: italic; +} +.no-em { + font-style: normal; +} +strong, +.strong { + font-weight: bold; +} +.no-strong { + font-weight: normal; +} +small, +sub, +sup { + font-size: smaller; +} + +/* ----------------------------- */ +/* == hiding content */ +/* ----------------------------- */ + +.visually-hidden { + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); + overflow: hidden; + height: 1px; width: 1px; +} +body > script { + display: none !important; +} +@media print { + .no-print { + display: none; + } +} +@media (max-width: $small-screen) { + .no-small-screen { + display: none; + } +} +@media (min-width: $large-screen) { + .no-large-screen { + display: none; + } +} +/* ----------------------------- */ +/* == browsers consistency */ +/* ----------------------------- */ + +/* avoid top margins on first content element */ +p, .p-like, ul, ol, dl, +blockquote, pre, +h1, h2, h3, h4, h5, h6 { + &:first-child { + margin-top: 0; + } +} + +/* avoid margins on nested elements */ +li p, +li .p-like, +li ul, +li ol { + margin-top: 0; + margin-bottom: 0; +} + +/* max values */ +img, table, td, blockquote, code, pre, textarea, input, video { + max-width: 100%; +} + +/* margin-bottom on tables */ +table { margin-bottom: $medium-value; } + + +/* ----------------------------- */ +/* ==layout and modules */ +/* ----------------------------- */ + +/* float layout */ +/* module, gains superpower "BFC" Block Formating Context */ +.mod { + overflow: hidden; +} + +/* blocks that needs to be placed under floats */ +.clear, +.line, +.row { + clear: both; +} + +/* blocks that must contain floats */ +.clearfix, +.line { + &:after { + content: ""; + display: table; + clear: both; + } +} + +/* table layout */ +.row { + display: table; + table-layout: fixed; + width: 100%; +} +.row > *, +.col { + display: table-cell; + vertical-align: top; +} + +/* inline-block */ +.inbl { + display: inline-block; + vertical-align: top; +} + + +/* alignments (blocks and inline) */ +/* ------------------------------ */ + +/* left (or starting) elements */ +.left, +.start { + float: left; +} +img.left, +img.start { + margin-right: $small-value; +} +/* right (or ending) elements */ +.right, +.end { + float: right; +} +img.right, +img.end { + margin-left: $small-value; +} +img.left, img.right, +img.start, img.end { + margin-bottom: $tiny-value; +} +.center { margin-left: auto; margin-right: auto; } +.txtleft { text-align: left; } +.txtright { text-align: right; } +.txtcenter { text-align: center; } + + +// width helpers boolean +@if $enable-helpers-width == true { + /* blocks widths (percentage and pixels) */ + .w10 { width: 10%; } + .w20 { width: 20%; } + .w25 { width: 25%; } + .w30 { width: 30%; } + .w33 { width: 33.3333%; } + .w40 { width: 40%; } + .w50 { width: 50%; } + .w60 { width: 60%; } + .w66 { width: 66.6666%; } + .w70 { width: 70%; } + .w75 { width: 75%; } + .w80 { width: 80%; } + .w90 { width: 90%; } + .w100 { width: 100%; } + + .w50p { width: 50px; } + .w100p { width: 100px; } + .w150p { width: 150px; } + .w200p { width: 200px; } + .w300p { width: 300px; } + .w400p { width: 400px; } + .w500p { width: 500px; } + .w600p { width: 600px; } + .w700p { width: 700px; } + .w800p { width: 800px; } + .w960p { width: 960px; } + .mw960p { max-width: 960px; } + .w1140p { width: 1140px; } + .mw1140p { max-width: 1140px; } + .wauto { width: auto; } +} + + +// spacing helpers boolean +@if $enable-helpers-spacing == true { + /* spacing helpers + p,m = padding,margin + a,t,r,b,l = all,top,right,bottom,left + s,m,l,n = small, medium, large, none + */ + .man { margin: 0; } + .pan { padding: 0; } + .mas { margin: $small-value; } + .mam { margin: $medium-value; } + .mal { margin: $large-value; } + .pas { padding: $small-value; } + .pam { padding: $medium-value; } + .pal { padding: $large-value; } + + .mtn { margin-top: 0; } + .mts { margin-top: $small-value; } + .mtm { margin-top: $medium-value; } + .mtl { margin-top: $large-value; } + .mrn { margin-right: 0; } + .mrs { margin-right: $small-value; } + .mrm { margin-right: $medium-value; } + .mrl { margin-right: $large-value; } + .mbn { margin-bottom: 0; } + .mbs { margin-bottom: $small-value; } + .mbm { margin-bottom: $medium-value; } + .mbl { margin-bottom: $large-value; } + .mln { margin-left: 0; } + .mls { margin-left: $small-value; } + .mlm { margin-left: $medium-value; } + .mll { margin-left: $large-value; } + + .ptn { padding-top: 0; } + .pts { padding-top: $small-value; } + .ptm { padding-top: $medium-value; } + .ptl { padding-top: $large-value; } + .prn { padding-right: 0; } + .prs { padding-right: $small-value; } + .prm { padding-right: $medium-value; } + .prl { padding-right: $large-value; } + .pbn { padding-bottom: 0; } + .pbs { padding-bottom: $small-value; } + .pbm { padding-bottom: $medium-value; } + .pbl { padding-bottom: $large-value; } + .pln { padding-left: 0; } + .pls { padding-left: $small-value; } + .plm { padding-left: $medium-value; } + .pll { padding-left: $large-value; } +} diff --git a/sass/02-grids.scss b/sass/02-grids.scss new file mode 100644 index 0000000..cc024ee --- /dev/null +++ b/sass/02-grids.scss @@ -0,0 +1,137 @@ +@import "00-config"; + +/* ---------------------------------- */ +/* ==classic grids */ +/* .. use it when gutter size matters */ +/* ---------------------------------- */ + +/* grids inspired from SUIT https://github.com/suitcss/suit */ + +.grid { /* overall container of grids */ + overflow: hidden; +} +.grid > * { /* global styles for direct child ex. .grid3 */ + display: block; + padding: 0; + margin-left: -$gutter; /* gutter value */ + text-align: left; +} +.grid > * > * { /* global styles for each "cell" */ + display: inline-block; + padding-left: $gutter; /* gutter value */ + margin-left: 0; + vertical-align: top; +} +/* whitespace fixing for modern browsers including IE9+ */ +:root .grid { + font-size: 0; +} +:root .grid > * > * { + font-size: $base-font-size; /* fallback for Opera Mini */ + font-size: ($base-font-size / 10px) + rem; +} +/* Opera hack */ +.opera:-o-prefocus, +.grid > * { + word-spacing: -0.43em; +} +.grid2 > * {width: 50%;} +.grid3 > * {width: 33.333%;} +.grid4 > * {width: 25%;} +.grid5 > * {width: 20%;} +.grid6 > * {width: 16.667%;} +.grid8 > * {width: 12.5%;} +.grid10 > * {width: 10%;} +.grid12 > * {width: 8.333%;} + +/* unequal grids (1-2, 2-1, 1-3 and 3-1) for 2 blocks */ +.grid2-1 > *:first-child, +.grid1-2 > * + * { width: 66.666%; } +.grid1-2 > *:first-child, +.grid2-1 > * + * { width: 33.333%; } +.grid1-3 > *:first-child, +.grid3-1 > * + * { width: 25%; } +.grid3-1 > *:first-child, +.grid1-3 > * + * { width: 75%; } + +/* Responsiv-o-matic */ +@media (max-width: $large-screen) { + .grid5 > *, + .grid6 > *, + .grid8 > *, + .grid10 > *, + .grid12 > * {width: 33.333%} +} +@media (max-width: $small-screen) { + .grid3 > *, + .grid4 > *, + .grid5 > *, + .grid6 > *, + .grid8 > *, + .grid10 > *, + .grid12 > * {width: 50%} +} +@media (max-width: $tiny-screen) { + .grid > * > * {width: 100% !important} +} + +/* ---------------------------------- */ +/* ==autogrids */ +/* .. to automatically justify blocs */ +/* ---------------------------------- */ + +/* Demo : http://codepen.io/raphaelgoetter/pen/Kqehf */ + +[class*="autogrid"] { /* container of autogrids */ + text-align: justify; +} +[class*="autogrid"]:after { + content: ""; + display: inline-block; + width: 100%; +} +[class*="autogrid"] > * { + display: inline-block; + vertical-align: top; + text-align: left; +} +/* whitespace fixing for modern browsers including IE9+ */ +:root [class*="autogrid"] { + font-size: 0; +} +:root [class*="autogrid"] > * { + font-size: $base-font-size; /* fallback for Opera Mini */ + font-size: ($base-font-size / 10px) + rem; +} +/* Opera hack */ +[class*="autogrid"]:-o-prefocus { + word-spacing: -0.43em; +} +.autogrid2 > * {width: 49%} +.autogrid3 > * {width: 32%} +.autogrid4 > * {width: 23.6%} +.autogrid5 > * {width: 19%} +.autogrid6 > * {width: 15%} +.autogrid8 > * {width: 10.8%} +.autogrid10 > * {width: 9%} +.autogrid12 > * {width: 6.4%} + +@media (max-width: $large-screen) { + .autogrid5 > *, + .autogrid6 > *, + .autogrid8 > *, + .autogrid10 > *, + .autogrid12 > * {width: 32%} +} + +@media (max-width: $small-screen) { + .autogrid5 > *, + .autogrid6 > *, + .autogrid8 > *, + .autogrid10 > *, + .autogrid12 > * {width: 49%} +} + +@media (max-width: $tiny-screen) { + [class*="autogrid"] > * {width: 100%} +} \ No newline at end of file diff --git a/sass/03-tables.scss b/sass/03-tables.scss new file mode 100644 index 0000000..56f27c0 --- /dev/null +++ b/sass/03-tables.scss @@ -0,0 +1,35 @@ +@import "00-config"; +/* ----------------------------- */ +/* ==tables */ +/* ----------------------------- */ + +table, +.table { + width: 100%; + max-width : 100%; + table-layout: fixed; + border-collapse: collapse; + vertical-align: top; + border: 1px solid #ccc; +} +.table { + display: table; +} +table#recaptcha_table, +table.table-auto { + table-layout:auto; +} +caption { + padding: $small-value; + color: #555; + font-style: italic; +} +td, +th { + padding: 0.3em 0.8em; + border: 1px #aaa dotted; + vertical-align: top; + min-width: $medium-value; + cursor: default; + text-align: left; +} \ No newline at end of file diff --git a/sass/04-forms.scss b/sass/04-forms.scss new file mode 100644 index 0000000..0728b0c --- /dev/null +++ b/sass/04-forms.scss @@ -0,0 +1,82 @@ +@import "00-config"; +/* ----------------------------- */ +/* ==forms */ +/* ----------------------------- */ + +/* thanks to HTML5boilerplate, +* github.com/nathansmith/formalize +* and www.sitepen.com +*/ + +/* buttons */ +.btn { + display: inline-block; +} + +/* forms items */ +form, +fieldset { + border: none; +} +input, +button, +select, +label, +.btn { + vertical-align: middle; + font-family: inherit; + font-size: inherit; +} +label { + display: inline-block; + vertical-align: middle; + cursor: pointer; +} +legend { + border: 0; + white-space: normal; +} +textarea { + min-height: 5em; + vertical-align: top; + font-family: inherit; + font-size: inherit; + resize: vertical; +} +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; /* clickable input types in iOS */ +} +input[type="search"] { + -webkit-appearance: textfield; +} + +/* if select styling bugs on WebKit */ +/* select { -webkit-appearance: none; } */ + +/* 'x' appears on right of search input when text is entered. This removes it */ +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-results-button, +input[type="search"]::-webkit-search-results-decoration { + display: none; +} +::-webkit-input-placeholder { + color: #777; +} +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #777; +} + +/* Removes inner padding and border in FF3+ */ +button::-moz-focus-inner, +input[type='button']::-moz-focus-inner, +input[type='reset']::-moz-focus-inner, +input[type='submit']::-moz-focus-inner { + border: 0; + padding: 0; +} \ No newline at end of file diff --git a/sass/05-icons.scss b/sass/05-icons.scss new file mode 100644 index 0000000..bdd4126 --- /dev/null +++ b/sass/05-icons.scss @@ -0,0 +1,139 @@ +@import "00-config"; +/* ----------------------------- */ +/* ==icons and bullets */ +/* ----------------------------- */ + +.icon {display: inline-block;} + +.icon:before, +.icon.after:after { + content: ""; + display: inline-block; + vertical-align: middle; + position: relative; top: -0.1em; + margin: 0 0.3em 0 0; + font: 1.4em/1 sans-serif; + color: #000; + text-shadow: 1px 1px 0 rgba(0,0,0,.1); + speak: none; +} + +@media (min-device-width: $small-screen) { + .icon:before, + .icon.after:after { + font: 1em/0.6 sans-serif; + -webkit-transform: rotateZ(0.05deg); + } +} + +.icon.after:after { + margin: 0 0 0 8px; +} +.icon.after:before { + content: "" !important +} +.icon-rate:before, +.icon-rate.after:after { + content: "\2605"; +} +.icon-unrate:before, +.icon-unrate.after:after{ + content: "\2606"; +} +.icon-check:before, +.icon-check.after:after{ + content: "\2713"; +} +.icon-uncheck:before, +.icon-uncheck.after:after{ + content: "\2717"; +} +.icon-cloud:before, +.icon-cloud.after:after { + content: "\2601"; +} +.icon-dl:before, +.icon-dl.after:after { + content: "\21E3"; + font-weight: bold; +} +.icon-cross:before, +.icon-cross.after:after { + content: "\2716"; + font-weight: bold; +} +.icon-arrow1:before, +.icon-arrow1.after:after { + content: "\2192"; + position: relative; + top: -0.15em; +} +.icon-arrow2:before, +.icon-arrow2.after:after { + content: "\279E"; +} +.icon-arrow3:before, +.icon-arrow3.after:after { + content: "\279A"; +} +.icon-bracket1:before, +.icon-bracket1.after:after { + content: "\2039"; + font-weight: bold; + font-size: 1.6em; + position: relative; + top: -0.15em; +} +.icon-bracket2:before, +.icon-bracket2.after:after { + content: "\203A"; + font-weight: bold; + font-size: 1.6em; + position: relative; + top: -0.15em; +} +.icon-up:before, +.icon-up.after:after { + content: "\25B2"; +} +.icon-down:before, +.icon-down.after:after { + content: "\25BC"; +} +.icon-bull:before, +.icon-bull.after:after { + content: "\2022"; + font-size: 1.2em; + top: -0.05em; +} +.icon-bull2:before, +.icon-bull2.after:after { + content: "\25E6"; + top: -0.05em; +} +.icon-bull3:before, +.icon-bull3.after:after{ + content: "\2023"; + font-size: 1.6em; + top: -0.05em; +} +.icon-nav:before, +.icon-nav.after:after { + content: "\2261"; + font-weight: bold; +} +.icon-losange:before, +.icon-losange.after:after { + content: "\25C6"; +} +.icon-asteri:before, +.icon-asteri.after:after { + content: "\2731"; + font-weight: bold; +} +.icon-mail:before, +.icon-mail.after:after { + content: "\2709"; + font-size: 1.6em; + top: -.05em; +} diff --git a/sass/06-rwd.scss b/sass/06-rwd.scss new file mode 100644 index 0000000..90c4a19 --- /dev/null +++ b/sass/06-rwd.scss @@ -0,0 +1,181 @@ +@import "00-config"; +/* ----------------------------- */ +/* ==desktop and HD devices */ +/* ----------------------------- */ + +@media (min-width: $small-screen) { +/* here go rules for big resources and big screens like: background-images, font-faces, etc. */ +} +@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx) { +/* Style adjustments for retina devices */ +} + +/* ---------------------------------- */ +/* ==Responsive large / small / tiny */ +/* ---------------------------------- */ + +@media (min-width: $large-screen) { + + /* layouts for large screens */ + .large-hidden { display: none !important; } + .large-visible { display: block !important; } + .large-no-float {float: none; } + .large-inbl { + display: inline-block; + float: none; + vertical-align: top; + } + .large-row { + display: table; + table-layout: fixed; + width: 100% !important; + } + .large-col { + display: table-cell; + vertical-align: top; + } + + /* widths for large screens */ + .large-w25 { width: 25% !important; } + .large-w33 { width: 33.3333% !important; } + .large-w50 { width: 50% !important; } + .large-w66 { width: 66.6666% !important; } + .large-w75 { width: 75% !important; } + .large-w100, + .large-wauto { + display: block !important; + float: none !important; + clear: none !important; + width: auto !important; + margin-left: 0 !important; + margin-right: 0 !important; + border: 0; + } + + /* margins for large screens */ + .large-man { margin: 0 !important; } +} + +@media (max-width: $small-screen) { + + /* quick reset in small resolution and less */ + .w600p, + .w700p, + .w800p, + .w960p, + .mw960p { + width: auto; + float: none; + } + + /* layouts for small screens */ + .small-hidden { display: none !important; } + .small-visible { display: block !important; } + .small-no-float {float: none; } + .small-inbl { + display: inline-block; + float: none; + vertical-align: top; + } + .small-row { + display: table !important; + table-layout: fixed !important; + width: 100% !important; + } + .small-col { + display: table-cell !important; + vertical-align: top !important; + } + + /* widths for small screens */ + .small-w25 { width: 25% !important; } + .small-w33 { width: 33.3333% !important; } + .small-w50 { width: 50% !important; } + .small-w66 { width: 66.6666% !important; } + .small-w75 { width: 75% !important; } + .small-w100, + .small-wauto { + display: block !important; + float: none !important; + clear: none !important; + width: auto !important; + margin-left: 0 !important; + margin-right: 0 !important; + border: 0; + } + /* margins for small screens */ + .small-man { margin: 0 !important; } + .small-pan { padding: 0 !important; } +} + +@media (max-width: $tiny-screen) { + + /* quick tiny resolution reset */ + .mod, + .col, + fieldset { + display: block !important; + float: none !important; + clear: none !important; + width: auto !important; + margin-left: 0 !important; + margin-right: 0 !important; + border: 0; + } + .w300p, + .w400p, + .w500p { + width: auto; + float: none; + } + .row { + display: block !important; + width: 100% !important; + } + + /* layouts for tiny screens */ + .tiny-hidden { display: none !important; } + .tiny-visible { display: block !important; } + .tiny-no-float {float: none;} + .tiny-inbl { + display: inline-block; + float: none; + vertical-align: top; + } + .tiny-row { + display: table !important; + table-layout: fixed !important; + width: 100% !important; + } + .tiny-col { + display: table-cell !important; + vertical-align: top !important; + } + th, + td { + display: block !important; + width: auto !important; + text-align: left !important; + } + thead { display: none; } + + /* widths for tiny screens */ + .tiny-w25 { width: 25% !important; } + .tiny-w33 { width: 33.3333% !important; } + .tiny-w50 { width: 50% !important; } + .tiny-w66 { width: 66.6666% !important; } + .tiny-w75 { width: 75% !important; } + .tiny-w100, + .tiny-wauto { + display: block !important; + float: none !important; + clear: none !important; + width: auto !important; + margin-left: 0 !important; + margin-right: 0 !important; + border: 0; + } + /* margins for tiny screens */ + .tiny-man { margin: 0 !important; } + .tiny-pan { padding: 0 !important; } +} diff --git a/sass/07-flexbox.scss b/sass/07-flexbox.scss new file mode 100644 index 0000000..cd69d72 --- /dev/null +++ b/sass/07-flexbox.scss @@ -0,0 +1,24 @@ +@import "00-config"; +/* flexbox layout +Tutorial: http://knacss.com/demos/tutoriel.html#flex */ +.flex { + display : flex; +} +.flex-h { + flex-direction: row; +} +.flex-v { + flex-direction: column; +} +.flex-fluid { + flex: 1; +} +.flex-start { + order : -1; +} +.flex-mid { + order : 1; +} +.flex-end { + order : 42; +} \ No newline at end of file diff --git a/sass/08-print.scss b/sass/08-print.scss new file mode 100644 index 0000000..c954185 --- /dev/null +++ b/sass/08-print.scss @@ -0,0 +1,70 @@ +@import "00-config"; +/* quick print reset */ +@media print { + * { + background: transparent !important; + box-shadow: none !important; + text-shadow: none !important; + } + body { + width: auto !important; + margin: auto !important; + font-family: serif; + font-size: 12pt; + background-color: #fff !important; + color: #333 !important; + } + p, + h1, + h2, + h3, + h4, + h5, + h6, + blockquote, + ul, + ol { + color: #000 !important; + margin: auto !important; + } + .print { + display: block; /* displaying .print elements */ + } + img { + -webkit-filter: grayscale(100%); + -moz-filter: grayscale(100%); + -ms-filter: grayscale(100%); + -o-filter: grayscale(100%); + filter: grayscale(100%); + } + p, + blockquote { + orphans: 3; /* no orphans */ + widows: 3; /* no widows */ + } + blockquote, + ul, + ol { + page-break-inside: avoid; /* no breaks inside these elements */ + } + h1 { + page-break-before: always; /* page break before main headers */ + } + h1, + h2, + h3, + caption { + page-break-after: avoid; /* no breaks after these elements */ + } + a { + color: #000 !important; + text-decoration: underline !important; + } + a[href]:after { + content: " (" attr(href) ")"; /* displaying URLs */ + } + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } +} \ No newline at end of file diff --git a/sass/09-booleans.scss b/sass/09-booleans.scss new file mode 100644 index 0000000..cfd96bf --- /dev/null +++ b/sass/09-booleans.scss @@ -0,0 +1,35 @@ +@import "00-config"; +/* ----------------------------- */ +/* ==booleans */ +/* ----------------------------- */ +// skip-links boolean +@if $enable-skip-links == true { + /* styling skip links */ + .skip-links { + position: absolute; + + a { + position: absolute; + left: -7000px; + padding: 0.5em; + background: black; + color: white; + text-decoration: none; + + &:focus { + position: static; + } + } + } +} + +// hyphens boolean +@if $enable-hyphens == true { + @media (max-width: $small-screen) { + /* you shall not pass */ + div, textarea, table, td, th, code, pre, samp { + word-wrap: break-word; + hyphens: auto; + } + } +} \ No newline at end of file diff --git a/sass/10-gmaps.scss b/sass/10-gmaps.scss new file mode 100644 index 0000000..9b4d4bb --- /dev/null +++ b/sass/10-gmaps.scss @@ -0,0 +1,19 @@ +@import "00-config"; +/* ----------------------------- */ +/* ==gmaps support */ +/* ----------------------------- */ +// google maps boolean +@if $enable-gmaps == true { + /* Google Gmap3 bug fix on images */ + .gm-style img { + height: 100%; + } + :not(.gm-style) img { + height: auto; + } + .gm-style img, + .gmnoscreen img, + .gmnoprint img { + max-width: none !important; + } +} \ No newline at end of file diff --git a/sass/11-ie.scss b/sass/11-ie.scss new file mode 100644 index 0000000..bd95367 --- /dev/null +++ b/sass/11-ie.scss @@ -0,0 +1,102 @@ +@import "00-config"; +/* ----------------------------- */ +/* ==IE6, IE7, IE8 support */ +/* ----------------------------- */ +// IE6, 7, 8 support boolean +@if $enable-ie678 == true { + $bf: $base-font-size / 1px; + /* IE678 support */ + .ie678 h1, .ie678 .h1-like { + $val: $h1-size / 1rem; + $em : $val * 10 / $bf; + font-size: $em +0em; + } + .ie678 h2, .ie678 .h2-like { + $val: $h2-size / 1rem; + $em : $val * 10 / $bf; + font-size: $em +0em; + } + .ie678 h3, .ie678 .h3-like { + $val: $h3-size / 1rem; + $em : $val * 10 / $bf; + font-size: $em +0em; + } + .ie678 h4, .ie678 .h4-like { + $val: $h4-size / 1rem; + $em : $val * 10 / $bf; + font-size: $em +0em; + } + .ie678 h5, .ie678 .h5-like { + $val: $h5-size / 1rem; + $em : $val * 10 / $bf; + font-size: $em +0em; + } + .ie678 h6, .ie678 .h6-like { + $val: $h6-size / 1rem; + $em : $val * 10 / $bf; + font-size: $em +0em; + } + .ie678 img { + width: auto; /* @bugfix for IE8 */ + } + .ie678 .gm-style img { + height: 100%; + } + + /* hasLayout for IE6/IE7 */ + .clearfix, + .line, + .mod, + .row, + .col { + *zoom: 1; + } + /* inline-block and table-cell for IE6/IE7 */ + /* warning: .col needs width on IE6/IE7 */ + .btn, + .col, + .inbl { + *display: inline; + *zoom: 1; + } + .visually-hidden { + *clip: rect(1px 1px 1px 1px); + } + + /* IE8 grid hack */ + .ie8 .grid > *, + .ie8 [class*="autogrid"] > * { + letter-spacing: -0.31em; + text-rendering: optimizespeed; + } + .ie8 .grid > * > *, + .ie8 [class*="autogrid"] > * > *{ + letter-spacing: normal; + word-spacing: normal; + text-rendering: auto; + } + + /* IE7 grid hack */ + .grid > * > *, + [class*="autogrid"] > * > *{ + *display: inline; + *zoom: 1; + } + + /* forms */ + input[type="checkbox"], + input[type="radio"] { + padding: 0; /* Corrects excess space around these inputs in IE8/9 */ + } + textarea { + overflow: auto; /* Removes default vertical scrollbar on empty textarea in IE6/7/8/9 */ + } + + /* Active box-sizing for IE6/IE7 */ + /* @source https://github.com/Schepp/box-sizing-polyfill */ + /* + .ie67 * { + behavior: url(/lib/box-sizing-polyfill/boxsizing.htc); + } + */ +} \ No newline at end of file diff --git a/sass/12-styling.scss b/sass/12-styling.scss new file mode 100644 index 0000000..76d7066 --- /dev/null +++ b/sass/12-styling.scss @@ -0,0 +1,104 @@ +@import "00-config"; +/* ----------------------------- */ +/* ==minor stylings */ +/* ----------------------------- */ + +// Styling boolean +@if $enable-styling == true { + /* styling elements */ + code, kbd, mark { + border-radius: 2px; + } + kbd { + padding: 0 2px; + border: 1px solid #999; + } + code { + padding: 2px 4px; + background: rgba(0,0,0,0.04); + color: #b11; + } + pre code { + padding: none; + background: none; + color: inherit; + border-radius: 0; + } + mark { + padding:2px 4px; + background: #ff0; + } + sup, + sub { + vertical-align: 0; + position: relative; + } + sup { + bottom: 1ex; + } + sub { + top: 0.5ex; + } + blockquote { + margin-left: 0; + padding-left: 1em; + border-left: 4px solid rgba(0,0,0,0.15); + font-style: italic; + } + q { + font-style: normal; + } + q, + .q { + quotes: "“\00a0" "\00a0”"; + } + q:lang(fr), + .q:lang(fr) { + quotes: "«\00a0" "\00a0»"; + } + hr { + display: block; + clear: both; + height: 1px; + margin: 1em 0 2em; + padding: 0; + border: 0; + color: #ccc; + background-color: #ccc; + } + /* alternate tables */ + .alternate { border: 0; } + .alternate tbody { + border: 1px solid #ccc; + } + .alternate thead tr > * + * { + border-left: 0; + } + .alternate tbody tr > * + * { + border-left: 1px solid #ccc; + } + + /* alternate-vert tables */ + .alternate-vert { + border: 0; + border-right: 1px solid #ccc; + } + .alternate-vert tr > :first-child { + border-bottom: 0; + } + .alternate-vert tr > * + * { + border-top: 1px solid #ccc; + } + + /* striped tables */ + .striped tbody tr:nth-child(odd) { + background: #eee; + background: rgba(0, 0, 0, .05); + } + + /* striped-vert tables */ + .striped-vert tr > :first-child { + background: #eee; + background: rgba(0, 0, 0, .05); + } +} \ No newline at end of file diff --git a/sass/knacksass.zip b/sass/knacksass.zip new file mode 100644 index 0000000000000000000000000000000000000000..b749e02d7ee4579c70b1f083a86a7dfd373e5f7a GIT binary patch literal 11054 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 nSHb!l{