Initial Commit
This commit is contained in:
25
.gitignore
vendored
Normal file
25
.gitignore
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
node_modules
|
||||
.browser_screenshots
|
||||
.vscode
|
||||
|
||||
# Output
|
||||
.output
|
||||
.vercel
|
||||
.netlify
|
||||
.wrangler
|
||||
/.svelte-kit
|
||||
/build
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Env
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
!.env.test
|
||||
|
||||
# Vite
|
||||
vite.config.js.timestamp-*
|
||||
vite.config.ts.timestamp-*
|
||||
243
README.md
Normal file
243
README.md
Normal file
@@ -0,0 +1,243 @@
|
||||
# Responsive Grid Skeleton
|
||||
|
||||
A clean, minimal skeleton framework for building responsive, grid-based websites with SvelteKit, TailwindCSS, and DaisyUI.
|
||||
|
||||
## 🚀 Features
|
||||
|
||||
- **Mobile-First Design**: All layouts start with mobile and scale up
|
||||
- **Responsive Grid System**: Flexible CSS Grid and Flexbox layouts
|
||||
- **Modern Tech Stack**: SvelteKit 2.0, TailwindCSS 3.4, DaisyUI 5.1
|
||||
- **Comprehensive Documentation**: Detailed comments explaining every pattern
|
||||
- **Accessibility Ready**: ARIA labels, keyboard navigation, screen reader support
|
||||
- **Performance Optimized**: Minimal bundle size and fast loading times
|
||||
- **TypeScript Support**: Full type safety out of the box
|
||||
|
||||
## 📱 Responsive Breakpoints
|
||||
|
||||
The framework uses TailwindCSS's responsive breakpoints:
|
||||
|
||||
- **Mobile**: Default (0px+) - Single column layouts, stacked content
|
||||
- **Small**: `sm:` 640px+ - Small tablets, 2-column layouts
|
||||
- **Medium**: `md:` 768px+ - Tablets, 2-3 column layouts
|
||||
- **Large**: `lg:` 1024px+ - Laptops, multi-column layouts
|
||||
- **Extra Large**: `xl:` 1280px+ - Desktops, maximum columns
|
||||
- **2X Large**: `2xl:` 1536px+ - Large desktops, spacious layouts
|
||||
|
||||
## 🎯 Grid Layout Patterns
|
||||
|
||||
### Basic Responsive Grid
|
||||
```html
|
||||
<!-- 1 column on mobile, 2 on tablet, 3 on desktop -->
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
<div>Item 1</div>
|
||||
<div>Item 2</div>
|
||||
<div>Item 3</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
### Asymmetric Layout (2:1 Ratio)
|
||||
```html
|
||||
<!-- Main content + sidebar layout -->
|
||||
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
||||
<div class="lg:col-span-2">Main Content</div>
|
||||
<div class="lg:col-span-1">Sidebar</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
### Mixed Column Spans
|
||||
```html
|
||||
<!-- Complex layouts with different column spans -->
|
||||
<div class="grid grid-cols-1 md:grid-cols-4 gap-6">
|
||||
<div class="md:col-span-4">Full Width Header</div>
|
||||
<div class="md:col-span-3">Main Area</div>
|
||||
<div class="md:col-span-1">Sidebar</div>
|
||||
<div class="md:col-span-2">Half Width</div>
|
||||
<div class="md:col-span-2">Half Width</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
## 🏗️ Project Structure
|
||||
|
||||
```
|
||||
src/
|
||||
├── routes/
|
||||
│ ├── +layout.svelte # Main layout with navigation
|
||||
│ ├── +page.svelte # Homepage with grid examples
|
||||
│ ├── about/
|
||||
│ │ └── +page.svelte # About page (content layout example)
|
||||
│ └── contact/
|
||||
│ └── +page.svelte # Contact page (form layout example)
|
||||
├── app.css # Global styles and custom CSS
|
||||
└── app.html # HTML template
|
||||
```
|
||||
|
||||
## 🎨 Container Patterns
|
||||
|
||||
### Centered Container
|
||||
```html
|
||||
<!-- Standard centered container with responsive padding -->
|
||||
<div class="container mx-auto px-4">
|
||||
<!-- Content -->
|
||||
</div>
|
||||
```
|
||||
|
||||
### Custom Max-Width
|
||||
```html
|
||||
<!-- Custom max-width container -->
|
||||
<div class="max-w-7xl mx-auto px-4">
|
||||
<!-- Content -->
|
||||
</div>
|
||||
```
|
||||
|
||||
### Full Width
|
||||
```html
|
||||
<!-- Full width within parent -->
|
||||
<div class="w-full">
|
||||
<!-- Content -->
|
||||
</div>
|
||||
```
|
||||
|
||||
## 📏 Spacing Patterns
|
||||
|
||||
### Responsive Grid Gaps
|
||||
```html
|
||||
<!-- Responsive spacing between grid items -->
|
||||
<div class="grid gap-4 md:gap-6 lg:gap-8">
|
||||
<!-- Items -->
|
||||
</div>
|
||||
```
|
||||
|
||||
### Responsive Padding
|
||||
```html
|
||||
<!-- Responsive padding -->
|
||||
<div class="p-4 md:p-6 lg:p-8">
|
||||
<!-- Content -->
|
||||
</div>
|
||||
```
|
||||
|
||||
### Responsive Vertical Spacing
|
||||
```html
|
||||
<!-- Responsive vertical spacing between elements -->
|
||||
<div class="space-y-4 md:space-y-6 lg:space-y-8">
|
||||
<!-- Elements -->
|
||||
</div>
|
||||
```
|
||||
|
||||
## 🚀 Getting Started
|
||||
|
||||
1. **Clone or download** this skeleton project
|
||||
2. **Install dependencies**:
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
3. **Start development server**:
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
4. **Start building** your responsive website!
|
||||
|
||||
## 🛠️ Development Commands
|
||||
|
||||
- `npm run dev` - Start development server
|
||||
- `npm run build` - Build for production
|
||||
- `npm run preview` - Preview production build
|
||||
- `npm run check` - Run TypeScript checks
|
||||
|
||||
## 📚 Best Practices
|
||||
|
||||
### Mobile-First Approach
|
||||
Always start with mobile styles and add larger breakpoints:
|
||||
```html
|
||||
<!-- ✅ Good: Mobile-first -->
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
|
||||
|
||||
<!-- ❌ Avoid: Desktop-first -->
|
||||
<div class="grid grid-cols-3 lg:grid-cols-3 md:grid-cols-2 grid-cols-1">
|
||||
```
|
||||
|
||||
### Semantic HTML
|
||||
Use proper HTML5 semantic elements:
|
||||
```html
|
||||
<header>Navigation</header>
|
||||
<main>
|
||||
<section>Content sections</section>
|
||||
<aside>Sidebar content</aside>
|
||||
</main>
|
||||
<footer>Footer content</footer>
|
||||
```
|
||||
|
||||
### Accessibility
|
||||
Include proper ARIA labels and keyboard navigation:
|
||||
```html
|
||||
<button aria-label="Toggle menu" class="lg:hidden">
|
||||
<Menu class="h-6 w-6" />
|
||||
</button>
|
||||
```
|
||||
|
||||
## 🎨 Customization
|
||||
|
||||
### Colors
|
||||
Customize the color scheme in `tailwind.config.js`:
|
||||
```javascript
|
||||
module.exports = {
|
||||
// ... other config
|
||||
daisyui: {
|
||||
themes: [
|
||||
{
|
||||
mytheme: {
|
||||
"primary": "#your-color",
|
||||
"secondary": "#your-color",
|
||||
// ... other colors
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### Breakpoints
|
||||
Add custom breakpoints in `tailwind.config.js`:
|
||||
```javascript
|
||||
module.exports = {
|
||||
theme: {
|
||||
screens: {
|
||||
'xs': '475px',
|
||||
// ... default breakpoints
|
||||
'3xl': '1600px',
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 📦 Tech Stack
|
||||
|
||||
- **[SvelteKit](https://kit.svelte.dev/)** - Full-stack web framework
|
||||
- **[TailwindCSS](https://tailwindcss.com/)** - Utility-first CSS framework
|
||||
- **[DaisyUI](https://daisyui.com/)** - Component library for TailwindCSS
|
||||
- **[Lucide Svelte](https://lucide.dev/)** - Beautiful & consistent icons
|
||||
- **[TypeScript](https://www.typescriptlang.org/)** - Type safety
|
||||
- **[Vite](https://vitejs.dev/)** - Fast build tool
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
This is a skeleton framework meant to be customized for your projects. Feel free to:
|
||||
|
||||
1. Fork this repository
|
||||
2. Customize it for your needs
|
||||
3. Share improvements back to the community
|
||||
|
||||
## 📄 License
|
||||
|
||||
This project is open source and available under the [MIT License](LICENSE).
|
||||
|
||||
## 🆘 Support
|
||||
|
||||
- Check the example pages for common patterns
|
||||
- Review the comprehensive comments in the code
|
||||
- Open an issue for bugs or feature requests
|
||||
|
||||
---
|
||||
|
||||
**Happy building!** 🎉
|
||||
|
||||
Use this skeleton as your starting point for creating beautiful, responsive, and accessible web applications.
|
||||
3463
package-lock.json
generated
Normal file
3463
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
32
package.json
Normal file
32
package.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "responsive-grid-skeleton",
|
||||
"private": true,
|
||||
"version": "1.0.0",
|
||||
"type": "module",
|
||||
"description": "A clean, minimal skeleton for building responsive, grid-based websites with SvelteKit, TailwindCSS, and DaisyUI",
|
||||
"keywords": ["svelte", "sveltekit", "tailwindcss", "daisyui", "responsive", "grid", "skeleton", "framework"],
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview",
|
||||
"prepare": "svelte-kit sync || echo ''",
|
||||
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
||||
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sveltejs/adapter-auto": "^6.1.0",
|
||||
"@sveltejs/kit": "^2.43.2",
|
||||
"@sveltejs/vite-plugin-svelte": "^6.2.0",
|
||||
"autoprefixer": "^10.4.21",
|
||||
"daisyui": "^5.1.27",
|
||||
"postcss": "^8.5.6",
|
||||
"svelte": "^5.39.5",
|
||||
"svelte-check": "^4.3.2",
|
||||
"tailwindcss": "^3.4.18",
|
||||
"typescript": "^5.9.2",
|
||||
"vite": "^7.1.7"
|
||||
},
|
||||
"dependencies": {
|
||||
"lucide-svelte": "^0.544.0"
|
||||
}
|
||||
}
|
||||
6
postcss.config.js
Normal file
6
postcss.config.js
Normal file
@@ -0,0 +1,6 @@
|
||||
export default {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
}
|
||||
35
src/app.css
Normal file
35
src/app.css
Normal file
@@ -0,0 +1,35 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
/* Custom styles for the games shop */
|
||||
@layer components {
|
||||
.card-hover {
|
||||
@apply transition-all duration-300 hover:shadow-lg hover:-translate-y-1;
|
||||
}
|
||||
|
||||
.btn-primary-custom {
|
||||
@apply btn btn-primary hover:btn-primary-focus;
|
||||
}
|
||||
|
||||
.text-gradient {
|
||||
@apply bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent;
|
||||
}
|
||||
}
|
||||
|
||||
/* Custom scrollbar */
|
||||
::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
@apply bg-base-200;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
@apply bg-primary rounded-full;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background-color: hsl(var(--p) / 0.8);
|
||||
}
|
||||
13
src/app.d.ts
vendored
Normal file
13
src/app.d.ts
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
// See https://svelte.dev/docs/kit/types#app.d.ts
|
||||
// for information about these interfaces
|
||||
declare global {
|
||||
namespace App {
|
||||
// interface Error {}
|
||||
// interface Locals {}
|
||||
// interface PageData {}
|
||||
// interface PageState {}
|
||||
// interface Platform {}
|
||||
}
|
||||
}
|
||||
|
||||
export {};
|
||||
13
src/app.html
Normal file
13
src/app.html
Normal file
@@ -0,0 +1,13 @@
|
||||
<!doctype html>
|
||||
<html lang="en" data-theme="gamestore">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>GameHub - Your Local Games Shop</title>
|
||||
<meta name="description" content="Your local destination for board games, card games, and gaming events" />
|
||||
%sveltekit.head%
|
||||
</head>
|
||||
<body data-sveltekit-preload-data="hover" class="min-h-screen bg-base-100">
|
||||
<div style="display: contents">%sveltekit.body%</div>
|
||||
</body>
|
||||
</html>
|
||||
1
src/lib/assets/favicon.svg
Normal file
1
src/lib/assets/favicon.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="107" height="128" viewBox="0 0 107 128"><title>svelte-logo</title><path d="M94.157 22.819c-10.4-14.885-30.94-19.297-45.792-9.835L22.282 29.608A29.92 29.92 0 0 0 8.764 49.65a31.5 31.5 0 0 0 3.108 20.231 30 30 0 0 0-4.477 11.183 31.9 31.9 0 0 0 5.448 24.116c10.402 14.887 30.942 19.297 45.791 9.835l26.083-16.624A29.92 29.92 0 0 0 98.235 78.35a31.53 31.53 0 0 0-3.105-20.232 30 30 0 0 0 4.474-11.182 31.88 31.88 0 0 0-5.447-24.116" style="fill:#ff3e00"/><path d="M45.817 106.582a20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.503 18 18 0 0 1 .624-2.435l.49-1.498 1.337.981a33.6 33.6 0 0 0 10.203 5.098l.97.294-.09.968a5.85 5.85 0 0 0 1.052 3.878 6.24 6.24 0 0 0 6.695 2.485 5.8 5.8 0 0 0 1.603-.704L69.27 76.28a5.43 5.43 0 0 0 2.45-3.631 5.8 5.8 0 0 0-.987-4.371 6.24 6.24 0 0 0-6.698-2.487 5.7 5.7 0 0 0-1.6.704l-9.953 6.345a19 19 0 0 1-5.296 2.326 20.72 20.72 0 0 1-22.237-8.243 19.17 19.17 0 0 1-3.277-14.502 17.99 17.99 0 0 1 8.13-12.052l26.081-16.623a19 19 0 0 1 5.3-2.329 20.72 20.72 0 0 1 22.237 8.243 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-.624 2.435l-.49 1.498-1.337-.98a33.6 33.6 0 0 0-10.203-5.1l-.97-.294.09-.968a5.86 5.86 0 0 0-1.052-3.878 6.24 6.24 0 0 0-6.696-2.485 5.8 5.8 0 0 0-1.602.704L37.73 51.72a5.42 5.42 0 0 0-2.449 3.63 5.79 5.79 0 0 0 .986 4.372 6.24 6.24 0 0 0 6.698 2.486 5.8 5.8 0 0 0 1.602-.704l9.952-6.342a19 19 0 0 1 5.295-2.328 20.72 20.72 0 0 1 22.237 8.242 19.17 19.17 0 0 1 3.277 14.503 18 18 0 0 1-8.13 12.053l-26.081 16.622a19 19 0 0 1-5.3 2.328" style="fill:#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
1
src/lib/index.ts
Normal file
1
src/lib/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
// place files you want to import through the `$lib` alias in this folder.
|
||||
171
src/routes/+layout.svelte
Normal file
171
src/routes/+layout.svelte
Normal file
@@ -0,0 +1,171 @@
|
||||
<!--
|
||||
RESPONSIVE GRID LAYOUT FRAMEWORK
|
||||
|
||||
This layout provides a foundation for building responsive, grid-based websites.
|
||||
|
||||
KEY RESPONSIVE BREAKPOINTS (TailwindCSS):
|
||||
- sm: 640px and up (small tablets)
|
||||
- md: 768px and up (tablets)
|
||||
- lg: 1024px and up (laptops)
|
||||
- xl: 1280px and up (desktops)
|
||||
- 2xl: 1536px and up (large desktops)
|
||||
|
||||
GRID LAYOUT PATTERNS:
|
||||
- Mobile-first approach: Start with single column, expand upward
|
||||
- Use grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 for responsive columns
|
||||
- Use col-span-full for full-width elements across all columns
|
||||
- Use col-span-2 lg:col-span-3 for elements that span multiple columns
|
||||
|
||||
CONTAINER PATTERNS:
|
||||
- container mx-auto px-4: Centered container with responsive padding
|
||||
- max-w-7xl mx-auto: Custom max-width container
|
||||
- w-full: Full width within parent
|
||||
|
||||
SPACING PATTERNS:
|
||||
- gap-4 md:gap-6 lg:gap-8: Responsive grid gaps
|
||||
- p-4 md:p-6 lg:p-8: Responsive padding
|
||||
- space-y-4 md:space-y-6: Responsive vertical spacing
|
||||
-->
|
||||
|
||||
<script lang="ts">
|
||||
import '../app.css';
|
||||
import { Menu, X } from 'lucide-svelte';
|
||||
|
||||
let mobileMenuOpen = $state(false);
|
||||
|
||||
function toggleMobileMenu() {
|
||||
mobileMenuOpen = !mobileMenuOpen;
|
||||
}
|
||||
</script>
|
||||
|
||||
<!--
|
||||
MAIN LAYOUT STRUCTURE
|
||||
- min-h-screen: Ensures full viewport height
|
||||
- bg-base-200: DaisyUI background color that adapts to theme
|
||||
-->
|
||||
<div class="min-h-screen bg-base-200">
|
||||
|
||||
<!--
|
||||
RESPONSIVE NAVIGATION
|
||||
- Hidden on mobile (lg:flex), shows hamburger menu instead
|
||||
- Full navigation on desktop screens
|
||||
-->
|
||||
<nav class="bg-base-100 shadow-lg">
|
||||
<div class="container mx-auto px-4">
|
||||
<div class="flex items-center justify-between h-16">
|
||||
|
||||
<!-- Logo/Brand -->
|
||||
<a href="/" class="text-2xl font-bold text-primary">
|
||||
Skeleton
|
||||
</a>
|
||||
|
||||
<!-- Desktop Navigation (hidden on mobile) -->
|
||||
<div class="hidden lg:flex space-x-8">
|
||||
<a href="/" class="text-base-content hover:text-primary transition-colors">
|
||||
Home
|
||||
</a>
|
||||
<a href="/about" class="text-base-content hover:text-primary transition-colors">
|
||||
About
|
||||
</a>
|
||||
<a href="/contact" class="text-base-content hover:text-primary transition-colors">
|
||||
Contact
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Mobile Menu Button (visible on mobile only) -->
|
||||
<button
|
||||
class="lg:hidden btn btn-ghost btn-square"
|
||||
onclick={toggleMobileMenu}
|
||||
aria-label="Toggle menu"
|
||||
>
|
||||
{#if mobileMenuOpen}
|
||||
<X class="h-6 w-6" />
|
||||
{:else}
|
||||
<Menu class="h-6 w-6" />
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Mobile Navigation Menu (toggleable) -->
|
||||
{#if mobileMenuOpen}
|
||||
<div class="lg:hidden border-t border-base-300">
|
||||
<div class="px-2 pt-2 pb-3 space-y-1">
|
||||
<a href="/" class="block px-3 py-2 text-base-content hover:bg-base-200 rounded">
|
||||
Home
|
||||
</a>
|
||||
<a href="/about" class="block px-3 py-2 text-base-content hover:bg-base-200 rounded">
|
||||
About
|
||||
</a>
|
||||
<a href="/contact" class="block px-3 py-2 text-base-content hover:bg-base-200 rounded">
|
||||
Contact
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!--
|
||||
MAIN CONTENT AREA
|
||||
- flex-1: Takes remaining space between header and footer
|
||||
- This is where page content will be rendered
|
||||
-->
|
||||
<main class="flex-1">
|
||||
<slot />
|
||||
</main>
|
||||
|
||||
<!--
|
||||
RESPONSIVE FOOTER
|
||||
- Uses grid layout that adapts from 1 column on mobile to 3 columns on desktop
|
||||
- Demonstrates responsive grid patterns
|
||||
-->
|
||||
<footer class="bg-base-300 text-base-content mt-auto">
|
||||
<div class="container mx-auto px-4 py-8">
|
||||
|
||||
<!--
|
||||
RESPONSIVE GRID EXAMPLE
|
||||
- grid-cols-1: Single column on mobile
|
||||
- md:grid-cols-2: Two columns on tablets
|
||||
- lg:grid-cols-3: Three columns on desktop
|
||||
- gap-8: Consistent spacing between grid items
|
||||
-->
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
|
||||
<!-- Footer Column 1 -->
|
||||
<div>
|
||||
<h3 class="font-semibold mb-4">Navigation</h3>
|
||||
<nav class="flex flex-col space-y-2">
|
||||
<a href="/" class="link link-hover">Home</a>
|
||||
<a href="/about" class="link link-hover">About</a>
|
||||
<a href="/contact" class="link link-hover">Contact</a>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<!-- Footer Column 2 -->
|
||||
<div>
|
||||
<h3 class="font-semibold mb-4">Information</h3>
|
||||
<div class="space-y-2 text-sm">
|
||||
<p>This is a skeleton framework for responsive grid layouts.</p>
|
||||
<p>Built with SvelteKit, TailwindCSS, and DaisyUI.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Footer Column 3 (hidden on mobile, shows on tablet+) -->
|
||||
<div class="hidden md:block">
|
||||
<h3 class="font-semibold mb-4">Framework</h3>
|
||||
<div class="space-y-2 text-sm">
|
||||
<p>Mobile-first responsive design</p>
|
||||
<p>Grid-based layout system</p>
|
||||
<p>Accessible components</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Footer Bottom -->
|
||||
<div class="divider"></div>
|
||||
<div class="text-center text-sm">
|
||||
<p>© 2024 Responsive Grid Skeleton. Built for scalable web development.</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
327
src/routes/+page.svelte
Normal file
327
src/routes/+page.svelte
Normal file
@@ -0,0 +1,327 @@
|
||||
<!--
|
||||
RESPONSIVE GRID EXAMPLES PAGE
|
||||
|
||||
This page demonstrates various responsive grid patterns and best practices.
|
||||
Use these patterns as templates for building responsive layouts.
|
||||
-->
|
||||
|
||||
<script lang="ts">
|
||||
import { Grid, Layout, Smartphone, Tablet, Monitor } from 'lucide-svelte';
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Responsive Grid Skeleton</title>
|
||||
<meta name="description" content="A skeleton framework for responsive, grid-based web layouts" />
|
||||
</svelte:head>
|
||||
|
||||
<!--
|
||||
HERO SECTION
|
||||
- Full-width hero with centered content
|
||||
- Responsive padding and text sizes
|
||||
-->
|
||||
<section class="bg-gradient-to-br from-primary to-secondary text-primary-content">
|
||||
<div class="container mx-auto px-4 py-16 md:py-24">
|
||||
<div class="text-center max-w-4xl mx-auto">
|
||||
<h1 class="text-4xl md:text-6xl font-bold mb-6">
|
||||
Responsive Grid Framework
|
||||
</h1>
|
||||
<p class="text-xl md:text-2xl mb-8 opacity-90">
|
||||
A clean, minimal skeleton for building responsive, grid-based websites with SvelteKit, TailwindCSS, and DaisyUI.
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4 justify-center">
|
||||
<button class="btn btn-accent btn-lg">Get Started</button>
|
||||
<button class="btn btn-outline btn-lg">View Examples</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
FEATURES SECTION
|
||||
- Responsive grid: 1 column on mobile, 2 on tablet, 3 on desktop
|
||||
- Equal height cards using grid
|
||||
-->
|
||||
<section class="py-16 md:py-24">
|
||||
<div class="container mx-auto px-4">
|
||||
<div class="text-center mb-12">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-4">Framework Features</h2>
|
||||
<p class="text-lg text-base-content/70 max-w-2xl mx-auto">
|
||||
Built with modern web technologies and responsive design principles.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
RESPONSIVE FEATURE GRID
|
||||
- grid-cols-1: Single column on mobile (default)
|
||||
- md:grid-cols-2: Two columns on tablets (768px+)
|
||||
- lg:grid-cols-3: Three columns on desktop (1024px+)
|
||||
- gap-8: Consistent spacing between items
|
||||
-->
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
||||
|
||||
<!-- Feature Card 1 -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<div class="mx-auto mb-4 p-3 bg-primary/10 rounded-full w-fit">
|
||||
<Smartphone class="h-8 w-8 text-primary" />
|
||||
</div>
|
||||
<h3 class="card-title justify-center">Mobile First</h3>
|
||||
<p>Designed with mobile-first responsive principles for optimal performance on all devices.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature Card 2 -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<div class="mx-auto mb-4 p-3 bg-secondary/10 rounded-full w-fit">
|
||||
<Grid class="h-8 w-8 text-secondary" />
|
||||
</div>
|
||||
<h3 class="card-title justify-center">Grid System</h3>
|
||||
<p>Flexible CSS Grid and Flexbox layouts that adapt seamlessly across breakpoints.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feature Card 3 -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<div class="mx-auto mb-4 p-3 bg-accent/10 rounded-full w-fit">
|
||||
<Layout class="h-8 w-8 text-accent" />
|
||||
</div>
|
||||
<h3 class="card-title justify-center">Clean Code</h3>
|
||||
<p>Well-documented, semantic HTML with comprehensive comments and best practices.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
GRID EXAMPLES SECTION
|
||||
- Demonstrates various grid patterns
|
||||
- Shows responsive behavior at different breakpoints
|
||||
-->
|
||||
<section class="py-16 md:py-24 bg-base-200">
|
||||
<div class="container mx-auto px-4">
|
||||
<div class="text-center mb-12">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-4">Grid Layout Examples</h2>
|
||||
<p class="text-lg text-base-content/70 max-w-2xl mx-auto">
|
||||
Common responsive grid patterns you can use in your projects.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
EXAMPLE 1: ASYMMETRIC GRID
|
||||
- Main content takes 2/3 width on desktop
|
||||
- Sidebar takes 1/3 width on desktop
|
||||
- Stacks vertically on mobile
|
||||
-->
|
||||
<div class="mb-16">
|
||||
<h3 class="text-2xl font-semibold mb-6">Asymmetric Layout (2:1 Ratio)</h3>
|
||||
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
||||
|
||||
<!-- Main Content Area (spans 2 columns on desktop) -->
|
||||
<div class="lg:col-span-2">
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">Main Content Area</h4>
|
||||
<p>This area spans 2 columns on desktop (lg:col-span-2) but takes full width on mobile. Perfect for main content, articles, or primary information.</p>
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4 mt-4">
|
||||
<div class="bg-base-200 p-4 rounded">Sub-item 1</div>
|
||||
<div class="bg-base-200 p-4 rounded">Sub-item 2</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar (spans 1 column) -->
|
||||
<div class="lg:col-span-1">
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">Sidebar</h4>
|
||||
<p>This sidebar spans 1 column on desktop but stacks below main content on mobile.</p>
|
||||
<div class="space-y-3 mt-4">
|
||||
<div class="bg-base-200 p-3 rounded text-sm">Widget 1</div>
|
||||
<div class="bg-base-200 p-3 rounded text-sm">Widget 2</div>
|
||||
<div class="bg-base-200 p-3 rounded text-sm">Widget 3</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
EXAMPLE 2: EQUAL COLUMNS
|
||||
- 1 column on mobile
|
||||
- 2 columns on tablet
|
||||
- 4 columns on desktop
|
||||
-->
|
||||
<div class="mb-16">
|
||||
<h3 class="text-2xl font-semibold mb-6">Equal Columns (1→2→4)</h3>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 gap-6">
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title text-lg">Column 1</h4>
|
||||
<p>Equal width columns that adapt: 1 on mobile, 2 on tablet, 4 on desktop.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title text-lg">Column 2</h4>
|
||||
<p>Perfect for product grids, team members, or feature showcases.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title text-lg">Column 3</h4>
|
||||
<p>Uses responsive breakpoints: md:grid-cols-2 xl:grid-cols-4</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title text-lg">Column 4</h4>
|
||||
<p>Maintains consistent spacing with gap-6 across all breakpoints.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
EXAMPLE 3: MIXED SPANS
|
||||
- Demonstrates different column spans
|
||||
- Shows how to create complex layouts
|
||||
-->
|
||||
<div class="mb-16">
|
||||
<h3 class="text-2xl font-semibold mb-6">Mixed Column Spans</h3>
|
||||
<div class="grid grid-cols-1 md:grid-cols-4 gap-6">
|
||||
|
||||
<!-- Full width header -->
|
||||
<div class="md:col-span-4">
|
||||
<div class="card bg-primary text-primary-content shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">Full Width Header (col-span-4)</h4>
|
||||
<p>This element spans all 4 columns on desktop, full width on mobile.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 3-column main area -->
|
||||
<div class="md:col-span-3">
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">Main Area (col-span-3)</h4>
|
||||
<p>Takes up 3/4 of the width on desktop. Great for primary content areas.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 1-column sidebar -->
|
||||
<div class="md:col-span-1">
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title text-lg">Aside</h4>
|
||||
<p>1/4 width sidebar for secondary content.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Two half-width items -->
|
||||
<div class="md:col-span-2">
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">Half Width (col-span-2)</h4>
|
||||
<p>Takes up half the grid width on desktop.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md:col-span-2">
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">Half Width (col-span-2)</h4>
|
||||
<p>Perfect for side-by-side content sections.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
RESPONSIVE BREAKPOINTS SECTION
|
||||
- Visual guide to breakpoints
|
||||
- Shows how content adapts
|
||||
-->
|
||||
<section class="py-16 md:py-24">
|
||||
<div class="container mx-auto px-4">
|
||||
<div class="text-center mb-12">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-4">Responsive Breakpoints</h2>
|
||||
<p class="text-lg text-base-content/70 max-w-2xl mx-auto">
|
||||
Understanding how layouts adapt across different screen sizes.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Breakpoint indicators -->
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
|
||||
|
||||
<!-- Mobile -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<Smartphone class="h-12 w-12 mx-auto mb-4 text-primary" />
|
||||
<h3 class="card-title justify-center">Mobile</h3>
|
||||
<p class="text-sm">Default (0px+)</p>
|
||||
<p class="text-xs text-base-content/70">Single column layouts, stacked content</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Tablet -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<Tablet class="h-12 w-12 mx-auto mb-4 text-secondary" />
|
||||
<h3 class="card-title justify-center">Tablet</h3>
|
||||
<p class="text-sm">md: 768px+</p>
|
||||
<p class="text-xs text-base-content/70">2-column layouts, condensed navigation</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Desktop -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<Monitor class="h-12 w-12 mx-auto mb-4 text-accent" />
|
||||
<h3 class="card-title justify-center">Desktop</h3>
|
||||
<p class="text-sm">lg: 1024px+</p>
|
||||
<p class="text-xs text-base-content/70">Multi-column layouts, full navigation</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Large Desktop -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<Monitor class="h-12 w-12 mx-auto mb-4 text-info" />
|
||||
<h3 class="card-title justify-center">Large</h3>
|
||||
<p class="text-sm">xl: 1280px+</p>
|
||||
<p class="text-xs text-base-content/70">Maximum columns, spacious layouts</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
CALL TO ACTION SECTION
|
||||
- Simple centered content
|
||||
- Responsive button layout
|
||||
-->
|
||||
<section class="py-16 md:py-24 bg-gradient-to-r from-primary to-secondary text-primary-content">
|
||||
<div class="container mx-auto px-4 text-center">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-6">Ready to Build?</h2>
|
||||
<p class="text-xl mb-8 opacity-90 max-w-2xl mx-auto">
|
||||
Use this skeleton as your starting point for responsive, grid-based web applications.
|
||||
</p>
|
||||
<div class="flex flex-col sm:flex-row gap-4 justify-center">
|
||||
<button class="btn btn-accent btn-lg">Start Building</button>
|
||||
<button class="btn btn-outline btn-lg">View Documentation</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
230
src/routes/about/+page.svelte
Normal file
230
src/routes/about/+page.svelte
Normal file
@@ -0,0 +1,230 @@
|
||||
<!--
|
||||
ABOUT PAGE - EXAMPLE CONTENT LAYOUT
|
||||
|
||||
This page demonstrates how to structure content using the responsive grid system.
|
||||
Shows various layout patterns for text-heavy pages.
|
||||
-->
|
||||
|
||||
<script lang="ts">
|
||||
import { Code, Palette, Zap } from 'lucide-svelte';
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>About - Responsive Grid Skeleton</title>
|
||||
<meta name="description" content="Learn about the responsive grid framework and its features" />
|
||||
</svelte:head>
|
||||
|
||||
<!--
|
||||
PAGE HEADER
|
||||
- Full-width header with background
|
||||
- Centered content with responsive padding
|
||||
-->
|
||||
<section class="bg-gradient-to-r from-secondary to-accent text-secondary-content">
|
||||
<div class="container mx-auto px-4 py-16">
|
||||
<div class="text-center max-w-3xl mx-auto">
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-6">About This Framework</h1>
|
||||
<p class="text-xl opacity-90">
|
||||
A comprehensive guide to building responsive, accessible, and maintainable web layouts.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
MAIN CONTENT SECTION
|
||||
- Two-column layout on desktop
|
||||
- Single column on mobile
|
||||
- Demonstrates content + sidebar pattern
|
||||
-->
|
||||
<section class="py-16 md:py-24">
|
||||
<div class="container mx-auto px-4">
|
||||
|
||||
<!--
|
||||
CONTENT GRID
|
||||
- lg:grid-cols-4: 4-column grid on desktop
|
||||
- Content spans 3 columns, sidebar spans 1
|
||||
- Stacks vertically on mobile
|
||||
-->
|
||||
<div class="grid grid-cols-1 lg:grid-cols-4 gap-8">
|
||||
|
||||
<!-- Main Content Area -->
|
||||
<div class="lg:col-span-3">
|
||||
<div class="prose prose-lg max-w-none">
|
||||
<h2>What is This Framework?</h2>
|
||||
<p>
|
||||
This responsive grid skeleton is designed to be a starting point for modern web applications.
|
||||
It combines the power of SvelteKit's reactive framework with TailwindCSS's utility-first
|
||||
approach and DaisyUI's beautiful components.
|
||||
</p>
|
||||
|
||||
<h3>Key Principles</h3>
|
||||
<p>
|
||||
The framework is built around several core principles that ensure your websites are
|
||||
fast, accessible, and maintainable:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>Mobile-First Design:</strong> All layouts start with mobile and scale up</li>
|
||||
<li><strong>Semantic HTML:</strong> Proper use of HTML5 semantic elements</li>
|
||||
<li><strong>Accessibility:</strong> ARIA labels, keyboard navigation, and screen reader support</li>
|
||||
<li><strong>Performance:</strong> Optimized for fast loading and smooth interactions</li>
|
||||
</ul>
|
||||
|
||||
<h3>Grid System Overview</h3>
|
||||
<p>
|
||||
The grid system uses CSS Grid as its foundation, providing flexible and powerful
|
||||
layout capabilities. Here are the key concepts:
|
||||
</p>
|
||||
|
||||
<!--
|
||||
NESTED GRID EXAMPLE
|
||||
- Shows how grids can be nested within content
|
||||
-->
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 my-8">
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">Responsive Columns</h4>
|
||||
<p class="text-sm">
|
||||
Use classes like <code>grid-cols-1 md:grid-cols-2 lg:grid-cols-3</code>
|
||||
to create responsive column layouts.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title">Column Spanning</h4>
|
||||
<p class="text-sm">
|
||||
Use <code>col-span-2</code>, <code>col-span-3</code>, etc. to make
|
||||
elements span multiple columns.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3>Component Architecture</h3>
|
||||
<p>
|
||||
The framework encourages a component-based approach where each piece of UI
|
||||
is self-contained and reusable. This makes maintenance easier and promotes
|
||||
consistency across your application.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="lg:col-span-1">
|
||||
<div class="sticky top-8 space-y-6">
|
||||
|
||||
<!-- Quick Stats Card -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h3 class="card-title text-lg">Quick Stats</h3>
|
||||
<div class="space-y-3">
|
||||
<div class="flex justify-between">
|
||||
<span class="text-sm">Framework Size</span>
|
||||
<span class="text-sm font-semibold">~50KB</span>
|
||||
</div>
|
||||
<div class="flex justify-between">
|
||||
<span class="text-sm">Components</span>
|
||||
<span class="text-sm font-semibold">15+</span>
|
||||
</div>
|
||||
<div class="flex justify-between">
|
||||
<span class="text-sm">Breakpoints</span>
|
||||
<span class="text-sm font-semibold">5</span>
|
||||
</div>
|
||||
<div class="flex justify-between">
|
||||
<span class="text-sm">Browser Support</span>
|
||||
<span class="text-sm font-semibold">Modern</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Technology Stack -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h3 class="card-title text-lg">Tech Stack</h3>
|
||||
<div class="space-y-3">
|
||||
<div class="flex items-center gap-3">
|
||||
<Code class="h-5 w-5 text-primary" />
|
||||
<span class="text-sm">SvelteKit 2.0</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-3">
|
||||
<Palette class="h-5 w-5 text-secondary" />
|
||||
<span class="text-sm">TailwindCSS 3.4</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-3">
|
||||
<Zap class="h-5 w-5 text-accent" />
|
||||
<span class="text-sm">DaisyUI 5.1</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Navigation -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h3 class="card-title text-lg">Page Sections</h3>
|
||||
<nav class="space-y-2">
|
||||
<a href="#principles" class="block text-sm link link-hover">Key Principles</a>
|
||||
<a href="#grid" class="block text-sm link link-hover">Grid System</a>
|
||||
<a href="#components" class="block text-sm link link-hover">Components</a>
|
||||
<a href="#examples" class="block text-sm link link-hover">Examples</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
FEATURES SECTION
|
||||
- Three-column grid showcasing framework features
|
||||
- Responsive: 1 column on mobile, 3 on desktop
|
||||
-->
|
||||
<section class="py-16 md:py-24 bg-base-200">
|
||||
<div class="container mx-auto px-4">
|
||||
<div class="text-center mb-12">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-4">Why Choose This Framework?</h2>
|
||||
<p class="text-lg text-base-content/70 max-w-2xl mx-auto">
|
||||
Built with developer experience and user performance in mind.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<Code class="h-12 w-12 mx-auto mb-4 text-primary" />
|
||||
<h3 class="card-title justify-center">Developer Friendly</h3>
|
||||
<p>
|
||||
Clean, well-documented code with comprehensive comments explaining
|
||||
every pattern and best practice.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<Palette class="h-12 w-12 mx-auto mb-4 text-secondary" />
|
||||
<h3 class="card-title justify-center">Highly Customizable</h3>
|
||||
<p>
|
||||
Built with TailwindCSS and DaisyUI, making it easy to customize
|
||||
colors, spacing, and components to match your brand.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<Zap class="h-12 w-12 mx-auto mb-4 text-accent" />
|
||||
<h3 class="card-title justify-center">Performance Optimized</h3>
|
||||
<p>
|
||||
Minimal bundle size, efficient CSS, and optimized for Core Web Vitals
|
||||
to ensure fast loading times.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
283
src/routes/contact/+page.svelte
Normal file
283
src/routes/contact/+page.svelte
Normal file
@@ -0,0 +1,283 @@
|
||||
<!--
|
||||
CONTACT PAGE - FORM LAYOUT EXAMPLE
|
||||
|
||||
This page demonstrates form layouts and mixed content patterns.
|
||||
Shows how to create effective contact/form pages with the grid system.
|
||||
-->
|
||||
|
||||
<script lang="ts">
|
||||
import { Mail, MessageSquare, Send, Github, Twitter, Linkedin } from 'lucide-svelte';
|
||||
|
||||
let formData = $state({
|
||||
name: '',
|
||||
email: '',
|
||||
subject: '',
|
||||
message: ''
|
||||
});
|
||||
|
||||
function handleSubmit(event: Event) {
|
||||
event.preventDefault();
|
||||
// Handle form submission here
|
||||
console.log('Form submitted:', formData);
|
||||
// Reset form or show success message
|
||||
}
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Contact - Responsive Grid Skeleton</title>
|
||||
<meta name="description" content="Get in touch about the responsive grid framework" />
|
||||
</svelte:head>
|
||||
|
||||
<!--
|
||||
PAGE HEADER
|
||||
- Centered content with gradient background
|
||||
-->
|
||||
<section class="bg-gradient-to-r from-accent to-info text-accent-content">
|
||||
<div class="container mx-auto px-4 py-16">
|
||||
<div class="text-center max-w-3xl mx-auto">
|
||||
<h1 class="text-4xl md:text-5xl font-bold mb-6">Get In Touch</h1>
|
||||
<p class="text-xl opacity-90">
|
||||
Have questions about the framework? Want to contribute? We'd love to hear from you.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
MAIN CONTACT SECTION
|
||||
- Two-column layout: form + contact info
|
||||
- Responsive: stacks on mobile, side-by-side on desktop
|
||||
-->
|
||||
<section class="py-16 md:py-24">
|
||||
<div class="container mx-auto px-4">
|
||||
|
||||
<!--
|
||||
CONTACT GRID
|
||||
- lg:grid-cols-3: 3-column grid on desktop
|
||||
- Form spans 2 columns, contact info spans 1
|
||||
-->
|
||||
<div class="grid grid-cols-1 lg:grid-cols-3 gap-12">
|
||||
|
||||
<!-- Contact Form (spans 2 columns on desktop) -->
|
||||
<div class="lg:col-span-2">
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title text-2xl mb-6">
|
||||
<MessageSquare class="h-6 w-6" />
|
||||
Send us a Message
|
||||
</h2>
|
||||
|
||||
<form onsubmit={handleSubmit} class="space-y-6">
|
||||
|
||||
<!--
|
||||
FORM GRID
|
||||
- Two-column layout for name/email on desktop
|
||||
- Single column on mobile
|
||||
-->
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<div class="form-control">
|
||||
<label class="label" for="name">
|
||||
<span class="label-text">Name *</span>
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
id="name"
|
||||
bind:value={formData.name}
|
||||
placeholder="Your full name"
|
||||
class="input input-bordered w-full"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="form-control">
|
||||
<label class="label" for="email">
|
||||
<span class="label-text">Email *</span>
|
||||
</label>
|
||||
<input
|
||||
type="email"
|
||||
id="email"
|
||||
bind:value={formData.email}
|
||||
placeholder="your.email@example.com"
|
||||
class="input input-bordered w-full"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-control">
|
||||
<label class="label" for="subject">
|
||||
<span class="label-text">Subject *</span>
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
id="subject"
|
||||
bind:value={formData.subject}
|
||||
placeholder="What's this about?"
|
||||
class="input input-bordered w-full"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="form-control">
|
||||
<label class="label" for="message">
|
||||
<span class="label-text">Message *</span>
|
||||
</label>
|
||||
<textarea
|
||||
id="message"
|
||||
bind:value={formData.message}
|
||||
class="textarea textarea-bordered h-32"
|
||||
placeholder="Tell us more about your question or feedback..."
|
||||
required
|
||||
></textarea>
|
||||
</div>
|
||||
|
||||
<div class="form-control">
|
||||
<button type="submit" class="btn btn-primary btn-lg">
|
||||
<Send class="h-5 w-5" />
|
||||
Send Message
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Contact Information Sidebar -->
|
||||
<div class="lg:col-span-1">
|
||||
<div class="space-y-6">
|
||||
|
||||
<!-- Contact Info Card -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h3 class="card-title">
|
||||
<Mail class="h-5 w-5" />
|
||||
Contact Info
|
||||
</h3>
|
||||
<div class="space-y-4">
|
||||
<div>
|
||||
<h4 class="font-semibold">Email</h4>
|
||||
<p class="text-sm text-base-content/70">hello@gridframework.dev</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold">Response Time</h4>
|
||||
<p class="text-sm text-base-content/70">Usually within 24 hours</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold">Best For</h4>
|
||||
<p class="text-sm text-base-content/70">
|
||||
Technical questions, bug reports, feature requests, and general feedback.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Social Links Card -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h3 class="card-title">Follow Us</h3>
|
||||
<div class="flex gap-4">
|
||||
<a href="#" class="btn btn-circle btn-outline btn-sm">
|
||||
<Github class="h-4 w-4" />
|
||||
</a>
|
||||
<a href="#" class="btn btn-circle btn-outline btn-sm">
|
||||
<Twitter class="h-4 w-4" />
|
||||
</a>
|
||||
<a href="#" class="btn btn-circle btn-outline btn-sm">
|
||||
<Linkedin class="h-4 w-4" />
|
||||
</a>
|
||||
</div>
|
||||
<p class="text-sm text-base-content/70 mt-3">
|
||||
Stay updated with the latest framework updates and tips.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- FAQ Card -->
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h3 class="card-title">Quick FAQ</h3>
|
||||
<div class="space-y-3">
|
||||
<div>
|
||||
<h4 class="font-semibold text-sm">Is this framework free?</h4>
|
||||
<p class="text-xs text-base-content/70">Yes, completely open source and free to use.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold text-sm">Can I contribute?</h4>
|
||||
<p class="text-xs text-base-content/70">Absolutely! Check our GitHub for contribution guidelines.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-semibold text-sm">Browser support?</h4>
|
||||
<p class="text-xs text-base-content/70">All modern browsers (Chrome, Firefox, Safari, Edge).</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!--
|
||||
ADDITIONAL RESOURCES SECTION
|
||||
- Three-column grid with helpful resources
|
||||
- Demonstrates equal-width columns
|
||||
-->
|
||||
<section class="py-16 md:py-24 bg-base-200">
|
||||
<div class="container mx-auto px-4">
|
||||
<div class="text-center mb-12">
|
||||
<h2 class="text-3xl md:text-4xl font-bold mb-4">Other Ways to Connect</h2>
|
||||
<p class="text-lg text-base-content/70 max-w-2xl mx-auto">
|
||||
Multiple channels to get help and stay informed about the framework.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
RESOURCES GRID
|
||||
- Equal columns: 1 on mobile, 3 on desktop
|
||||
- Perfect for showcasing multiple options
|
||||
-->
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<Github class="h-12 w-12 mx-auto mb-4 text-primary" />
|
||||
<h3 class="card-title justify-center">GitHub</h3>
|
||||
<p class="mb-4">
|
||||
View source code, report issues, and contribute to the project.
|
||||
</p>
|
||||
<div class="card-actions justify-center">
|
||||
<button class="btn btn-primary btn-sm">View Repository</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<MessageSquare class="h-12 w-12 mx-auto mb-4 text-secondary" />
|
||||
<h3 class="card-title justify-center">Community</h3>
|
||||
<p class="mb-4">
|
||||
Join our Discord community for real-time help and discussions.
|
||||
</p>
|
||||
<div class="card-actions justify-center">
|
||||
<button class="btn btn-secondary btn-sm">Join Discord</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card bg-base-100 shadow-lg">
|
||||
<div class="card-body text-center">
|
||||
<Mail class="h-12 w-12 mx-auto mb-4 text-accent" />
|
||||
<h3 class="card-title justify-center">Newsletter</h3>
|
||||
<p class="mb-4">
|
||||
Get monthly updates about new features and best practices.
|
||||
</p>
|
||||
<div class="card-actions justify-center">
|
||||
<button class="btn btn-accent btn-sm">Subscribe</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
3
static/robots.txt
Normal file
3
static/robots.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
# allow crawling everything by default
|
||||
User-agent: *
|
||||
Disallow:
|
||||
18
svelte.config.js
Normal file
18
svelte.config.js
Normal file
@@ -0,0 +1,18 @@
|
||||
import adapter from '@sveltejs/adapter-auto';
|
||||
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
||||
|
||||
/** @type {import('@sveltejs/kit').Config} */
|
||||
const config = {
|
||||
// Consult https://svelte.dev/docs/kit/integrations
|
||||
// for more information about preprocessors
|
||||
preprocess: vitePreprocess(),
|
||||
|
||||
kit: {
|
||||
// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
|
||||
// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
|
||||
// See https://svelte.dev/docs/kit/adapters for more information about adapters.
|
||||
adapter: adapter()
|
||||
}
|
||||
};
|
||||
|
||||
export default config;
|
||||
27
tailwind.config.js
Normal file
27
tailwind.config.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
export default {
|
||||
content: ['./src/**/*.{html,js,svelte,ts}'],
|
||||
theme: {
|
||||
extend: {},
|
||||
},
|
||||
plugins: [require('daisyui'), require('@tailwindcss/typography')],
|
||||
daisyui: {
|
||||
themes: [
|
||||
{
|
||||
gamestore: {
|
||||
"primary": "#3b82f6",
|
||||
"secondary": "#8b5cf6",
|
||||
"accent": "#06b6d4",
|
||||
"neutral": "#1f2937",
|
||||
"base-100": "#ffffff",
|
||||
"info": "#0ea5e9",
|
||||
"success": "#10b981",
|
||||
"warning": "#f59e0b",
|
||||
"error": "#ef4444",
|
||||
},
|
||||
},
|
||||
"dark",
|
||||
"light",
|
||||
],
|
||||
},
|
||||
}
|
||||
19
tsconfig.json
Normal file
19
tsconfig.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"extends": "./.svelte-kit/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"allowJs": true,
|
||||
"checkJs": true,
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"resolveJsonModule": true,
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"strict": true,
|
||||
"moduleResolution": "bundler"
|
||||
}
|
||||
// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
|
||||
// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
|
||||
//
|
||||
// To make changes to top-level options such as include and exclude, we recommend extending
|
||||
// the generated config; see https://svelte.dev/docs/kit/configuration#typescript
|
||||
}
|
||||
11
vite.config.ts
Normal file
11
vite.config.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { sveltekit } from '@sveltejs/kit/vite';
|
||||
import { defineConfig } from 'vite';
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [sveltekit()],
|
||||
server: {
|
||||
host: '0.0.0.0',
|
||||
port: 12000,
|
||||
allowedHosts: true
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user