@riapacheco/yutes v4.2.4
Yutes Utilities
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
smafterbtnfor smaller buttons andlgafterbtnfor 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 ⤵️
Installation
Install from NPM with command
npm install @riapacheco/yutesIn your main SCSS file
@import "@riapacheco/yutes/main.scss";For Encapsulated Views
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';Browser Resets
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 |
Usage
How to Override
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
Imported Fonts
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
Horizontal Centering
Specify a container width to create a centered container.
SYNTAX
<div class="mx-auto-{size}px">
This is a container
</div>VALUES
Specify a size between 1 and 3000. The value is translated to pixels.
EXAMPLE
<div class="mx-auto-700px">
This is a good size for iPads
</div>Padding & Margin
SYNTAX
<div class="p{direction}-{size}"></div>VALUES
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 |
EXAMPLE
<div class="pt-3 pb-1">
Section
</div>- The above translates to
padding-top: 3rem;andpadding-bottom: 1rem;
Breakpoints
DEPENDENCY
Must import the following to any encapsulated stylesheets first
@import "~@riapacheco/yutes/breakpoints.scss";SYNTAX
.your-class {
width: 220px;
@include if-viewport({size}) {
// add appropriate styles
}
}VALUES
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 |
EXAMPLE
.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;
}
}Colors
DEPENDENCY
Must import the following to any encapsulated stylesheets first
@import '~@riapacheco/yutes/variables.scss'SYNTAX
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>VALUES
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 |
EXAMPLE
<div class="primary light">
This is light color text
</div>Headings
SYNTAX
The following properties have been set from h1 to h6:
font-size`, `line-height`, `letter-spacing`, `font-weight`, and `text-transformVALUES
See config variables section to override heading values
Forms
SYNTAX / EXAMPLE
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>VALUES
See config variables section to override form element styles
Buttons
SYNTAX
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} "VALUES
For full details on configuring variables, go to config variables section.
BUTTON UPDATES
Primary, Secondary, and Accent Base Colors
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.
Sizing
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% |
EXAMPLE
<a class="btn primary raised hover-to-darken">
Save Changes
</a>Config Variables
How it works
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';Override Base Sizes
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';Padding / Margin REM Ranges
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';Colors
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';Headings
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';Breakpoints
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';Buttons
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';Forms
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';Latest Updates
New Inter Optimized Stylesheet
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.
What it does
Provides @mixins for the following classes:
- CSS import for
Interfont from Google's API html: given a10pxbase font-size to better control all elements that useremfor sizingbody: given a1.6rembase font-size to ensure actual body font-sizing is readable / idealh1toh6
Mobile Adjustments
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 versions3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago