المحتويات
التنسيق
يستخدم Carats تنسيق SASS محدود النطاق، مشجّعًا على HTML دلالي بأقل عدد من أصناف CSS.
base.sass
يحتوي ملف base.sass في src/client على رموز التصميم العامة وعمليات تصفير الأنماط. وكل ملفات SASS الأخرى تستورده بـ @use وas * حتى تتوفر الرموز دون بادئة نطاق.
إنشاء base.sass
// Colors
$color-primary: #000000
$color-secondary: #ffffff
$color-background: #f5f5f5
$color-text: #333333
$color-text-light: #666666
// Spacing
$spacing-xs: 4px
$spacing-sm: 8px
$spacing-md: 16px
$spacing-lg: 24px
$spacing-xl: 32px
// Typography
$font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif
$font-size-base: 16px
$font-size-sm: 14px
$font-size-lg: 18px
$font-size-xl: 24px
$font-weight-normal: 400
$font-weight-bold: 700
// Breakpoints
$breakpoint-sm: 576px
$breakpoint-md: 768px
$breakpoint-lg: 992px
$breakpoint-xl: 1200px
// Border radius
$border-radius: 4px
$border-radius-lg: 8px
// Box shadows
$box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1)
$box-shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.15)
// Transitions
$transition-fast: 150ms ease
$transition-normal: 250ms ease
رموز التصميم
عرّف الألوان والتباعد والطباعة ونقاط التوقف ورموز التصميم الأخرى في المستوى الأعلى من base.sass. لا تُداخلها.
استخدام صحيح
@use '../base.sass' as *
.my-component
color: $color-text
padding: $spacing-md
font-size: $font-size-base
استخدام غير صحيح
// Tokens must stay at the top level of base.sass
.my-component
$color-text: #333
.inner
color: $color-text
الرمز المعرَّف داخل قاعدة موجود فقط داخل تلك القاعدة، لذا فإن أي ورقة أنماط أخرى تحتاجه تُعيد تعريفه. وهكذا تتباعد لوحة الألوان بهدوء عبر المشروع.
HTML دلالي
فضِّل عناصر HTML الدلالية بأقل استخدام للأصناف. دع بنية المكوّن ورموز التصميم يتولّيان التنسيق، وأدخِل المحدِّدات داخل SASS بدل إضافة أصناف مساعدة إلى الترميز.
مكوّن نموذجي
import './card.sass';
export default function Card(props: { title: string; children?: JSX.Element }) {
return (
<article class="card">
<header>
<h2>{props.title}</h2>
</header>
<section>
{props.children}
</section>
<footer>
<button>Action</button>
</footer>
</article>
);
}
ملف SASS المقابل
@use '../base.sass' as *
.card
background: $color-secondary
border-radius: $border-radius-lg
box-shadow: $box-shadow
padding: $spacing-md
margin-bottom: $spacing-md
header
margin-bottom: $spacing-sm
h2
font-size: $font-size-lg
font-weight: $font-weight-bold
section
margin-bottom: $spacing-md
footer
display: flex
justify-content: flex-end
button
background: $color-primary
color: $color-secondary
padding: $spacing-sm $spacing-md
border: none
border-radius: $border-radius
cursor: pointer
transition: background $transition-fast
&:hover
opacity: 0.9
التنسيق المتجاوب
@use '../base.sass' as *
.container
max-width: $breakpoint-xl
margin: 0 auto
padding: $spacing-md
@media (max-width: $breakpoint-md)
padding: $spacing-sm
.grid
display: grid
grid-template-columns: repeat(3, 1fr)
gap: $spacing-md
@media (max-width: $breakpoint-lg)
grid-template-columns: repeat(2, 1fr)
@media (max-width: $breakpoint-sm)
grid-template-columns: 1fr
أفضل الممارسات
اتبع أفضل الممارسات هذه لتنسيق يسهل صيانته:
- عرّف الرموز في المستوى الأعلى. لا تُداخل رموز التصميم داخل mixin أو دوال أبدًا.
- فضِّل HTML دلالي. دع البنية تعرّف التنسيق بدل إضافة أصناف.
- استورد base.sass بشكل صحيح. استخدم دائمًا @use 'relative/path/to/base.sass' as *.
- أبقِ التخصيص specificity منخفضًا. تجنّب المحدِّدات المداخلة بعمق.
- استخدم المتغيرات للتجانس. لا تُضمِّن الألوان أو المسافات أو المقاسات بشكل صريح أبدًا.