0Pricing
React Academy · Ders

Modallarda Odağı ve Klavye Kapanlarını Yönetme

useRef ve olay dinleyicilerini kullanarak erişilebilirlik için odağı açık modalların içinde tutun.

Modallarda Odağı ve Klavye Kapanlarını Yönetme, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, React Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. React Academy kursu toplamda 4 dersten oluşur.

Hoş Geldiniz

Bu derste, klavye kullanıcılarının açık bir modalın dışına Tab tuşuyla çıkamaması için modal içinde bir odak tuzağı uygulayacaksınız. Bu, önemli bir erişilebilirlik gereksinimidir (WCAG 2.4.3).

Odak Tuzakları Neden Gereklidir

Bir modal açıldığında klavye kullanıcıları yalnızca modalın içeriğiyle etkileşebilmelidir. Odak tuzağı olmadan Tab tuşuna basmak, odağı modal katmanının arkasındaki öğelere taşır; bu öğeler görsel olarak gizli olsalar da hâlâ erişilebilirdir.

Odak Tuzağı Nedir?

Bir odak tuzağı, Tab ve Shift+Tab tuş olaylarını yakalar. Odak modalın dışına çıkacaksa odağı modalın içindeki ilk veya son odaklanabilir öğeye geri döndürür.

Odaklanabilir Öğeleri Bulma

Tüm etkileşimli öğeleri kapsayan bir seçiciyle querySelectorAll kullanın. Devre dışı bırakılmış ve gizli öğeleri filtreleyin.
const FOCUSABLE = [
  'a[href]', 'button:not([disabled])',
  'input:not([disabled])', 'select', 'textarea',
  '[tabindex]:not([tabindex="-1"])'
].join(',');

const focusable = Array.from(
  modalRef.current.querySelectorAll(FOCUSABLE)
);

Tuzağı Uygulama

Modal kapsayıcısındaki keydown olayını dinleyin. Tab tuşuna basıldığında odak son öğedeyse odağı ilk öğeye taşıyın. Shift+Tab tuşlarına basıldığında odak ilk öğedeyse odağı son öğeye taşıyın.
function handleTab(e) {
  const focusable = /* array of focusable elements */;
  const first = focusable[0];
  const last = focusable[focusable.length - 1];
  if (e.key !== 'Tab') return;
  if (e.shiftKey) {
    if (document.activeElement === first) {
      e.preventDefault(); last.focus();
    }
  } else {
    if (document.activeElement === last) {
      e.preventDefault(); first.focus();
    }
  }
}

Açılışta Odağı Taşıma

Modal açıldığında odağı içindeki ilk odaklanabilir öğeye taşıyın veya `tabIndex=-1` ile odağı modal kapsayıcısının kendisine verin. Bu, odağın modalı açan düğmede kalmasını engeller.
useEffect(() => {
  if (isOpen) {
    const first = modalRef.current?.querySelector(FOCUSABLE);
    first?.focus();
  }
}, [isOpen]);

Kapanışta Odağı Geri Yükleme

Modal kapandığında odağı, modal açılmadan önce etkin olan öğeye geri döndürün. Modal açıldığı anda `document.activeElement` için bir ref saklayın.
const previousFocus = useRef(null);

useEffect(() => {
  if (isOpen) {
    previousFocus.current = document.activeElement;
  } else {
    previousFocus.current?.focus();
  }
}, [isOpen]);

focus-trap-react Kitaplığını Kullanma

Üretim kullanımı için **focus-trap-react** kitaplığını değerlendirin. Bu kitaplık tüm uç durumları yönetir: gölge DOM, iframe'ler, dinamik olarak eklenen odaklanabilir öğeler ve Escape tuşuyla devre dışı bırakma.
import FocusTrap from 'focus-trap-react';

{isOpen && (
  <FocusTrap>
    <div role="dialog" aria-modal="true">
      {children}
    </div>
  </FocusTrap>
)}

Modallar için ARIA Öznitelikleri

Modal kapsayıcısına `role="dialog"` ve `aria-modal="true"` ekleyin. Modalın başlığını gösteren `aria-labelledby` özniteliğini ekleyin. Bu, ekran okuyuculara iletişim kutusunun modal olduğunu bildirir ve onu doğru şekilde duyurur.
<div
  role="dialog"
  aria-modal="true"
  aria-labelledby="modal-title"
>
  <h2 id="modal-title">Confirm Delete</h2>
  ...
</div>

Arka Plan için Inert Özniteliği

Bir kapsayıcıdaki HTML `inert` özniteliği, kapsayıcının tüm öğelerini odak sırasından ve ekran okuyucu erişilebilirliğinden çıkarır. Sağlam bir arka plan engellemesi için modal açıkken `document.getElementById('root').inert = true` ayarını uygulayın.
useEffect(() => {
  const root = document.getElementById('root');
  if (isOpen) root.setAttribute('inert', '');
  else root.removeAttribute('inert');
}, [isOpen]);

Kısa Kontrol

Klavye kullanan bir kişi, odak tuzağı bulunan modalın içindeki son odaklanabilir öğede Tab tuşuna bastığında ne olmalıdır?

Özet

Bir odak tuzağı uyguladınız: odaklanabilir öğeleri buldunuz, Tab/Shift+Tab tuşlarını yakaladınız, açılışta odağı taşıdınız ve kapanışta odağı geri yüklediniz. Üretim ortamında focus-trap-react kullanın ve ekran okuyucular için role='dialog' ile aria-modal ekleyin.

Sırada

Sonraki ders: **Portallarla Araç İpuçları ve Açılır Menüler** — createPortal kullanarak overflow-hidden kapsayıcılarından kurtulan araç ipuçları ve açılır menüler oluşturacaksınız.

Sıkça Sorulan Sorular

“Modallarda Odağı ve Klavye Kapanlarını Yönetme” dersi ücretsiz mi?

Evet — “Modallarda Odağı ve Klavye Kapanlarını Yönetme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve React Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. React Academy kursu toplamda 4 dersten oluşur.

“Modallarda Odağı ve Klavye Kapanlarını Yönetme” dersinde ne öğreneceğim?

useRef ve olay dinleyicilerini kullanarak erişilebilirlik için odağı açık modalların içinde tutun. React Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

React Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te React Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Modallarda Odağı ve Klavye Kapanlarını Yönetme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu React Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her React Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. React Portalları Nedir
  2. Portallarla Modal Bileşeni Oluşturma
  3. Modallarda Odağı ve Klavye Kapanlarını Yönetme
  4. Portallarla İpuçları ve Açılır Menüler
← React Academy Sayfasına Dön