Jestem tak leniwy, że zapomniałem napisać jakikolwiek post na tej stronie przez ostatnich kilka miesięcy… A ten post również będzie o mojej leniwości :).

Pracowałem nad nową skórką mojego bloga przez ostatnich kilka miesięcy - ostatnich kilka miesięcy z powodu wielu projektów na pokładzie. To co zrobiłem podczas pracy nad tymi projektami to stworzenie własnego małego frameworka. To nie jest ten rodzaj frameworków, które są znane na całym świecie jak Foundation czy Bootstrap. To raczej związane z pisaniem własnych atomowych mixinów w SASS, aby zmniejszyć powódź kodu w projekcie. Oparłem się trochę na projekcie Emmet i liczeniu jednostek z projektu Foundation (piksele na remy).

LazySASS Idea

Projekt został rozpoczęty podczas pisania mojej książki "Professional CSS3" (wydanej przez PACKT Publishing) i był nazywany pojedynczym plikiem _shorts.sass. Była to kolekcja krótkich form dobrze znanych reguł CSS.

=tdn
    text-decoration: none

=tdu
    text-decoration: uppercase

=tac
    text-align: center

=tar
    text-align: right

=tal
    text-align: left

=ttu
    text-transform: uppercase

=ttl
    text-transform: lowercase

=di
    display: inline

=db
    display: block

=dib
    display: inline-block

=m0a
    margin: 0 auto

Było to używane do skracania najbardziej znanych reguł CSS w końcowym kodzie tak:

.className
  +di // display: inline-block
  +tac // text-align: center
  +ttu // text-transform: uppercase

Tak… dość mała zmiana i… nieczytelna. Tworzy dodatkowy stos nieznanych reguł… wygląda jak dodatkowy nowy język. Ale kto nie pracuje z EMMET (wcześniej znanym jako ZenCoding)? To nie jest inny nowy język, po prostu oparty na podstawach EMMET.

Następny krok - LazySASS rozszerzony

Następnym problemem, który dla mnie był najbardziej powtarzalny, były poprawne jednostki. Przyczepiłem się do REM zamiast pikseli, co sprawiło, że układ był bardziej dostosowywalny. Używałem remCalc(), który zamieniał piksele na REMy. Ale problemem jest powtarzanie tej funkcji. Zdefiniujmy remCalc w SASS:

@function remCalc($value)
   $rem: $value / 16px
   @return #{$rem}rem

Więc za każdym razem gdy chciałem zastosować wartość REM, musiałem wywołać funkcję:

h1
  font-size: remCalc(32px)

To wygenerowało:

h1 {
  font-size: 2rem;
}

Ale… co jeśli chciałbym zmienić font na przykład na 21px i daje mi to 1.3125rem? W inspektorze trudno jest to pomnożyć i wiedzieć co było podstawą tego równania. Przechodziłem z jednej jednostki na drugą, ale można to oprzeć na jednej zmiennej trzymanej globalnie i jednym mixinie:

$UNIT_REM: true // pixels / rems

@function _countUnits($value)
  @if ($UNIT_REM)
    $rem: $value / 16px
    @return #{$rem}rem
  @else
    @return $value

Teraz musimy zastosować mixiny, które konwertują piksele na remy tak:

=mt($value)
  margin-top: _countUnits($value)

=ml($value)
  margin-left: _countUnits($value)

=mr($value)
  margin-right: _countUnits($value)

=mb($value)
  margin-bottom: _countUnits($value)

Za każdym razem gdy chcesz zmienić na piksele, ustawiasz $UNIT_REM na false. Teraz łatwiej jest sprawdzać jednostki rozmiaru.

Podsumujmy

Więc teraz gdy chcesz opisać element, możesz użyć kodu takiego jak ten:

.single_article__book__content
  +posa
  +t(0px)
  +w(470px)

.single_article__book__img
  +r(0px)
  +t(0px)
  +fr
  +posr

... skompiluje się do:

.single_article__book__content {
  position: absolute;
  top: 0;
  width: 465px;
}
.single_article__book__img {
  right: 0;
  top: 0;
  float: right;
  position: relative;
}

…lub:

.single_article__book__content {
  position: absolute;
  top: 0rem;
  width: 29.375rem;
}

.single_article__book__img {
  right: 0rem;
  top: 0rem;
  float: right;
  position: relative;
}

… w przypadku ustawionych jednostek na REMy.

LazySASS

Kod LazySASS jest dostępny tutaj: https://github.com/fedojo/LazySASS/blob/master/_shorts.sass!

Categories

Recent Posts

About Me

Piotr Sikora - Process Automation | AI | n8n | Python | JavaScript

Piotr Sikora

Process Automation Specialist

I implement automation that saves time and money, streamlines operations, and increases the predictability of results. Specializing in process automation, AI implementation, and workflow optimization using n8n, Python, and JavaScript.

n8n Workflows

n8n workflow automation templates

Explore my workflow templates on n8n. Ready-to-use automations for blog management, data collection, and AI-powered content processing.

3Workflow Templates

• Auto-Categorize Blog Posts with AI

• Collect LinkedIn Profiles

• Export WordPress Posts for SEO

Podobne artykuły

Odkryj więcej powiązanych treści

Professional CSS autorstwa Piotra Sikory

Minęło dużo czasu... Powinienem opowiedzieć o tej książce.

Opanuj instalację SASS z tym szybkim przewodnikiem

Czy kiedykolwiek marzyłeś o zmiennych lub funkcjach w CSS? Najprostszym sposobem na ich uzyskanie jest użycie preprocesora takiego jak SASS.

Elementy zwijane w czystym CSS: Tworzenie akordeonu

Dowiedz się, jak tworzyć elementy zwijane i komponenty akordeonowe używając czystego CSS - bez JavaScript