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
در حال تغییر فایل هنگام مشاهده استفاده از عناوین HTML که در پیوند سرفصل ها مثال زده شده است، می بینیم که بسیاری از عناصر سبک باید در داخل یک div با class="prose">
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
برای اینکه این عناصر HTML بدون استفاده از هیچ div استایل دهی شوند حالا با فایل دوباره فایل را باز کنید از: تا اینکه: محتوایی که باید کپی شود برای تسهیل تمرین در زیر آمده است: پس از کپی مطالب فوق، در انتهای فایل قرار دهید app/assets/stylesheets/base.css
نمایش بیشتر…
class="prose"
.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
در حال تغییر فایل از طرفی کلاس css تغییرات: به: app/assets/stylesheets/button.css
نمایش بیشتر…
.btn
به طوری که تمام عناصر دکمه HTML به طور خودکار از این سبک استفاده می کنند..btn {
/* Teste para Configuração Classless */
.btn,
input[type="button"],
input[type="submit"],
input[type="reset"],
::file-selector-button,
button {
تغییر فایل از طرفی کلاس css تغییرات: به: تغییرات: برای: تغییرات: به: تغییرات: به: app/assets/stylesheets/input.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"]
) {
تنظیمات فایل بسته به اینکه مرجع فایل تست html را در کجا قرار داده اید 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 %>
app/views/layouts/application.html.erb
نمایش بیشتر…
application.html.erb
، نمایش لینک ها با ترتیب متفاوتی خواهد بود. اگر می خواهید ارائه مانند آموزش باشد، قسمت آن را تغییر دهید para que fique igual ao exemplo abaixo:
class="header-layout">
اکنون، استایل HTML با استفاده از CSS Zero به عنوان یک چارچوب بدون کلاس 🤩
پس از پیکربندی CSS Zero با سفارشی سازی های بالا و راه اندازی سرور Rails، HTML استایل خود را مشاهده خواهید کرد.
حالت تاریک
برخی از سبک ها گزینه ای برای حالت تاریک دارند. برای تأیید، موضوع رایانه خود را در گزینههای سفارشیسازی رنگ تغییر دهید. ویندوز را جستجو کنید Ativar modo escuro para apps
و بین حالت تاریک یا روشن سوئیچ کنید. صفحه HTML باید پس از تغییر سیستم عامل به طور خودکار تغییر کند که نشان می دهد از حالت روشن و تاریک پشتیبانی می کند.
مراحل بعدی
[x] سبک ها را بر اساس ترجیح خود سازماندهی کنید.
[x] استفاده از یک ظاهر طراحی شده از فایل های CSS پروژه، بدون استفاده از CDN.
[x] قابلیتهای یک چارچوب CSS بدون کلاس را با استفاده از Tailwind تکرار کنید.
[-] تغییرات ایجاد شده در پروژه را با استفاده از مرورگر به صورت پویا به روز کنید Rails Live Reload
;
[-] اگر می خواهید زمان بیشتری را در قسمت جلویی بگذرانید، گزینه های سفارشی سازی سبک مورد علاقه خود را بررسی کنید.
مراجع