npm install @wide/styles-utils --save
Applies accessible hiding to the current element.
@use '@wide/styles-utils' as mixins;
/* With `!important` property */
.a11y {
@include mixins.a11y-only();
}
/* Without `!important` property */
.a11y-not-important {
@include mixins.a11y-only(false);
}
Type | Description | Mandatory | Default |
---|---|---|---|
Boolean |
Whether the visibility is important | false |
true |
/* With `!important` property */
.a11y {
border: 0 !important;
clip: rect(0 0 0 0) !important;
height: 1px !important;
margin: 0 !important;
overflow: hidden !important;
padding: 0 !important;
position: absolute !important;
white-space: nowrap !important;
width: 1px !important;
}
Allows an accessibly hidden element to be focusable via keyboard navigation.
@use '@wide/styles-utils' as mixins;
/* With `!important` property */
.a11y-focusable {
@include mixins.a11y-focusable();
}
/* Without `!important` property */
.a11y-focusable-not-important {
@include mixins.a11y-focusable(false);
}
Type | Description | Mandatory | Default |
---|---|---|---|
Boolean |
Whether the visibility is important | false |
true |
/* With `!important` property */
.a11y-focusable:not(:focus) {
border: 0 !important;
clip: rect(0 0 0 0) !important;
height: 1px !important;
margin: 0 !important;
overflow: hidden !important;
padding: 0 !important;
position: absolute !important;
white-space: nowrap !important;
width: 1px !important;
}
Define a media query value as the minimun reaching point.
@use '@wide/styles-utils' as mixins;
.show-from-sm {
@include mixins.bp-up(sm) {
color: green;
}
@include mixins.bp-up(sm, true) {
color: fuchsia;
}
}
Type | Description | Mandatory | Default |
---|---|---|---|
String|Number |
The min media query value (xs, 1500px, 30em, ...) | true |
|
Boolean |
Is the media query measurement is height ? |
false |
false |
String |
The media query type (all, screen, ...) | false |
all |
@media (min-width: 36em) {
.show-from-sm {
color: green;
}
}
@media (min-height: 36em) {
.show-from-sm {
color: fuchsia;
}
}
Define a media query value as the maximum reaching point.
@use '@wide/styles-utils' as mixins;
.show-until-lg {
@include mixins.bp-down(lg) {
color: blue;
}
@include mixins.bp-lg(lg, true) {
color: red;
}
}
Type | Description | Mandatory | Default |
---|---|---|---|
String|Number |
The max media query value (xs, 1500px, 30em, ...) | true |
|
Boolean |
Is the media query measurement is height ? |
false |
false |
String |
The media query type (all, screen, ...) | false |
all |
@media (max-width: 63.99875em) {
.show-until-lg {
color: blue;
}
}
@media (min-height: 63.99875em) {
.show-until-lg {
color: red;
}
}
Define a range of media query values.
@use '@wide/styles-utils' as mixins;
.show-between {
@include mixins.bp-between(sm, md) {
color: orange;
}
@include mixins.bp-between(sm, md, true) {
color: purple;
}
@include mixins.bp-between(sm, 1500) {
color: gold;
}
@include mixins.bp-between(1500, sm) {
color: yellow;
}
}
Type | Description | Mandatory | Default |
---|---|---|---|
String|Number |
The min media query value (xs, 1500px, 30em, ...) | true |
|
String|Number |
The max media query value (xs, 1500px, 30em, ...) | true |
|
Boolean |
Is the media query measurement is height ? |
false |
false |
String |
The media query type (all, screen, ...) | false |
all |
Note
There is a security method which test the both values and sort them from the lowest to the highest
@media (min-width: 36em) and (max-width: 48em) {
.show-between {
color: orange;
}
}
@media (min-height: 36em) and (max-height: 48em) {
.show-between {
color: purple;
}
}
@media (min-width: 36em) and (max-width: 93.75em) {
.show-between {
color: gold;
}
}
@media (min-width: 36em) and (max-width: 93.75em) {
.show-between {
color: yellow;
}
}
Define a media query value as the only reaching point.
@use '@wide/styles-utils' as mixins;
.show-only {
@include mixins.bp-only(xl) {
color: indigo;
}
@include mixins.bp-only(xxl) {
color: brown;
}
}
Type | Description | Mandatory | Default |
---|---|---|---|
String|Number |
The media query value (xs, 1500px, 30em, ...) | true |
|
String |
The media query type (all, screen, ...) | false |
all |
@media (min-width: 75em) and (max-width: 99.99875em) {
.test {
color: indigo;
}
}
@media (min-width: 100em) {
.test {
color: brown;
}
}
Define print media query rules.
@use '@wide/styles-utils' as mixins;
.print {
@include mixin.bp-print() {
color: beige;
}
}
Type | Description | Mandatory | Default |
---|---|---|---|
String|Number |
The media query value (xs, 1500px, 30em, ...) | true |
|
String |
The media query type (all, screen, ...) | false |
all |
@media print {
.print {
color: beige;
}
}
Reset button state to normal element.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.btn-reset();
/* new rules here */
}
.btn {
background: transparent;
border: 0;
padding: 0;
/* new rules here */
}
Micro clearfix rules for containing floats.
@use '@wide/styles-utils' as mixins;
.clearfix {
@include mixins.el-clearfix();
}
.clearfix::after {
clear: both;
content: '';
display: block;
}
Center an element on the horizontal and vertical axis in absolute position.
@use '@wide/styles-utils' as mixins;
.center-horizontal {
@include mixins.el-centerer(true, false);
}
.center-vertical {
@include mixins.el-centerer(false);
}
.center-h-v {
@include mixins.el-centerer();
}
Type | Description | Mandatory | Default |
---|---|---|---|
Boolean |
Horizontal centering | false |
true |
Boolean |
Vertical centering | false |
true |
.center-horizontal {
position: absolute;
left: 50%;
transform: translate(-50%, 0);
}
.center-vertical {
position: absolute;
top: 50%;
transform: translate(0, -50%);
}
.center-h-v {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
Vertically-center the direct descendants of the current element.
Centering is achieved by displaying children as inline-blocks. Any whitespace between elements is nullified by redefining the font size of the container and its children.
@use '@wide/styles-utils' as mixins;
.v-center {
@include mixins.el-vcenter();
}
.v-center {
font-size: 0;
}
.v-center::before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
}
.v-center > * {
display: inline-block;
font-size: 1rem;
vertical-align: middle;
}
Lock the aspect ratio of an element – or make it fit to content if it exceeds the boundaries of the aspect ratio.
Note! the ratio is produced using the :before and :after pseudo-elements.
Why it won't work on empty tags like <img />
, <input />
etc.
If used with flexbox – the ratio keeping pesudo element will actas a hidden flex-item.
@use '@wide/styles-utils' as mixins;
.ratio {
@include mixins.el-ratio();
}
.ratio-16-9 {
@include mixins.el-ratio(16, 9);
}
.ratio-custom {
@include mixins.el-ratio(1.777778);
}
.ratio-width-height {
@include mixins.el-ratio(4px, 3px);
}
.ratio-custom-keyword {
@include mixins.el-ratio($ratio: 1.2);
}
Possibility to handle one or two arguments: ratio
or width
, height
If one argument:
Type | Description | Mandatory | Default |
---|---|---|---|
Number|Any |
Ratio value. Could be define as 1.2 or by keyword $ratio: 1.2 |
false |
1:1 |
If two arguments:
Type | Description | Mandatory | Default |
---|---|---|---|
Number |
Width value | true |
|
Number |
Height value | true |
.ratio::before,
.ratio::after {
content: "";
clear: both;
display: table;
margin-left: -1px;
width: 1px;
}
.ratio::before {
float: left;
padding-bottom: 100%;
}
.ratio-16-9::before,
.ratio-16-9::after {
content: "";
clear: both;
display: table;
margin-left: -1px;
width: 1px;
}
.ratio-16-9::before {
float: left;
padding-bottom: 56.25%;
}
.ratio-custom::before,
.ratio-custom::after {
content: "";
clear: both;
display: table;
margin-left: -1px;
width: 1px;
}
.ratio-custom::before {
float: left;
padding-bottom: 56.2499929688%;
}
.ratio-width-height::before,
.ratio-width-height::after {
content: "";
clear: both;
display: table;
margin-left: -1px;
width: 1px;
}
.ratio-width-height::before {
float: left;
padding-bottom: 75%;
}
.ratio-custom-keyword::before,
.ratio-custom-keyword::after {
content: "";
clear: both;
display: table;
margin-left: -1px;
width: 1px;
}
.ratio-custom-keyword::before {
float: left;
padding-bottom: 83.3333333333%;
}
Set position of an element using the syntax "padding-shorthand-syntax".
@use '@wide/styles-utils' as mixins;
.position {
@include mixins.el-position();
}
.position-abs-10 {
@include mixins.el-position(absolute, 10px);
}
.position-abs-10-20 {
@include mixins.el-position(absolute, 10px, 20px);
}
.position-abs-10-20-30 {
@include mixins.el-position(absolute, 10px, 20px, 30px);
}
.position-abs-10-20-30-40 {
@include mixins.el-position(absolute, 10px, 20px, 30px, 40px);
}
.position-abs-0-0-30 {
@include mixins.el-position($bottom: 30px);
}
.position-abs-10-10-30 {
@include mixins.el-position(absolute, 10px, $bottom: 30px);
}
.position-abs-10--456 {
@include mixins.el-position(absolute, 10px, $z-index: 456);
}
Possibility to handle arguments by keywords: position
, top
, right
, bottom
, left
and z-index
.
Type | Description | Mandatory | Default |
---|---|---|---|
String |
Position | false |
absolute |
Number |
Top | false |
0 |
Number |
Right | false |
0 |
Number |
Bottom | false |
0 |
Number |
Left | false |
0 |
Number|String |
z-index | false |
auto |
.position {
bottom: 0;
left: 0;
position: absolute;
right: 0;
top: 0;
z-index: auto;
}
.position-abs-10 {
bottom: 10px;
left: 10px;
position: absolute;
right: 10px;
top: 10px;
z-index: auto;
}
.position-abs-10-20 {
bottom: 10px;
left: 20px;
position: absolute;
right: 20px;
top: 10px;
z-index: auto;
}
.position-abs-10-20-30 {
bottom: 30px;
left: 20px;
position: absolute;
right: 20px;
top: 10px;
z-index: auto;
}
.position-abs-10-20-30-40 {
bottom: 30px;
left: 40px;
position: absolute;
right: 20px;
top: 10px;
z-index: auto;
}
.position-abs-0-0-30 {
bottom: 30px;
left: 0;
position: absolute;
right: 0;
top: 0;
z-index: auto;
}
.position-abs-10-10-30 {
bottom: 30px;
left: 10px;
position: absolute;
right: 10px;
top: 10px;
z-index: auto;
}
.position-abs-10--456 {
bottom: 10px;
left: 10px;
position: absolute;
right: 10px;
top: 10px;
z-index: 456;
}
Set edges properties of an element to a unit above/below using a "padding-shorthand-syntax" (top, right-left, bottom)... and it takes keywords too.
@use '@wide/styles-utils' as mixins;
.trbl {
@include mixins.el-trbl();
}
.trbl-10 {
@include mixins.el-trbl(10px);
}
.trbl-10-20 {
@include mixins.el-trbl(10px, 20px);
}
.trbl-10-20-30 {
@include mixins.el-trbl(10px, 20px, 30px);
}
.trbl-10-20-30-40 {
@include mixins.el-trbl(10px, 20px, 30px, 40px);
}
.trbl-0-0-30 {
@include mixins.el-trbl($bottom: 30px);
}
.trbl-10-10-30 {
@include mixins.el-trbl(10px, $bottom: 30px);
}
Possibility to handle arguments by keywords: top
, right
, bottom
and left
.
Type | Description | Mandatory | Default |
---|---|---|---|
Number |
Top | false |
0 |
Number |
Right | false |
0 |
Number |
Bottom | false |
0 |
Number |
Left | false |
0 |
.trbl {
bottom: 0;
left: 0;
right: 0;
top: 0;
}
.trbl-10 {
bottom: 10px;
left: 10px;
right: 10px;
top: 10px;
}
.trbl-10-20 {
bottom: 10px;
left: 20px;
right: 20px;
top: 10px;
}
.trbl-10-20-30 {
bottom: 30px;
left: 20px;
right: 20px;
top: 10px;
}
.trbl-10-20-30-40 {
bottom: 30px;
left: 40px;
right: 20px;
top: 10px;
}
.trbl-0-0-30 {
bottom: 30px;
left: 0;
right: 0;
top: 0;
}
.trbl-10-10-30 {
bottom: 30px;
left: 10px;
right: 10px;
top: 10px;
}
Generates an @font-face
declaration.
You can choose the specific file formats you need to output; the mixin supports eot
, ttf
, svg
, woff2
and woff
.
@use '@wide/styles-utils' as mixins;
@include mixins.font-face(
"source-sans-pro",
"fonts/source-sans-pro-regular",
("woff2", "woff")
) {
font-style: normal;
font-weight: 400;
}
Type | Description | Mandatory | Default |
---|---|---|---|
String |
The font family name | true |
|
String |
The path to the font family | true |
|
String|List |
A list of file formats to support | false |
("ttf", "woff2", "woff") |
@font-face {
font-family: "source-sans-pro";
src: url("fonts/source-sans-pro-regular.woff2") format("woff2"), url("fonts/source-sans-pro-regular.woff") format("woff");
font-style: normal;
font-weight: 400;
}
Generate a font-size and baseline-compatible line-height.
@use '@wide/styles-utils' as mixins;
.font-12 {
@include mixins.font-size(12);
}
.font-12-20-i {
@include mixins.font-size(12, 20, true);
}
Type | Description | Mandatory | Default |
---|---|---|---|
Number |
The size of the font | true |
|
Number|String |
The line box height | false |
auto |
Boolean |
Whether the font-size is important | false |
false |
.font-12 {
font-size: 0.75em;
line-height: 1.05;
}
.font-12-20-i {
font-size: 0.75em !important;
line-height: 1.25em !important;
}
Generate the grid container.
It uses the negative margin trick for multi-row grids.
@use '@wide/styles-utils' as mixins;
.container {
@include mixins.grid-container();
}
.container-gutter-10 {
@include mixins.grid-container(10px, false);
}
Type | Description | Mandatory | Default |
---|---|---|---|
Number |
The size if the gutters | false |
0 |
Boolean |
Define if the whitespace fix is enable | false |
true |
.container {
margin: 0;
padding: 0;
list-style: none;
font-size: 0;
margin-left: 0;
}
.container-gutter-10 {
margin: 0;
padding: 0;
list-style: none;
margin-left: -10;
}
Generate the grid item.
- Required in order to combine fluid widths with fixed gutters.
- Allows us to manipulate grids vertically, with text-level properties, etc.
- Default item alignment is with the tops of each other, like most traditional grid/layout systems.
- By default, all layout items are full-width (mobile first).
- Gutters provided by left padding
@use '@wide/styles-utils' as mixins;
.grid-item {
@include mixins.grid-item();
}
.grid-item-gutter-10 {
@include mixins.grid-item(10px, false);
}
Type | Description | Mandatory | Default |
---|---|---|---|
Number |
The size if the gutters | false |
0 |
Boolean |
Define if the whitespace fix is enable | false |
true |
.grid-item {
box-sizing: border-box;
display: inline-block;
vertical-align: top;
width: 100%;
font-size: 1rem;
padding-left: 0;
}
.grid-item-gutter-10 {
box-sizing: border-box;
display: inline-block;
vertical-align: top;
width: 100%;
padding-left: 10px;
}
Injects generic rules for disabling ul
, ol
, li
styles.
@use '@wide/styles-utils' as mixins;
.list {
@include mixins.list-reset();
}
.list {
list-style: none;
margin: 0;
padding: 0;
}
Generate :active
style in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-a() {
background-color: red;
}
}
.btn:active {
background-color: red;
}
Generate :active
and :focus
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-af() {
background-color: blue;
}
}
.btn:active,
.btn:focus {
background-color: blue;
}
Generate :active
and :hover
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-ah() {
background-color: green;
}
}
.btn:active,
.btn:hover {
background-color: green;
}
Generate :active
and :visited
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-av() {
background-color: green;
}
}
.btn:active,
.btn:visited {
background-color: green;
}
Generate :active
, :focus
and :hover
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-afh() {
background-color: yellow;
}
}
.btn:active,
.btn:focus,
.btn:hover {
background-color: yellow;
}
Generate :active
, :focus
and :visited
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-afv() {
background-color: yellow;
}
}
.btn:active,
.btn:focus,
.btn:visited {
background-color: yellow;
}
Generate :active
, :hover
and :visited
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-ahv() {
background-color: yellow;
}
}
.btn:active,
.btn:hover,
.btn:visited {
background-color: yellow;
}
Generate :active
, :focus
, :hover
and visited
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-afhv() {
background-color: yellow;
}
}
.btn:active,
.btn:focus,
.btn:hover,
.btn:visited {
background-color: yellow;
}
Generate :focus
style in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-f() {
background-color: cyan;
}
}
.btn:focus {
background-color: cyan;
}
Generate :focus
and :hover
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-fh() {
background-color: black;
}
}
.btn:focus,
.btn:hover {
background-color: black;
}
Generate :focus
and :visited
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-fv() {
background-color: black;
}
}
.btn:focus,
.btn:visited {
background-color: black;
}
Generate :focus
, :hover
and :visited
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-fhv() {
background-color: black;
}
}
.btn:focus,
.btn:hover,
.btn:visited {
background-color: black;
}
Generate :hover
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-h() {
background-color: white;
}
}
.btn:hover {
background-color: white;
}
Generate :hover
and :visited
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-hv() {
background-color: white;
}
}
.btn:hover,
.btn:visited {
background-color: white;
}
Generate :visited
styles in one go.
@use '@wide/styles-utils' as mixins;
.btn {
@include mixins.pc-v() {
background-color: white;
}
}
.btn:visited {
background-color: white;
}
Prevent text from wrapping onto multiple lines for the current element.
An ellipsis is appended to the end of the line.
@use '@wide/styles-utils' as mixins;
.text-truncated {
@include mixins.text-truncate();
}
.text-truncated-50px {
@include mixins.text-truncate(50px);
}
Type | Description | Mandatory | Default |
---|---|---|---|
Number |
The maximum width of element | false |
100% |
.text-truncated {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.text-truncated-50px {
max-width: 50px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
Set whether or not touch devices use momentum-based scrolling for the given element.
By default, applies momentum-based scrolling for the current element.
@use '@wide/styles-utils' as mixins;
.touch-scroll {
@include mixins.touch-scroll();
}
.touch-scroll {
-webkit-overflow-scrolling: touch;
}
Set the color of the highlight that appears over a link while it's being tapped.
By default, the highlight is suppressed.
@use '@wide/styles-utils' as mixins;
.touch-scroll {
@include mixins.touch-tap();
}
.touch-scroll-red {
@include mixins.touch-tap(red);
}
Type | Description | Mandatory | Default |
---|---|---|---|
Color |
The value of the highlight | false |
rgba(0, 0, 0, 0) |
.touch-scroll {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.touch-scroll-red {
-webkit-tap-highlight-color: red;
}
Finding out if touch is available for the page document.
@use '@wide/styles-utils' as mixins;
.text-size-mobile {
@include mixins.touch-enabled() {
font-size: 1.2rem;
}
}
.-touch-based .text-size-mobile {
font-size: 1.2rem;
}
Finding out if touch is not available for the page document.
@use '@wide/styles-utils' as mixins;
.text-size {
@include mixins.touch-disabled() {
font-size: 1rem;
}
}
:not(.-touch-based) .text-size {
font-size: 1rem;
}
- Aymeric Assier - github.com/myeti
- Julien Martins Da Costa - github.com/jdacosta
- Sébastien Robillard - github.com/robiseb
This project is licensed under the MIT License - see the licence file for details