Przejdź do treści

Radio Group

Stabilny

Pozwala wybrać dokładnie jedną opcję z niewielkiego zestawu, pokazując wszystkie opcje naraz.

Instalacja

$ pnpm dlx shadcn@latest add https://www.prfct.dev/r/radio-group.json

Użycie

import { Field, FieldLabel } from "@/components/ui/field"
import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"
<RadioGroup defaultValue="daily">
  <Field orientation="horizontal">
    <RadioGroupItem value="daily" id="daily" />
    <FieldLabel htmlFor="daily">Daily summary</FieldLabel>
  </Field>
  <Field orientation="horizontal">
    <RadioGroupItem value="weekly" id="weekly" />
    <FieldLabel htmlFor="weekly">Weekly summary</FieldLabel>
  </Field>
</RadioGroup>

Zaznaczony przycisk radiowy wypełnia się kolorem marki, a jego kropka sprężyście wskakuje na miejsce.

Przykłady

Z opisami

Gdy opcje wymagają wyjaśnienia, dodaj do każdej etykiety opis w FieldContent. Użytkownicy porównują opcje, czytając opisy jeden obok drugiego — to jeden z głównych powodów, by wybrać przyciski radiowe zamiast listy wyboru.

Karty wyboru

Opakuj każde pole w FieldLabel, aby cała karta była klikalna. Karty sprawdzają się przy decyzjach, za którymi stoi cena, limit lub lista funkcji — wyborze planu, szybkości dostawy, środowiska wdrożenia.

Układ poziomy

Krótkie opcje ułóż w rzędzie, gdy tworzą skalę albo zestaw równorzędnych wariantów. Nazwij grupę za pomocą FieldSetFieldLegend — rząd przycisków radiowych bez pytania jest niejednoznaczny.

Gęstość tabeli

Stany

Wyłącz grupę, gdy wybór jeszcze nie ma zastosowania, i obok wyjaśnij dlaczego. Do walidacji ustaw required, oznacz elementy przez aria-invalid i pokaż FieldError pod grupą.

Okres rozliczeniowy
Szybkość dostawy

Wytyczne

Kiedy używać

  • Do wyboru dokładnie jednej opcji spośród dwóch do mniej więcej siedmiu.
  • Gdy warto widzieć i porównywać wszystkie opcje jednocześnie.

Kiedy nie używać

  • Do wyboru kilku opcji — użyj Checkbox.
  • Do pojedynczego ustawienia typu włącz/wyłącz — użyj Switch lub pola wyboru.
  • Gdy opcji jest więcej niż około siedmiu albo brakuje miejsca — użyj Select.
  • Do kompaktowych, segmentowych wyborów na paskach narzędzi (tryby widoku, wyrównanie) — użyj Toggle Group.

Domyślny wybór

Zaznacz z góry najczęściej wybieraną lub najbezpieczniejszą opcję — gdy ktoś już dokona wyboru, grupy przycisków radiowych nie da się przywrócić do stanu „nic nie zaznaczono”, więc pusta grupa ma sens tylko wtedy, gdy wybór musi być świadomy. W takim przypadku go waliduj.

Standardowa — bezpłatna

Ekspresowa — 12 zł

Dobrze.Rozsądna wartość domyślna — zmienia się ją tylko w razie potrzeby.

Zapisz się do newslettera

Źle.Pojedynczego przycisku radiowego nie da się odznaczyć — użyj zamiast niego pola wyboru.

Kolejność

Układaj opcje logicznie — według wielkości, czasu lub prawdopodobieństwa — i trzymaj listę w pionie, chyba że opcje są bardzo krótkie. Wyrównaj przyciski radiowe do lewej, aby etykiety tworzyły równą kolumnę, którą łatwo przebiec wzrokiem.

Dostępność

RadioGroup renderuje role="radiogroup", a każdy element — role="radio"aria-checked. Grupa zajmuje jedno miejsce w kolejności tabulacji, a fokus wędruje w jej obrębie (roving focus), zgodnie ze wzorcem ARIA dla grupy przycisków radiowych.

KlawiszDziałanie
Tab
Przenosi fokus do grupy — na zaznaczony przycisk albo na pierwszy, jeśli żaden nie jest zaznaczony — i z niej na zewnątrz.
Przechodzi do następnego przycisku i go zaznacza; po ostatnim wraca na początek.
Przechodzi do poprzedniego przycisku i go zaznacza; przed pierwszym przeskakuje na koniec.
Spacja
Zaznacza przycisk z fokusem, jeśli nie jest jeszcze zaznaczony.
  • Nazwij grupę. Użyj FieldSet + FieldLegend albo aria-label / aria-labelledby na RadioGroup, aby pytanie było odczytywane razem z każdą opcją.
  • Nadaj etykietę każdemu przyciskowi — przez FieldLabel wskazujący jego id. Base UI łączy etykietę z widocznym przyciskiem, więc kliknięcie tekstu go zaznacza.
  • Krawędzie i cele dotyku. Obramowanie przycisków radiowych korzysta z tokenu input (3:1, WCAG 1.4.11), a wokół okręgu o średnicy 16 px jest obszar kliknięcia 24 × 24 px.

Dokumentacja API

RadioGroup

Renderuje <div role="radiogroup">. Przyjmuje wszystkie propsy RadioGroup z Base UI.

PropTypDomyślnie
value

Zaznaczona wartość. W trybie kontrolowanym używaj razem z onValueChange.

ValueBrak wartości domyślnej
defaultValue

Wartość zaznaczona na starcie, gdy grupa jest niekontrolowana.

ValueBrak wartości domyślnej
onValueChange

Wywoływana, gdy zmienia się zaznaczenie.

(value, details) => voidBrak wartości domyślnej
name

Pozwala wysłać zaznaczoną wartość razem z formularzem.

stringBrak wartości domyślnej
required

Wymaga wyboru przed wysłaniem formularza.

booleanfalse
disabled

Wyłącza wszystkie przyciski w grupie.

booleanfalse
readOnly

Pokazuje zaznaczenie, ale nie pozwala go zmienić.

booleanfalse

RadioGroupItem

Renderuje <span role="radio"> z ukrytym polem input. Przyjmuje wszystkie propsy Radio.Root z Base UI.

PropTypDomyślnie
valuewymagany

Wartość, którą reprezentuje ten przycisk.

ValueBrak wartości domyślnej
disabled

Wyłącza tylko ten przycisk.

booleanfalse
id

Pozwala wskazać przycisk z FieldLabel przez htmlFor.

stringBrak wartości domyślnej
aria-invalid

Pokazuje stan błędu.

booleanBrak wartości domyślnej