برنامه نویسی

Ruby on Rails 8 – Fast Frontend با استفاده از CSS Zero به عنوان یک چارچوب CSS بدون کلاس

این مقاله عمداً بسیار شبیه به مقالات قبلی این مجموعه است، اما اکنون ما از یک فریمورد جدید css، CSS Zero، آماده برای استفاده با “nobuild” یا برای برنامه های Ruby on Rail که به “build” نیز نیاز دارند، استفاده خواهیم کرد. .

قبل از شروع، لطفاً توجه داشته باشید که هدف CSS Zero فریم ورک بدون کلاس یا سبک کلاس نیست. تغییرات پیشنهاد شده در اینجا فقط برای مقاصد آزمایشی است، با هدف استایل دادن به تمام عناصر صفحات HTML در این آموزش بدون نیاز به اضافه کردن هیچ کلاسی.

بنابراین، در برخی از عناصر HTML، قالب‌بندی احتمالاً مطابق با آنچه چارچوب CSS Zero برای استایل، طراحی، طرح‌بندی و رفتار پیشنهاد می‌کند، نخواهد بود. برای بررسی نحوه عملکرد آن بر اساس آنچه چارچوب CSS Zero پیشنهاد می‌کند، از اینجا به CSS Zero Lookbook دسترسی پیدا کنید، اما برای مشاهده عملکرد آن به عنوان یک چارچوب بدون کلاس، مراحل زیر را دنبال کنید.

فهرست مطالب

یک برنامه جدید Rails را شروع کنید

  • O time قبل از فرمان rails برای نمایش زمان اجرای آن در پایان اجرای دستور عمل می کند. در مثال زیر 47 ثانیه طول کشید.
$ rails -v
Rails 8.0.0

$ time rails new classless-css-zero
...
real    0m47.500s
user    0m33.052s
sys     0m4.249s
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Rails 8، در فلسفه No Build خود، از Propshaft به عنوان یک کتابخانه خط لوله دارایی و Importmap به عنوان کتابخانه جاوا اسکریپت به طور پیش فرض استفاده می کند. Importmap هیچ گونه پردازش جاوا اسکریپت را انجام نمی دهد.

پروژه را با VSCode یا ویرایشگر دلخواه خود باز کنید

$ cd classless-css-zero && code .
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد چند صفحه برای تجسم استایل عناصر HTML

صفحات در اولین مقاله این مجموعه در مراحل مشترک هستند.

CSS Zero را به پروژه خود اضافه کنید

نمایش بیشتر…

دستورالعمل های CSS Zero را دنبال کنید تا آن را در پروژه خود بگنجانید، همانطور که در زیر کپی شده است:

$ bundle add css-zero
$ bin/rails generate css_zero:install
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای بررسی اینکه کدام کامپوننت ها در دسترس هستند، دستور زیر را اجرا کنید:

$ bin/rails generate css_zero:add --help
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای اضافه کردن تمام اجزاء، دستور زیر را اجرا کنید:

bin/rails generate css_zero:add accordion alert autoanimate autosave avatar badge breadcrumb button card carousel chart check_all combobox command collapsible datepicker dialog dropdown flash form fullscreen group hotkey input input_concerns inputmask layouts lightbox local_time navigation pagination progress prose sheet skeleton sortable switch table tabs trix upload_preview toggle web_share
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توجه داشته باشید که اگر کامپوننت های دیگری اضافه شود یا برخی حذف شده باشند، دستور فوق منسوخ خواهد شد.

در حال تغییر فایل app/assets/stylesheets/base.css

نمایش بیشتر…

هنگام مشاهده استفاده از عناوین HTML که در پیوند سرفصل ها مثال زده شده است، می بینیم که بسیاری از عناصر سبک باید در داخل یک div با class="prose".

class="prose"> Heading 1

Heading 2

Heading 3

Heading 4
Heading 5
Heading 6

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای اینکه این عناصر HTML بدون استفاده از هیچ div استایل دهی شوند class="prose" شما باید نحوه استایل بندی این عناصر را تغییر دهید. فایل را باز کنید app/assets/stylesheets/prose.css و به محض اینکه محتوای زیر را پیدا کردید بعد از آن کپی کنید :where(.prose) {.

  font-size: var(--text-fluid-base);
  max-inline-size: 65ch;

  /* Antialiased fonts */
  -moz-osx-font-smoothing: grayscale;
  -webkit-font-smoothing: antialiased;

  :is(h1, h2, h3, h4, h5, h6) {
    font-weight: var(--font-extrabold);
    hyphens: auto;
    letter-spacing: -0.02ch;
    line-height: 1.1;
    margin-block: 0.5em;
    overflow-wrap: break-word;
    text-wrap: balance;
  }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا با فایل app/assets/stylesheets/base.css باز کنید، به دنبال خط بگردید body { و محتوای کپی شده را بعد از پیست کنید text-rendering: optimizeLegibility;. هنگام چسباندن محتوا، خط را حذف یا نظر دهید max-inline-size: 65ch;. محتوای بدن باید مانند مثال زیر باشد:

body {
  background-color: var(--color-bg);
  color: var(--color-text);
  font-synthesis-weight: none;
  text-rendering: optimizeLegibility;

  font-size: varbody {
  background-color: var(--color-bg);
  color: var(--color-text);
  font-synthesis-weight: none;
  text-rendering: optimizeLegibility;

  /* Teste para Configuração Classless */
  font-size: var(--text-fluid-base);
  /* max-inline-size: 65ch; */

  /* Antialiased fonts */
  -moz-osx-font-smoothing: grayscale;
  -webkit-font-smoothing: antialiased;

  :is(h1, h2, h3, h4, h5, h6) {
    font-weight: var(--font-extrabold);
    hyphens: auto;
    letter-spacing: -0.02ch;
    line-height: 1.1;
    margin-block: 0.5em;
    overflow-wrap: break-word;
    text-wrap: balance;
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دوباره فایل را باز کنید app/assets/stylesheets/prose.css و محتوایی که شامل خطوط زیر است را کپی کنید:

از:

  h1 {
    font-size: 2.4em;
  }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تا اینکه:

   mark {
    color: var(--color-text);
    background-color: var(--color-highlight);
  }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

محتوایی که باید کپی شود برای تسهیل تمرین در زیر آمده است:

/* Teste para Configuração Classless */
  h1 {
    font-size: 2.4em;
  }

  h2 {
    font-size: 1.8em;
  }

  h3 {
    font-size: 1.5em;
  }

  h4 {
    font-size: 1.2em;
  }

  h5 {
    font-size: 1em;
  }

  h6 {
    font-size: 0.8em;
  }

  :is(ul, ol, menu) {
    list-style: revert;
    padding-inline-start: revert;
  }

  :is(p, ul, ol, dl, blockquote, pre, figure, table, hr) {
    margin-block: 0.65lh;
    overflow-wrap: break-word;
    text-wrap: pretty;
  }

  hr {
    border-color: var(--color-border-dark);
    border-style: var(--border-style, solid) none none;
    margin: 2lh auto;
  }

  :is(b, strong) {
    font-weight: var(--font-bold);
  }

  :is(pre, code) {
    background-color: var(--color-border-light);
    border: 1px solid var(--color-border);
    border-radius: var(--rounded);
    font-family: var(--font-monospace-code);
    font-size: 0.85em;
  }

  code {
    padding: 0.1em 0.3em;
  }

  pre {
    border-radius: 0.5em;
    overflow-x: auto;
    padding: 0.5lh 2ch;
    text-wrap: nowrap;
  }

  pre code {
    background-color: transparent;
    border: 0;
    font-size: 1em;
    padding: 0;
  }

  p {
    hyphens: auto;
    letter-spacing: -0.005ch;
  }

  blockquote {
    font-style: italic;
    margin: 0 3ch;
  }

  blockquote p {
    hyphens: none;
  }

  table {
    border: 1px solid var(--color-border-dark);
    border-collapse: collapse;
    margin: 1lh 0;
  }

  th {
    font-weight: var(--font-bold);
  }

  :is(th, td) {
    border: 1px solid var(--color-border-dark);
    padding: 0.2lh 1ch;
    text-align: start;
  }

  th {
    border-block-end-width: 3px;
  }

  del {
    background-color: rgb(from var(--color-negative) r g b / .1);
    color: var(--color-negative);
  }

  ins {
    background-color: rgb(from var(--color-positive) r g b / .1);
    color: var(--color-positive);
  }

  a {
    color: var(--color-link);
    text-decoration: underline;
    text-decoration-skip-ink: auto;
  }

  mark {
    color: var(--color-text);
    background-color: var(--color-highlight);
  }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از کپی مطالب فوق، در انتهای فایل قرار دهید app/assets/stylesheets/base.css

در حال تغییر فایل app/assets/stylesheets/button.css

نمایش بیشتر…

از طرفی کلاس css .btn به طوری که تمام عناصر دکمه HTML به طور خودکار از این سبک استفاده می کنند.

تغییرات:

.btn {
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به:

/* Teste para Configuração Classless */
.btn,
input[type="button"],
input[type="submit"],
input[type="reset"],
::file-selector-button,
button {
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تغییر فایل app/assets/stylesheets/input.css

نمایش بیشتر…

از طرفی کلاس css .input به طوری که تمام عناصر ورودی HTML به طور خودکار از این سبک استفاده می کنند.

تغییرات:

.input {
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به:

/* Teste para Configuração Classless */
.input,
input[type="email"],
input[type="password"],
input[type="search"],
input[type="text"],
input[type="url"],
input[type="number"],
input[type="date"],
input[type="datetime-local"],
input[type="month"],
input[type="week"],
input[type="time"],
input[type="tel"],
select[multiple],
textarea,
select {
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تغییرات:

.checkbox, .radio {
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای:

/* Teste para Configuração Classless */
.checkbox, .radio, input[type="checkbox"], input[type="radio"] {
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تغییرات:

.range {
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به:

/* Teste para Configuração Classless */
.range, input[type="range"] {
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تغییرات:

:is(.input, .checkbox, .radio, .range) {
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به:

/* Teste para Configuração Classless */
:is(.input, .checkbox, .radio, .range,
input[type="email"],
input[type="password"],
input[type="search"],
input[type="text"],
input[type="url"],
input[type="number"],
input[type="date"],
input[type="datetime-local"],
input[type="month"],
input[type="week"],
input[type="time"],
input[type="tel"],
select[multiple],
textarea,
select,
input[type="checkbox"],
input[type="radio"],
input[type="range"]
) {
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تنظیمات فایل app/views/layouts/application.html.erb

نمایش بیشتر…

بسته به اینکه مرجع فایل تست html را در کجا قرار داده اید application.html.erb، نمایش لینک ها با ترتیب متفاوتی خواهد بود. اگر می خواهید ارائه مانند آموزش باشد، قسمت آن را تغییر دهید para que fique igual ao exemplo abaixo:

   class="header-layout">
    
id="header">

class="container">

<%= link_to "HTM de Teste 1", pages_html_test_1_path %> / <%= link_to "HTM de Teste 2", pages_html_test_2_path %> / <%= link_to "HTM de Teste 3", pages_html_test_3_path %> / <%= link_to "HTM de Teste 4", pages_html_test_4_path %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون، استایل HTML با استفاده از CSS Zero به عنوان یک چارچوب بدون کلاس 🤩

پس از پیکربندی CSS Zero با سفارشی سازی های بالا و راه اندازی سرور Rails، HTML استایل خود را مشاهده خواهید کرد.

حالت تاریک

برخی از سبک ها گزینه ای برای حالت تاریک دارند. برای تأیید، موضوع رایانه خود را در گزینه‌های سفارشی‌سازی رنگ تغییر دهید. ویندوز را جستجو کنید Ativar modo escuro para apps و بین حالت تاریک یا روشن سوئیچ کنید. صفحه HTML باید پس از تغییر سیستم عامل به طور خودکار تغییر کند که نشان می دهد از حالت روشن و تاریک پشتیبانی می کند.

مراحل بعدی

[x] سبک ها را بر اساس ترجیح خود سازماندهی کنید.
[x] استفاده از یک ظاهر طراحی شده از فایل های CSS پروژه، بدون استفاده از CDN.
[x] قابلیت‌های یک چارچوب CSS بدون کلاس را با استفاده از Tailwind تکرار کنید.
[-] تغییرات ایجاد شده در پروژه را با استفاده از مرورگر به صورت پویا به روز کنید Rails Live Reload;
[-] اگر می خواهید زمان بیشتری را در قسمت جلویی بگذرانید، گزینه های سفارشی سازی سبک مورد علاقه خود را بررسی کنید.

مراجع

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا