Skip to main content

Instalacja

Ostatnia aktualizacja:

Zainstaluj bibliotekę Frutjam UI obsługującą tylko CSS z Tailwind CSS v4, UnoCSS lub bez żadnego etapu kompilacji. Ponad 65 dostępnych komponentów, zero JavaScript, WCAG AA. Współpracuje z Django, HTMX, Laravel, React i dowolnym stosem.

Zainstalować

bash
npm i -D frutjam

Następnie wybierz linię poniżej odpowiadającą Twojej konfiguracji. Każdy daje te same komponenty.

Twoja konfiguracjaCo dodaćStatki
Tailwind CSS v4@plugin "frutjam";tylko to, czego używasz
UnoCSSpresetFrutjam()tylko to, czego używasz
Vite, Astro, Rails, zwykły CSSimport 'frutjam/css'wszystkie komponenty, 30 KB spakowane
Brak etapu kompilacjiA <link> etykietkawszystkie komponenty

Tailwind CSS v4

Potrzebujesz pracy CSS wiatru tylnego projekt, plus Węzeł i np. Frutjam wymaga Tailwinda 4.

Dodaj Frutjam do swojego input.css z @plugin dyrektywa:

css
1
2
@import "tailwindcss";
@plugin "frutjam";

To jest cała konfiguracja. Wszystkie ponad 65 komponentów jest dostępnych natychmiast, a Tailwind dostarcza tylko te, których używa Twój znacznik.

UnoCSS

Frutjam dostarcza gotowe ustawienia, więc UnoCSS generuje tylko te komponenty, których używasz, w taki sam sposób, jak robi to wtyczka Tailwind.

js
1
2
3
4
5
6
7
// uno.config.js
import { defineConfig, presetWind4 } from 'unocss';
import { presetFrutjam } from 'frutjam/unocss';

export default defineConfig({
  presets: [presetWind4(), presetFrutjam()],
});

Każda klasa działa tak samo jak w Tailwind, podobnie jak warianty:

html
1
2
3
<button class="btn btn-error btn-xl">Delete</button>
<button class="md:btn-error">Red from the medium breakpoint up</button>
<div class="hover:card-primary">Fills on hover</div>

Dodać presetAttributify() a nazwa komponentu staje się atrybutem, a każda wartość jest traktowana jako jej wariant:

html
1
2
<button btn="error xl">Delete</button>
<button btn="md:(error xl)">Red and large from the medium breakpoint up</button>

Druga linia potrzebuje transformerVariantGroup() dla składni nawiasów. Należy pamiętać, że atrybut taki jak btn nie jest prawidłowym kodem HTML, więc jeśli sprawdzisz poprawność znaczników, użyj formularza klasy lub UnoCSS un- prefiks.

Opcje

OpcjaDomyślnyZamiar
preflighttrueEmituje tokeny, resety i motywy Frutjama. Zabierać się do pracy false jeśli już importujesz frutjam/css/base się.
prefix''Pasuje do wtyczki Tailwind prefix, Więc 'fj' daje ci fj-btn I fj-btn="error".
layer'frutjam'Warstwa kaskadowa, do której emitowane są składniki. Sortuje poniżej narzędzi, więc narzędzie zawsze wygrywa z komponentem, niezależnie od kolejności ustawień wstępnych.

Komponent łącza wymaga jednej linii konfiguracji

UnoCSS traktuje link jako wariant dla CSS :link pseudoklasa, a jej domyślne separatory obejmują -. Więc link-2xl czyta się jako „2xl, gdy nieodwiedzany” zamiast jako nazwa klasy i nic nie jest generowane. Ma to wpływ tylko na ten komponent i tylko na link-* modyfikatory.

Albo powiedz UnoCSS, aby podzielił się na same dwukropki:

js
1
2
3
4
export default defineConfig({
  separators: [':'],
  presets: [presetWind4(), presetFrutjam()],
});

Lub użyj przedrostka, który umieszcza coś innego niż link z przodu imienia:

js
presets: [presetWind4(), presetFrutjam({ prefix: 'fj' })],   // fj-link-2xl

Każdy inny element pozostaje nienaruszony. link jest jedyną z 57, której nazwa koliduje z pseudoklasą.

Brak silnika użytkowego

Frutjam jest zbudowany przy użyciu Tailwinda, ale komponenty kompilują się do zwykłego CSS, który odczytuje niestandardowe właściwości. Jeśli Twój projekt w ogóle nie korzysta z silnika narzędziowego, zaimportuj arkusz stylów zamiast wtyczki:

js
import 'frutjam/css';

To jest cała konfiguracja. Każda klasa komponentów działa, motywy przełączają się za pomocą data-theme jak zwykle i nic więcej nie trzeba. Ma 30 KB spakowanego w formacie gzip i zawiera podstawowe style, zarówno motywy, jak i wszystkie ponad 65 komponentów.

Zamiast tego wciągnij tylko to, czego potrzebujesz:

js
1
2
3
4
import 'frutjam/css/base';              // tokens and reset, always needed
import 'frutjam/css/components/button';
import 'frutjam/css/components/card';
import 'frutjam/css/themes/darkberry';  // optional

Lub bez etapu kompilacji:

html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/frutjam@2/dist/frutjam.components.css">
Zainstalowany jako wtyczka Tailwind, Frutjam dostarcza tylko te komponenty, których używasz. Zaimportowany jako arkusz stylów zawiera wszystkie, ponieważ nie ma etapu kompilacji odczytującego znaczniki.

Brak etapu kompilacji

Upuść tag i zacznij pisać znaczniki. Użyj tego do prototypu lub strony, której nie budujesz, a nie do produkcji, ponieważ zawiera każdy komponent.

html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/frutjam@2/dist/frutjam.components.css">

Aby poeksperymentować z narzędziami Tailwind na tej samej stronie, dodaj obok niego wersję przeglądarki Tailwind:

html
1
2
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/frutjam@2/dist/frutjam.min.css">
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>

JavaScript i React: opcjonalne, niewymagane

Frutjam jest najpierw natywny i CSS. Zdecydowana większość komponentów: przyciski, plakietki, karty, formularze, alerty i inne: działa z czystym HTML i CSS, nie wymaga JavaScriptu. Natywne elementy HTML, takie jak <dialog>, <details>, I <input type="checkbox"> obsługiwać interaktywność tam, gdzie przeglądarki już ją obsługują. Wszystkie komponenty są dostępne w formacie WCAG AA od razu po wyjęciu z pudełka i współpracują z Django, HTMX, Laravel, React, Next.js i dowolnym stosem.

Niewielka liczba komponentów nie ma natywnego odpowiednika HTML (powiadomienia tostowe, filtrowanie comboboxów, kontrolki karuzeli). Tylko w takich przypadkach Frutjam dostarcza lekkich opcjonalnych pomocników.

Wanilia JS: frutjam/js

Pomocnicy modułów ES niezależny od platformy dla komponentów, które ich potrzebują. Dołącz do dowolnego elementu DOM, nie wymaga frameworka.

js
1
2
3
4
5
6
import { createModal } from 'frutjam/js'

const modal = createModal(document.getElementById('myModal'))
modal.open()   // calls showModal()
modal.close()  // calls close()
modal.toggle()

Haki reagujące: frutjam/react

Thin React otacza te same natywne wywołania DOM. Każdy hak zwraca a ref dołączasz do elementu i metod jego kontrolowania, żadnych dodatkowych zależności poza samym Reactem.

js
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import { useModal } from 'frutjam/react'

export default function App() {
  const modal = useModal()
  return (
    <>
      <button onClick={modal.open}>Open</button>
      <dialog ref={modal.ref} className="modal">...</dialog>
    </>
  )
}

Dostępne dla: useModal, useDrawer, useCollapsible, useTooltip, useTabs, useToast, useCarousel, useCombobox.

Następne kroki

Po zainstalowaniu wypróbuj element przycisku aby zobaczyć Frutjama w akcji lub poznać całość biblioteka komponentów.

Integracja edytora AI

Używasz kodu Claude'a, kursora lub innego edytora AI?

Cherry MCP przenosi pełną bibliotekę komponentów Frutjam bezpośrednio do kontekstu edytora AI, dokładne nazwy klas, aktualne dokumenty, bez kopiowania i wklejania.

Dowiedz się więcej o Cherry MCP →

Projekt startowy

Budowanie z Django?

Działający projekt Django 6 z już podłączonym Frutjamem, kontami, pulpitem nawigacyjnym, motywami i przykładem CRUD wspieranym przecenami. Sklonuj go i zacznij budować.

Zdobądź starter Django →

Chcesz zrozumieć tok myślenia stojący za podejściem Frutjam opartym na CSS? Przeczytaj, dlaczego zbudowaliśmy to w ten sposób →