AstroGlass Tailwind CSS v4 және Astro компоненттік архитектурасының үстіне құрылған өте икемді, динамикалық тақырыптау жүйесімен ерекшеленеді.
Архитектураға шолу
Тақырыптау жүйесі үш негізгі деңгейден тұрады:
- Тақырыптар тізілімі (Theme Registry):
src/config/themes.tsішіндегі әрбір тақырыпқа арналған анықтамалар. - CSS Custom Properties (CSS арнайы қасиеттер):
src/styles/_themes.cssішінде анықталған тақырыпқа сезімтал айнымалылар. - Динамикалық рендеринг (Dynamic Rendering):
[theme].astroбеті әр секция үшін дұрыс компонент нұсқасын динамикалық түрде көрсетеді.
Тақырыптар тізілімі
Әрбір тақырып src/config/themes.ts ішінде тіркеледі. Бұл тақырып метадеректерін орталықтандырады және оны бүкіл қосымшаға қолжетімді етеді.
- src/
- config/
- themes.ts
- config/
Әрбір тақырып анықтамасы мыналарды қамтиды:
export const themes: ThemeDefinition[] = [ { id: 'liquid', name: 'Liquid', color: 'from-blue-500 to-cyan-400', // Tailwind градиентті кластары icon: '💧', sections: ['Header', 'Hero', 'About', 'Features', 'Portfolio', 'Pricing', 'Testimonial', 'FAQ', 'CTA', 'Contact', 'Footer'], enabled: true, premium: false, description: 'Жұмсақ анимациялары бар сұйық, органикалық дизайн', }, // Glass, Neo, Luxury, Minimal, Aurora...];CSS айнымалылары
Тақырыпқа тән түстер мен эффектілер CSS тапсырыстық қасиеттері арқылы басқарылады. Айнымалылар <html> немесе <body> тегіндегі data-theme атрибутына бекітілген.
[data-theme="liquid"] { --p: 260 80% 60%; /* Негізгі (Primary) */ --s: 310 80% 60%; /* Қосымша (Secondary) */ --a: 190 90% 60%; /* Акцент (Accent) */ --b1: 220 20% 10%; /* Базалық фон (Base background) */ --bc: 220 20% 90%; /* Базалық контент (Мәтін) */}Компоненттер бұларды hsl(var(--p)) немесе Tailwind утилиталары арқылы тұтынады:
<div class="bg-[hsl(var(--p))] text-[hsl(var(--bc))]"> Тақырыпқа сай контент</div>Жобаның барлығында қолданылатын DaisyUI шабыттандырған атау конвенциясымен сәйкес болу үшін айнымалылар қысқа атауларды пайдаланады (--p, --s, --a, --b1, --bc, --er, --su).
Динамикалық компоненттерді рендерингтеу
Тақырып беттері src/pages/[theme].astro арқылы жасалады. Бұл файл әр секция үшін дұрыс нұсқаны (вариантты) динамикалық түрде таңдау үшін компоненттік картаны (component map) пайдаланады:
---const componentMap = { liquid: { Header: HeaderLiquid, Hero: HeroLiquid, About: AboutLiquid, Features: FeaturesLiquid, // ... барлық 12-ден астам секциялар }, glass: { /* ... */ }, neo: { /* ... */ }, luxury: { /* ... */ }, minimal: { /* ... */ }, aurora: { /* ... */ },};
const components = componentMap[themeId];---
<components.Header /><components.Hero /><components.About /><!-- ... -->Әрбір секция варианты - бұл дербес Astro компоненті. Ол барлық мәтіндер үшін useTranslations() пайдаланады — ешқандай сыртқы props (қасиеттер) қажет емес. Бұл бірыңғай API-ді сақтай отырып, әр тақырыптың мүлде басқа HTML құрылымдарына ие болуына мүмкіндік береді.
Жаңа тақырып жасау
-
Тақырып анықтамасын қосу
src/config/themes.tsішіне тақырып анықтамасының нысанын (object) қосыңыз. -
CSS айнымалыларын анықтау
Жаңа тақырыптың CSS айнымалыларын
src/styles/_themes.cssішінде анықтаңыз. -
Секция компоненттерін құру
Әрбір секция үшін тақырыпқа тән компонент нұсқаларын (варианттарды) жасаңыз, мысалы,
src/components/sections/hero/HeroMyTheme.astro. -
Компоненттер картасына тіркеу
Жаңа тақырыптың компоненттерін
src/pages/[theme].astroішіндегіcomponentMapкартасына қосыңыз. -
Аудармаларды қосу
Кез келген жаңа оқшауланған жолдарды
src/locales/ішіндегі JSON файлдарына қосыңыз.