The @riapacheco/yutes
package is a really lightweight SCSS
pack of stylesheets intended to provide utilities similar to those found in common frameworks like Bootstrap (with some slight differences) but without the rigidness that limits fluid design.
As an example of how this is achieved (especially for those familiar with libraries like Bootstrap
and Tailwind CSS
), here's some samples on how they were created with SCSS features:
// Enabling the 'pt-1' [padding-top: 1] shorthand classes | (_utilities.scss)
@each $abbr, $name in ('t': 'top', 'r': 'right', 'b': 'bottom', 'l': 'left') {
@for $i from 1 through $margin-max-rem-multiple {
.p#{$abbr}-#{$i} {
padding-#{$name}: 1rem * $i;
}
}
}
// Enabling breakpoint logic | (breakpoints.scss)
@mixin if-viewport($media) {
@if $media == small {
@media only screen and (max-width: $mobile) {
@content;
}
} @else if $media == medium {
@media only screen and (min-width: calc($mobile + 1px)) and (max-width: calc($desktop - 1px)){
@content;
}
}
}
Simplified buttons so that they don't rely on the color palette and instead can be changed with three variables. You can also add
sm
afterbtn
for smaller buttons andlg
afterbtn
for larger. These are based on ascale()
property which you can also override. To skip the documentation and see it in action, watch this demo video.
Contents
Install from NPM with command
npm install @riapacheco/yutes
In your main SCSS
file
@import "@riapacheco/yutes/main.scss";
To use breakpoints in encapsulated stylesheet
@import "@riapacheco/yutes/breakpoints.scss";
To use colors and to override in encapsulated stylesheet
@import '@riapacheco/yutes/variables.scss';
This package strips all browser default styles passively.
Style | Applied to | Description |
---|---|---|
Smoothing | All Elements | Antialiasing makes for smoother renderings |
Border-Box | All Elements | Ensures consistency with edges |
Unset Focus/Outlines | All Elements | Removes browser focus styles (e.g. blue borders) |
Unset scrollbar | All Elements | Removes scrollbar from all views |
Consistent resizing | img elements |
Limits errors and broken styles from problematic cascading. To change image size, adjust width only. |
Unset focus | button |
Removes webkit focus |
Unset active | button |
Removes all active outlines and blue colors |
Unset focus | anchors | Removes webkit focus |
Unset active | anchors | Removes all active outlines, underlines, and blue colors |
Prioritized cursor pointer |
File upload buttons | Re-adds the pointer behavior of cursors for any file upload buttons you may add graphics overtop of |
Removed outlines | input |
Removes outlines from input fields |
All structure and baseline user controls were sized (or calculated [calc()
]) with rem
multiples (baseline body font-size
) to ensure responsivity and easier customization.
To override any variables, in your main SCSS
file re-assign the variable BEFORE importing the ~@riapacheco/yutes/main.scss
file (and variables.scss
file just to be safe!) like this:
$primary-color: #123456;
$secondary-color: #654321;
$base-rem-size: 17px;
$h2-size: 2rem;
@import '~@riapacheco/yutes/main.scss';
@import '~@riapacheco/yutes/variables.scss';
See config variables section for complete list of variables to override
Test drive a font family by applying its class to an element containing text. For HTML <link>
tags, see comments
found in the @riapacheco/yutes/_fonts.scss
file!
- Inter
.inter-ff
- Roboto Flex
.roboto-flex-ff
- Public Sans
.public-sans-ff
- Open Sans
.open-sans-ff
- Fira Code
.fira-code-ff
- Nanum Gothic
.nanum-gothic-ff
- Lato
.lato-ff
- Montserrat
.montserrat-ff
- Oswald
.oswald-ff
- Source Sans Pro
.source-sans-pro-ff
- Merriweather
.merriweather-ff
- Nunito Sans
.nunito-sans-ff
Specify a container width to create a centered container.
<div class="mx-auto-{size}px">
This is a container
</div>
Specify a size
between 1
and 3000
. The value is translated to pixels
.
<div class="mx-auto-700px">
This is a good size for iPads
</div>
<div class="p{direction}-{size}"></div>
See config variables section to override the size range
Prefix | Direction | Translation | Compiles to | Size Range |
---|---|---|---|---|
p |
t |
top |
padding-top: |
1 - 30 |
p |
r |
right |
padding-right: |
1 - 30 |
p |
b |
bottom |
padding-bottom: |
1 - 30 |
p |
l |
left |
padding-left: |
1 - 30 |
m |
t |
top |
margin-top: |
1 - 30 |
m |
r |
right |
margin-right: |
1 - 30 |
m |
b |
bottom |
margin-bottom: |
1 - 30 |
m |
l |
left |
margin-left: |
1 - 30 |
<div class="pt-3 pb-1">
Section
</div>
- The above translates to
padding-top: 3rem;
andpadding-bottom: 1rem;
Must import the following to any encapsulated stylesheets first
@import "~@riapacheco/yutes/breakpoints.scss";
.your-class {
width: 220px;
@include if-viewport({size}) {
// add appropriate styles
}
}
See config variables section to override the breakpoint widths
{size} | Description |
---|---|
small |
Applies your assigned styles if viewport between 0px and 375px |
medium |
Applies your assigned styles if viewport between 376px and 1200px |
.buttons-block {
display: flex;
flex-direction: row;
button {
display: inline-block;
}
@include if-viewport(small) { // applies smartphone-friendly styling
flex-direction: column;
align-items: center;
justify-content: center;
button { // accesses child (parent's scope)
display: block;
}
}
@include if-viewport(medium) { // applies tablet - small screen styling
margin-top: 1rem;
margin-bottom: 1rem;
}
}
Must import the following to any encapsulated stylesheets first
@import '~@riapacheco/yutes/variables.scss'
Mostly applied to optional controls (buttons and form fields) but can be applied to elements with classes like this:
<div class="primary-color">
This text has `$primary-color` applied to it
</div>
See config variables section to override the color variables
Class | Applied Value |
---|---|
.primary-color |
color: $primary-color |
.primary-color.light |
color: $primary-light-color |
.primary-color.medium |
color: $primary-medium-color |
.primary-color.dark |
color: $primary-dark-color |
.primary-bg |
background-color: $primary-color |
.primary-bg.light |
background-color: $primary-light-color |
.primary-bg.medium |
background-color: $primary-medium-color |
.primary-bg.dark |
background-color: $primary-dark-color |
.secondary-color |
color: $secondary-color |
.secondary-color.light |
color: $secondary-light-color |
.secondary-color.medium |
color: $secondary-medium-color |
.secondary-color.dark |
color: $secondary-dark-color |
.secondary-bg |
background-color: $secondary-color |
.secondary-bg.light |
background-color: $secondary-light-color |
.secondary-bg.medium |
background-color: $secondary-medium-color |
.secondary-bg.dark |
background-color: $secondary-dark-color |
.accent-color |
color: $accent-color |
.accent-color.light |
color: $accent-light-color |
.accent-color.medium |
color: $accent-medium-color |
.accent-color.dark |
color: $accent-dark-color |
.accent-bg |
background-color: $accent-color |
.accent-bg.light |
background-color: $accent-light-color |
.accent-bg.medium |
background-color: $accent-medium-color |
.accent-bg.dark |
background-color: $accent-dark-color |
<div class="primary light">
This is light color text
</div>
The following properties have been set from h1
to h6
:
font-size`, `line-height`, `letter-spacing`, `font-weight`, and `text-transform
See config variables section to override heading values
Lightweight classes for stacking labels overtop input
and select
elements (with light grey field input colors). Only requires that the label
and input
or select
element are enclosed in an element with the .form-group
class like this:
<div class="form-group"> <!--just this-->
<label>
First Name
</label>
<input type="text" name="firstName">
</div>
See config variables section to override form element styles
This style will always require the initializer btn
class followed by chained {color}
classes or chained {add-on}
classes
<a class="btn {size} {color} {add-on} "
For full details on configuring variables, go to config variables section.
For easier / quick implementation, and for those NOT wanting multiple shades of a button color, you can now update your primary, secondary, and accent buttons with simple variables instead of relying on the actual $primary-color
variables in your palette. However, this will not impact the other class shades (e.g <color_type> light
) as they are still part of the overall color scheme.
// Variables found in the variables.scss file
// Configured in your main SCSS file BEFORE importing the package
$button-primary-color: $primary-dark-color;
$button-secondary-color: $secondary-medium-color;
$button-accent-color: $accent-medium-color;
For more details, see config variables section.
Since there's value in having alternative small and large buttons, there are now variables to adjust these sizes utilizing the transform: scale(x)
property.
// Variables found in the variables.scss file
// Configured in your main SCSS file BEFORE importing the package
$button-sm-size: scale(0.8);
$button-lg-size: scale(1.15);
For more details, see config variables section.
Notes:
- Any classes listed within
< >
and given a?
are optional - If the property listed is a variable (starts with a
$
) this indicates both the value AND how the variable you can override in your main stylesheet.
Class(es) | Syntax Position | Compiles to || General description |
---|---|---|
primary |
{color} |
$button-primary-color: $primary-dark-color |
primary default |
{color} |
background-color: $primary-color |
primary light |
{color} |
background-color: $primary-light-color |
primary medium |
{color} |
background-color: $primary-medium-color |
primary dark |
{color} |
background-color: $primary-dark-color |
primary <shade?> primary-alt-text |
{color} |
background-color: $primary color: $button-primary-font-color-alt |
secondary |
{color} |
$button-secondary-color: $secondary-medium-color |
secondary default |
{color} |
background-color: $secondary-color |
secondary light |
{color} |
background-color: $secondary-light-color |
secondary medium |
{color} |
background-color: $secondary-medium-color |
secondary dark |
{color} |
background-color: $secondary-dark-color |
secondary <shade?> secondary-alt-text |
{color} |
background-color: $secondary color: $button-secondary-font-color-alt |
accent |
{color} |
$button-accent-color: $accent-medium-color |
accent default |
{color} |
background-color: $accent-color |
accent light |
{color} |
background-color: $accent-light-color |
accent medium |
{color} |
background-color: $accent-medium-color |
accent dark |
{color} |
background-color: $accent-dark-color |
accent <shade?> accent-alt-text |
{color} |
background-color: $accent color: $button-accent-font-color-alt |
sm |
{size} |
$button-sm-size: scale(0.8) |
lg |
{size} |
$button-lg-size: scale(1.15) |
rounded |
{add-on} |
Pill style button (20px border radius) |
raised |
{add-on} |
Applies a box-shadow (and adjustments to box-shadow on hover and when active ) |
hover-to-lighten |
{add-on} |
Applies a brightness filter on hover that increases brightness by 15% |
hover-to-darken |
{add-on} |
Applies a brightness filter on hover that decreases brightness by 25% |
<a class="btn primary raised hover-to-darken">
Save Changes
</a>
To override any variables, in your main SCSS
file re-assign the variable BEFORE importing the ~@riapacheco/yutes/main.scss
file (and variables.scss
file just to be safe!) like this:
$primary-color: #123456;
$secondary-color: #654321;
$base-rem-size: 17px;
$h2-size: 2rem;
@import '~@riapacheco/yutes/main.scss';
@import '~@riapacheco/yutes/variables.scss';
Copy some or all of the following into your main file (in this order) and change the values as you please
Note: your $base-rem-size
value determines the overall sizing of all elements impacted by this package.
$base-rem-size: 15.5px;
$base-font-family: "Inter", sans-serif;
$base-letter-spacing: -0.02rem;
$button-primary-color: pink;
@import '~@riapacheco/yutes/main.scss';
@import '~@riapacheco/yutes/variables.scss';
Copy some or all of the following into your main file (in this order) and change the values as you please
$padding-max-rem-multiple: 30;
$margin-max-rem-multiple: 30;
@import '~@riapacheco/yutes/main.scss';
@import '~@riapacheco/yutes/variables.scss';
Copy some or all of the following into your main file (in this order) and change the values as you please
/* --------------------------------- PRIMARY -------------------------------- */
$primary-light-color: #FFD753;
$primary-color: #FFC400;
$primary-medium-color: #FFAB00;
$primary-dark-color: #FF991F;
/* -------------------------------- SECONDARY ------------------------------- */
$secondary-light-color: #79E2F2;
$secondary-color: #00C7E6;
$secondary-medium-color: #00B8D9;
$secondary-dark-color: #00A3BF;
/* --------------------------------- ACCENT --------------------------------- */
$accent-light-color: #FFBDAD;
$accent-color: #FF8F73;
$accent-medium-color: #FF7452;
$accent-dark-color: #FF5630;
@import '~@riapacheco/yutes/main.scss';
@import '~@riapacheco/yutes/variables.scss';
Copy some or all of the following into your main file (in this order) and change the values as you please
/* -------------------------------- HEADING 1 ------------------------------- */
$h1-size: 2rem;
$h1-height: 2rem;
$h1-spacing: -0.1rem;
$h1-weight: 700;
$h1-transform: none;
/* -------------------------------- HEADING 2 ------------------------------- */
$h2-size: 1.8rem;
$h2-height: 1.8rem;
$h2-spacing: -0.05rem;
$h2-weight: 700;
$h2-transform: none;
/* -------------------------------- HEADING 3 ------------------------------- */
$h3-size: 1.6rem;
$h3-height: 1.6rem;
$h3-spacing: -0.05rem;
$h3-weight: 700;
$h3-transform: none;
/* -------------------------------- HEADING 4 ------------------------------- */
$h4-size: 1.4rem;
$h4-height: 1.4rem;
$h4-spacing: -0.03rem;
$h4-weight: 700;
$h4-transform: none;
/* -------------------------------- HEADING 5 ------------------------------- */
$h5-size: 1.2rem;
$h5-height: 1.2rem;
$h5-spacing: -0.03rem;
$h5-weight: 700;
$h5-transform: none;
/* -------------------------------- HEADING 6 ------------------------------- */
$h6-size: 0.88rem;
$h6-height: 0.88rem;
$h6-spacing: 0.06rem;
$h6-weight: 500;
$h6-transform: uppercase;
@import '~@riapacheco/yutes/main.scss';
@import '~@riapacheco/yutes/variables.scss';
Copy some or all of the following into your main file (in this order) and change the values as you please
$mobile: 375px;
$desktop: 1200px;
@import '~@riapacheco/yutes/main.scss';
@import '~@riapacheco/yutes/variables.scss';
Copy some or all of the following into your main file (in this order) and change the values as you please
/* --------------------------- BASELINE BTN STYLES -------------------------- */
$button-font-size: 1rem;
$button-border-radius: 0.2rem;
$button-padding-top-bottom: 0.8rem;
$button-padding-left-right: 1.2rem;
/* ------------------------------ BUTTON SIZING ----------------------------- */ // NEW!
$button-sm-size: scale(0.8) !default;
$button-lg-size: scale(1.15) !default;
/* ---------------------------- COLOR ATTRIBUTES ---------------------------- */ // NEW!
$button-primary-color: $primary-dark-color;
$button-secondary-color: $secondary-medium-color;
$button-accent-color: $accent-medium-color;
/* ------------------------ ADDITIONAL BTN ATTRIBUTES ----------------------- */
$pill-button-border-radius: 20px;
$hover-filter-bright: brightness(1.15);
$hover-filter-dark: brightness(0.85);
$button-raised-box-shadow: 4px 6px 12px rgba(0, 0, 0, 0.4);
$button-raised-box-shadow-hover: 4px 6px 12px rgba(0, 0, 0, 0.2);
$button-raised-box-shadow-active: 4px 6px 12px rgba(0, 0, 0, 0.1);
/* ----------------------- FONT COLORS & ALTERNATIVES ----------------------- */
$button-primary-font-color: white;
$button-primary-font-color-alt: black;
$button-secondary-font-color: white;
$button-secondary-font-color-alt: black;
$button-accent-font-color: white;
$button-accent-font-color-alt: black;
@import '~@riapacheco/yutes/main.scss';
@import '~@riapacheco/yutes/variables.scss';
Copy some or all of the following into your main file (in this order) and change the values as you please
/* ----------- STYLES APPLIED TO TEXT INPUTS AND SELECT DROPDOWNS ----------- */
$form-control-border-radius: 0.2rem;
$form-control-font-size: $base-rem-size;
$form-control-min-height: $form-control-font-size * 2.3;
$form-control-spaces-between: 1.5rem;
/* ---------------------------- TEXT INPUTS ONLY ---------------------------- */
$form-input-font-family: inherit;
$form-input-bg-color: #f0f0f0;
$form-input-padding-left: $form-control-min-height / 3.5;
/* ------------------------- SELECT DROP DOWNS ONLY ------------------------- */
$form-select-font-family: inherit;
$form-select-bg-color: #f8f8f8;
/* --------------------------------- LABELS --------------------------------- */
$form-label-font-size: 1rem;
$form-label-font-family: inherit;
$form-label-font-weight: 600;
$form-label-padding-left: 0.5rem;
$form-label-padding-bottom: 0.5rem;
$form-label-letter-spacing: auto;
@import '~@riapacheco/yutes/main.scss';
@import '~@riapacheco/yutes/variables.scss';
Things like margin-block-start
and margin-inline-start
are impacted by typography dimensions (e.g. sometimes a lowercase I
might be taller than a capital G
) and line-height.
I created a new stylesheet for my favorite font (Inter
) called inter-mixins.scss
.
Warning: I do NOT use the <p>
element in my work and instead add text to <div>
elements I adjust later. Applying body text to <p>
elements will not likely render the properties derived from @mixin inter-body-text
unless applied directly to the <p>
element.
Provides @mixins
for the following classes:
- CSS import for
Inter
font from Google's API html
: given a10px
base font-size to better control all elements that userem
for sizingbody
: given a1.6rem
base font-size to ensure actual body font-sizing is readable / idealh1
toh6
The body
, and headers h1
to h4
have associated mobile versions. These are new @mixins
which have the same name but include -mobile
as suffix.
Easiest way to use these (apart from programmatically detecting resizing in your app's framework) is to import the breakpoints.scss
stylesheet to apply them in the same place that you apply the original @mixins
.
Here's an example of how one might set up their styles.scss
(main SCSS file):
@import '~@riapacheco/yutes/main.scss'; // resets, smoothing, and utility shorthand classes access
@import '~@riapacheco/yutes/breakpoints.scss'; // access breakpoint logic
@import '~@riapacheco/yutes/inter-mixins.scss'; // new sizing/adjustments for "Inter" font
html {
@include inter-html-text;
}
body {
@include inter-body-text;
@include if-viewport(small) { @include inter-body-text-mobile; }
}
h1 {
@include inter-h1;
@include if-viewport(small) { @include inter-h1-mobile; }
}
// and so on and so forth -- EXCLUDING h5 and h6 for mobile versions