Pazarlama web sitesi · Yeni Kaynak

Mozilla Protocol Tasarım Sistemi.

Gerçek yazı tipi aileleri, boşluk ve kapsayıcı ölçekleri, duyarlı ve görselli bir okuma sayfası ve eksiksiz yerel CSS form örneği içeren editoryal bir Protocol kılavuzu.

OpenDesign Kılavuzu8 Bölüm39 Referans KaydıÖzgün Uygulama Kılavuzu
01

Mozilla Protocol Tasarım Sistemi Arayüz Önizlemesi

Abonelik oluşturmadan okuma yoğunluğunu karşılaştırın, açıklayıcı ayrıntıları genişletin ve geçersiz/geçerli e-posta durumlarını deneyin.

Resimli bir okuma sayfası ve bülten formuÖrneğin Tamamını Aç
Yerel Mozilla Protocol 22.0.0 CSS ve paket yazı tipleri; özgün HTML, illüstrasyon ve JavaScript. Ağ üzerinden form gönderimi yapılmaz. · Uygulama başvurusu
02

Mozilla Protocol Tasarım Sistemi Tasarım Başvurusu

Mozilla Protocol 22.0.0 yayımlanmış belirteç JSON'u ve yerel CSS. Dolar işaretiyle başlayan adlar Sass belirteçleridir. Özgün örnek, Mozilla tipografi temasını kullanır; yoğunluk denetimleri ve dairesel illüstrasyon uygulamaya özgü tercihlerdir.

Yazı tipi yığınları

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
$font-stack-baseInter, X-LocaleSpecific, sans-serifMozilla veya Firefox marka yığınını açıkça seçin; uzun gövde metinlerinde başlık yazı tipini kullanmayın.
$font-stack-firefoxMetropolis, X-LocaleSpecific, sans-serifMozilla veya Firefox marka yığınını açıkça seçin; uzun gövde metinlerinde başlık yazı tipini kullanmayın.
$font-stack-mozilla-headline'Mozilla Headline', 'Helvetica Neue', Arial, X-LocaleSpecific, sans-serifMozilla veya Firefox marka yığınını açıkça seçin; uzun gövde metinlerinde başlık yazı tipini kullanmayın.
$font-stack-mozilla-text'Mozilla Text', 'Helvetica Neue', Arial, X-LocaleSpecific, sans-serifMozilla veya Firefox marka yığınını açıkça seçin; uzun gövde metinlerinde başlık yazı tipini kullanmayın.
$font-stack-monoConsolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospaceMozilla veya Firefox marka yığınını açıkça seçin; uzun gövde metinlerinde başlık yazı tipini kullanmayın.

Bileşen aralıkları

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
$spacing-xs4pxBir bileşenin içindeki veya birbiriyle yakından ilişkili öğeler arasındaki boşluk.
$spacing-sm8pxBir bileşenin içindeki veya birbiriyle yakından ilişkili öğeler arasındaki boşluk.
$spacing-md16pxBir bileşenin içindeki veya birbiriyle yakından ilişkili öğeler arasındaki boşluk.
$spacing-lg24pxBir bileşenin içindeki veya birbiriyle yakından ilişkili öğeler arasındaki boşluk.
$spacing-xl32pxBir bileşenin içindeki veya birbiriyle yakından ilişkili öğeler arasındaki boşluk.
$spacing-2xl48pxBir bileşenin içindeki veya birbiriyle yakından ilişkili öğeler arasındaki boşluk.

Geniş ölçekli yerleşim ritmi

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
$layout-2xs16pxEditoryal bölümler arasında daha geniş boşluklar kullanın; bunlar bileşen aralıklarından farklıdır.
$layout-xs24pxEditoryal bölümler arasında daha geniş boşluklar kullanın; bunlar bileşen aralıklarından farklıdır.
$layout-sm32pxEditoryal bölümler arasında daha geniş boşluklar kullanın; bunlar bileşen aralıklarından farklıdır.
$layout-md48pxEditoryal bölümler arasında daha geniş boşluklar kullanın; bunlar bileşen aralıklarından farklıdır.
$layout-lg64pxEditoryal bölümler arasında daha geniş boşluklar kullanın; bunlar bileşen aralıklarından farklıdır.
$layout-xl96pxEditoryal bölümler arasında daha geniş boşluklar kullanın; bunlar bileşen aralıklarından farklıdır.
$layout-2xl192pxEditoryal bölümler arasında daha geniş boşluklar kullanın; bunlar bileşen aralıklarından farklıdır.

İçerik genişlikleri

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
$content-xs304pxHer metin bloğunu en geniş kapsayıcıya yaymak yerine, gerçek içerik için okunabilir bir maksimum genişlik belirleyin.
$content-sm432pxHer metin bloğunu en geniş kapsayıcıya yaymak yerine, gerçek içerik için okunabilir bir maksimum genişlik belirleyin.
$content-md688pxHer metin bloğunu en geniş kapsayıcıya yaymak yerine, gerçek içerik için okunabilir bir maksimum genişlik belirleyin.
$content-lg928pxHer metin bloğunu en geniş kapsayıcıya yaymak yerine, gerçek içerik için okunabilir bir maksimum genişlik belirleyin.
$content-xl1152pxHer metin bloğunu en geniş kapsayıcıya yaymak yerine, gerçek içerik için okunabilir bir maksimum genişlik belirleyin.
$content-max1440pxHer metin bloğunu en geniş kapsayıcıya yaymak yerine, gerçek içerik için okunabilir bir maksimum genişlik belirleyin.

Ekran kırılma noktaları

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
$screen-xs320pxYayımlanmış görünüm alanı adımları. Bileşen karışımları seçili adımlarda uyarlanabilir.
$screen-sm480pxYayımlanmış görünüm alanı adımları. Bileşen karışımları seçili adımlarda uyarlanabilir.
$screen-md768pxYayımlanmış görünüm alanı adımları. Bileşen karışımları seçili adımlarda uyarlanabilir.
$screen-lg1024pxYayımlanmış görünüm alanı adımları. Bileşen karışımları seçili adımlarda uyarlanabilir.
$screen-xl1312pxYayımlanmış görünüm alanı adımları. Bileşen karışımları seçili adımlarda uyarlanabilir.

Köşe yarıçapı

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
$border-radius-xs2pxBileşene uygun köşe yarıçapını kullanın; özgün illüstrasyonu arayüz şekillerinden ayrı tutun.
$border-radius-sm4pxBileşene uygun köşe yarıçapını kullanın; özgün illüstrasyonu arayüz şekillerinden ayrı tutun.
$border-radius-md8pxBileşene uygun köşe yarıçapını kullanın; özgün illüstrasyonu arayüz şekillerinden ayrı tutun.
$border-radius-lg16pxBileşene uygun köşe yarıçapını kullanın; özgün illüstrasyonu arayüz şekillerinden ayrı tutun.

Tipografi yardımcı sınıfları ve tema seçimi

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
$brand-theme: mozillaMozilla Headline + Mozilla TextMozilla temalı editoryal içerik; önizleme yazı tiplerini resmî paketten yükler.
$brand-theme: firefoxMetropolis + InterFirefox temalı tipografi ayrı bir marka tercihidir.
mzp-u-title-lgResponsive title utilityAna editoryal başlıkta kullanın; görsel boyutundan başlık anlamı çıkarmayın.
mzp-u-title-xsSmall title utilityDestekleyici iki bölümde bu sınıf, anlamsal h2 öğelerinde kullanılır.
mzp-u-title-2xsCompact title utilityKısa makalede bu sınıf h3 öğesinde kullanılır.
Comfortable / Compact sample16px / 1.6 and 14px / 1.4İki resmî Protocol temasından biri değil, özgün bir okuma tercihi.
03

Mozilla Protocol Tasarım Sistemi Eksiksiz Kılavuzu

Bu sistemi gerçek bir arayüz için seçmeye, uygulamaya ve gözden geçirmeye yönelik pratik bir kılavuz.

DESIGN-mozilla-protocol.md

Eksiksiz yönlendirme, uygulama için başlangıç noktası ve kaynak bağlantıları.

Kılavuzu İndir

Mozilla Protocol Tasarım Sistemi Editoryal Düzeni

Okunabilir bir editoryal hiyerarşiyle başlayın

Protocol, destekleyici arayüzlerin yanı sıra yayın ve pazarlama sayfalarında da kullanılır. Örnek, büyük bir başlık ve özgün dairesel bir illüstrasyonla açılır; ardından bir makale önizlemesine ve özet bülten formuna geçer. Bu düzen, okuyucudan kontrolleri kullanmasını istemeden önce mesaja alan tanır. Yoğun bir yönetim panelinden farklıdır.

Bu OpenDesign kılavuzundan

Marka temasını uygulama fikrinden ayrı tutun

Örnekte mzp-t-mozilla ve Protocol’ün yerel tipografisi kullanılır. Makale, illüstrasyon ve okuma yoğunluğu tercihi uygulamaya özgü içeriklerdir. Yerel sınıf adları ve yazı tipi dosyaları, bunu resmî bir Mozilla hizmeti hâline getirmez. Alt bilgi kapsamı açıklar; özet bülten eylemi ise yalnızca bir onay mesajını önizler.

Mozilla Protocol Tasarım Sistemi Yazı Tipleri ve Başlık Yardımcıları

Markaya özgü yazı tipi çiftini seçin

Protocol 22, Mozilla için Mozilla Headline ve Mozilla Text yazı tipi yığınlarını; Firefox içinse Metropolis ve Inter yazı tiplerini sunar. Örnekte, paketle birlikte sağlanan yazı tipleri yüklenir. Başlık ve gövde rollerini ayrı tutun: Her paragrafta ekran yazı karakteri kullanmak, editoryal hiyerarşiyi işlevsel kılan karşıtlığı ortadan kaldırır.

Başlıkların anlamsal yapısını görsel boyutlarından bağımsız tutun

Hero alanındaki başlık, mzp-u-title-lg sınıfını kullanan bir h1’dir. Destekleyici bölümlerde mzp-u-title-xs sınıfını kullanan h2, makale başlığında ise mzp-u-title-2xs sınıfını kullanan h3 bulunur. Duyarlı yardımcı sınıflar, bu sıralamayı değiştirmeden görsel boyutu değiştirebilir. Okuma yoğunluğu kontrolü yalnızca örnek paragrafları değiştirir; sayfanın tamamını veya kontrolleri yeniden boyutlandırmaz.

  • h1 sayfayı tanıtır.
  • h2, okuma önizlemesiyle formu birbirinden ayırır.
  • h3, makale alıntısına başlık verir.

Mozilla Protocol Tasarım Sistemi Renk ve İllüstrasyon

İllüstrasyonu editoryal içerik olarak kullanın

Dairesel degradeli görsel, kısa ve erişilebilir bir açıklamayla sunulan özgün bir CSS çalışmasıdır. Sıcaktan mora uzanan renk geçişi, yeni ve resmî bir Mozilla logosu ya da Protocol tarafından sunulan bir belirteç olarak tanıtılmaz. Sayfanın geri kalanında, illüstrasyonun ve birincil eylemin rolünü belirginleştiren ölçülü, nötr yüzeyler kullanılır.

Form durumlarının anlamını ayrı ayrı belirtin

Yerel e-posta hatası, yazılı bir açıklama ve belirgin bir geçersiz alan kenarlığıyla gösterilir. Başarı durumu, girilen örnek adresi içeren ve e-posta gönderilmediğini belirten ayrı bir onay bloğunda görünür. Renkli bir hero görseli hata durumuyla yarışmamalı veya formun başarılı olup olmadığını belirsizleştirmemelidir.

Mozilla Protocol Tasarım Sistemi Bileşen ve Yerleşim Aralıkları

İki aralık ölçeğini amacına uygun kullanın

Yayımlanmış bileşen aralığı adımları 4, 8, 16, 24, 32 ve 48px’tir. Ayrı bir yerleşim ölçeği ise 64, 96 ve 192px’e kadar uzanır. Formların ve kartların içinde daha küçük ölçeği, editoryal bölümler arasındaki ritim içinse daha büyük ölçeği kullanın. Her küçük aralığı yerleşim ölçeğindeki değerlere çıkarmak, etiketle alan arasındaki ilişkiyi zayıflatır.

Daha fazla sütun eklemeden önce satır uzunluğunu sınırlayın

Mozilla Protocol Tasarım Sistemi Düğmeler, Ayrıntılar ve Form

Formun gerçek yapısını koruyun

Özet bülten örneği; görünür bir etiketi, e-posta alanı, açıklama notu, hata metni ve gönder düğmesi olan yerel bir formdur. Bileşenleri Protocol biçimlendirir; yerel sonucu doğrulama ve bildirme işini uygulama yapar. Hero eyleminde sayfa içindeki bir bölüme gittiği için bağlantı, gönderim işleminde ise düğme kullanılır.

Destekleyici açıklamalar için basit bir açılır bölüm kullanın

“Ne değişiyor?” açılır bölümü, yerel bir details/summary ikilisidir. Ana makale akışını bölmeden özel rahat ve kompakt paragraf değerlerini açıklar. Bu, sahte bir gezinme sekmesi veya gizli bir ön koşul değildir; açılır bölüm açık ya da kapalı olsa da form ve yoğunluk kontrolleri kullanılabilir.

Mozilla Protocol Tasarım Sistemi Okuma ve Doğrulama Durumları

Her seferinde tek bir okuma tercihini değiştirin

İki yoğunluk düğmesi etiketli bir grup oluşturur ve aria-pressed niteliğini sunar. “Kompakt” seçildiğinde yalnızca makaledeki paragrafların yazı tipi boyutu, satır yüksekliği ve alt boşluğu değişir. Metin, başlık ve form alanı yerinde kalır. Örnek, bu tercihi Mozilla ve Firefox marka temaları arasında geçiş yapmaktan özellikle ayrı tutar.

Yerel formun hatadan kurtarma davranışını öngörülebilir kılın

Geçersiz bir adres girildiğinde hata görünür ve odak giriş alanına geçer. Alan düzenlendiğinde eski hata temizlenir ve önceki onay mesajı gizlenir. Geçerli bir adres girildiğinde yerel olarak oluşturulan sonuç gösterilir ve odak bu sonuca geçer. “Başka bir adres dene” formu temizler, geçersiz durumunu kaldırır ve odağı giriş alanına geri getirir; eşzamansız bir abonelik işlemi olduğu ima edilmez.

  1. Boş veya hatalı biçimlenmiş bir adres gönderip alan hata mesajını okuyun.
  2. Bir örnek adres girip yerel onay mesajını önizleyin.
  3. Formu sıfırlamak ve odağı giriş alanına geri getirmek için “Başka bir adres dene”yi kullanın.

Mozilla Protocol Tasarım Sistemi Erişilebilir Editoryal Kontroller

Görsele ve kontrollere farklı roller verin

İllüstrasyon, kısa alternatif metne sahip bir görsel öğesidir. Yoğunluk düğmeleri, açılır bölüm ve gönderme eylemi gerçek kontrollerdir. E-posta alanı, aria-describedby aracılığıyla hem nota hem de hataya bağlanır. Klavyeyle kullanımı desteklemek için yerel stillere görünür bir odak çerçevesi eklenir.

Yerleşim alt alta dizildiğinde de sıralamayı anlamlı tutun

Belge sıralaması başlık, okuma önizlemesi, açıklama ve form şeklindedir. Mobilde de aynı sıralama korunur; CSS formu bağlamından önceye taşımaz. Mobilde 180px boyutundaki illüstrasyon, sayfanın yatay kaymasına neden olan sabit genişlikli bir engel değil, editoryal içeriği destekleyen bir öğedir.

Mozilla Protocol Tasarım Sistemi CSS Entegrasyonu

Yayımlanmış varlıkları örnekle birlikte derleyin

Sağlanan giriş dosyası, derlenmiş bir temayı, protocol.css ve protocol-components.css dosyalarını, ardından da uygulama stil dosyasını içe aktarır. Protocol 22, tema özel özelliklerinin :root üzerinde tanımlanmasını gerektirir; yalnızca eski bir marka sınıfı eklemek tipografiyi tanımlamaz. Vite’ı başlatmadan önce protocol-theme.scss dosyasını derleyin. Modül uyumlu bir paketleyici, yazı tipi ve görsel URL’lerini izler. Aşağıdaki HTML, JavaScript ve CSS blokları örneğin tüm kaynak kodunu içerir; gizli bir bülten arka ucu veya pakete özgü bir durum sağlayıcısı yoktur.

Formu yalnızca gerçek bir abonelik hizmeti varsa genişletin

Mozilla Protocol Tasarım Sistemi Bileşen Örnekleri

index.html — eksiksiz editoryal sayfa

Anlamsal makale, yoğunluk kontrolleri, açılır bölüm ve özgün bir CSS illüstrasyon içeren yerel özet bülten formu.

html
<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Reading specimen</title></head>
<body>
<main class="reading-example mzp-t-mozilla">
  <header class="reading-top">
    <strong>MOZILLA PROTOCOL · EDITORIAL SPECIMEN</strong
    ><span>Original example by OpenDesign</span>
  </header>
  <section class="reading-hero">
    <div>
      <h1 class="mzp-u-title-lg">A little more room to read.</h1>
      <p>
        Make space for useful ideas, quieter pages, and a reading rhythm that
        feels like yours.
      </p>
      <a class="mzp-c-button" href="#reading-controls"
        >Explore the reading preview</a
      >
    </div>
    <div
      class="orb"
      role="img"
      aria-label="Original warm-to-purple circular illustration"
    ></div>
  </section>
  <div class="reading-main">
    <section id="reading-controls">
      <h2 class="mzp-u-title-xs">Choose your reading rhythm</h2>
      <p>
        Compare two application-defined densities using the same short article.
      </p>
      <div class="density-options" role="group" aria-label="Reading density">
        <button
          class="mzp-c-button mzp-t-secondary"
          data-density="comfortable"
          aria-pressed="true"
        >
          Comfortable</button
        ><button
          class="mzp-c-button mzp-t-secondary"
          data-density="compact"
          aria-pressed="false"
        >
          Compact
        </button>
      </div>
      <article id="article-sample">
        <h3 class="mzp-u-title-2xs">The open page</h3>
        <p>
          A useful page gives an idea enough room to breathe. Its headings show
          the path, its paragraphs keep a readable measure, and its controls
          remain easy to find.
        </p>
        <p>
          Changing density should preserve the story. This preview adjusts
          paragraph size and spacing without replacing the article or changing
          your place in the task.
        </p>
      </article>
      <details>
        <summary>What changes in this example?</summary>
        <p>
          Comfortable uses 16px text with 1.6 line height. Compact uses 14px
          with 1.4. These are example reading preferences, not separate official
          Protocol themes.
        </p>
      </details>
    </section>
    <aside class="signup">
      <h2 class="mzp-u-title-xs">Preview a reading digest</h2>
      <p>
        Try the form styling and local validation. No subscription is created.
      </p>
      <form id="reading-form" novalidate>
        <label for="email">Email address</label
        ><input
          id="email"
          type="email"
          autocomplete="email"
          aria-describedby="email-note email-error"
        />
        <p class="note" id="email-note">
          Use an example address. Nothing will be sent.
        </p>
        <p id="email-error" class="error" role="alert" hidden>
          Enter an email address, such as [email protected].
        </p>
        <button class="mzp-c-button" type="submit">Preview confirmation</button>
      </form>
      <div id="confirmation" tabindex="-1" role="status" hidden>
        Local preview confirmed for <strong></strong>. No email was sent.<button
          id="reset"
          class="mzp-c-button mzp-t-secondary"
          type="button"
        >
          Try another address
        </button>
      </div>
    </aside>
  </div>
  <footer class="reading-footer">
    Native Mozilla Protocol 22.0.0 CSS and fonts. Original illustration, copy
    and JavaScript; not an official Mozilla service.
  </footer>
</main>
<script type="module" src="/src/main.js"></script>
</body></html>

Kod referansı

  • Proje kök dizinine index.html adıyla kaydedin. Sonraki iki blok src/main.js ve src/protocol.css dosyalarıdır.

main.js — yerel varlıklar ve davranış

Veri göndermeden yoğunluk seçimini, doğrulamayı, odağı ve sıfırlamayı uygular; resmî stil dosyalarını içe aktarır.

js
import "./protocol-theme.css";
import "@mozilla-protocol/core/protocol/css/protocol.css";
import "@mozilla-protocol/core/protocol/css/protocol-components.css";
import "./protocol.css";
const form = document.querySelector("#reading-form"),
  error = document.querySelector("#email-error"),
  input = document.querySelector("#email"),
  result = document.querySelector("#confirmation");
form.addEventListener("submit", (event) => {
  event.preventDefault();
  const value = input.value.trim();
  if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
    error.hidden = false;
    input.setAttribute("aria-invalid", "true");
    input.focus();
    return;
  }
  error.hidden = true;
  input.removeAttribute("aria-invalid");
  result.hidden = false;
  result.querySelector("strong").textContent = value;
  result.focus();
});
input.addEventListener("input", () => {
  error.hidden = true;
  input.removeAttribute("aria-invalid");
  result.hidden = true;
});
document.querySelector("#reset").addEventListener("click", () => {
  form.reset();
  result.hidden = true;
  error.hidden = true;
  input.removeAttribute("aria-invalid");
  input.focus();
});
document.querySelectorAll("[data-density]").forEach((button) =>
  button.addEventListener("click", () => {
    document
      .querySelectorAll("[data-density]")
      .forEach((b) => b.setAttribute("aria-pressed", String(b === button)));
    document
      .querySelector("#article-sample")
      .classList.toggle("compact", button.dataset.density === "compact");
  }),
);

Kod referansı

  • Bu davranış uygulamaya özgü bir JavaScript örneğidir; Protocol’ün bülten hizmeti değildir.

protocol.css — özgün düzen

Duyarlı sayfa düzeni, okuma tercihleri ve özgün dairesel illüstrasyon.

css
[hidden] { display: none !important; }
body {
  margin: 0;
}
.reading-example {
  background: #fff;
  color: #000;
}
.reading-top {
  padding: 24px;
  border-bottom: 1px solid #cdcdd4;
  display: flex;
  justify-content: space-between;
  gap: 16px;
  font-size: 12px;
}
.reading-hero {
  display: grid;
  grid-template-columns: minmax(0, 1.3fr) minmax(200px, 0.7fr);
  gap: 48px;
  align-items: center;
  padding: 48px;
  max-width: 1152px;
  margin: auto;
}
.reading-hero h1 {
  max-width: 680px;
}
.reading-hero p {
  max-width: 580px;
}
.orb {
  aspect-ratio: 1;
  background: radial-gradient(
    circle at 33% 32%,
    #ffea80 0 10%,
    #ff8a50 30%,
    #ff298a 55%,
    #7542e5 82%
  );
  border-radius: 50%;
  position: relative;
  box-shadow: 16px 24px 0 #f0f0f4;
}
.orb:after {
  content: "";
  position: absolute;
  inset: 23%;
  border-radius: 50%;
  background: white;
}
.reading-main {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(280px, 0.8fr);
  gap: 48px;
  max-width: 1152px;
  margin: auto;
  padding: 0 48px 48px;
}
.density-options {
  display: flex;
  gap: 8px;
  margin: 16px 0;
}
.density-options button {
  font-size: 12px;
  padding: 8px 12px;
}
.density-options button[aria-pressed="true"] {
  box-shadow: 0 0 0 2px #0060df;
}
#article-sample {
  padding: 24px;
  border: 1px solid #cdcdd4;
  border-radius: 8px;
  background: #f9f9fb;
}
#article-sample p {
  font-size: 16px;
  line-height: 1.6;
  margin: 0 0 16px;
}
#article-sample.compact p {
  font-size: 14px;
  line-height: 1.4;
  margin-bottom: 8px;
}
.signup {
  padding: 24px;
  background: #e7dfff;
  border-radius: 8px;
}
.signup input {
  width: 100%;
  margin-bottom: 8px;
}
.signup label {
  display: block;
  font-weight: 700;
  margin-bottom: 8px;
}
.signup .note {
  font-size: 12px;
  line-height: 1.5;
}
.signup .error {
  color: #a4000f;
  font-size: 14px;
  font-weight: 700;
}
.signup input[aria-invalid="true"] {
  border-color: #a4000f;
  box-shadow: 0 0 0 2px #a4000f;
}
.signup .mzp-c-button {
  width: 100%;
  margin: 8px 0;
}
#confirmation {
  padding: 16px;
  background: #e3fff3;
  margin-top: 16px;
  border-left: 4px solid #008a46;
  overflow-wrap: anywhere;
}
.reading-footer {
  padding: 24px;
  border-top: 1px solid #cdcdd4;
  font-size: 12px;
}
.reading-example details {
  margin-top: 24px;
}
.reading-example summary {
  cursor: pointer;
  font-weight: 700;
}
.reading-example details p {
  font-size: 14px;
  margin-top: 12px;
}
button:focus-visible,
input:focus-visible,
summary:focus-visible {
  outline: 3px solid #0060df;
  outline-offset: 4px;
}
@media (max-width: 760px) {
  .reading-hero {
    grid-template-columns: 1fr;
    padding: 32px 24px;
    gap: 24px;
  }
  .orb {
    width: 180px;
    justify-self: center;
    box-shadow: 8px 12px 0 #f0f0f4;
  }
  .reading-main {
    grid-template-columns: 1fr;
    padding: 0 24px 32px;
    gap: 32px;
  }
  .reading-top {
    flex-wrap: wrap;
  }
  .reading-hero h1 {
    font-size: 36px;
  }
  .density-options {
    flex-wrap: wrap;
  }
}

Kod referansı

  • Uygulamanın yoğunluk ve yerleşim tercihleri, yayımlanmış Sass belirteçlerinden ayrı olarak tanımlanmıştır.

protocol-theme.scss — gerekli Mozilla kök teması

Uygulamayı başlatmadan önce bunu src/protocol-theme.css dosyasına derleyin.

scss
@use '@mozilla-protocol/core/protocol/css/includes/config' with ($brand-theme: 'mozilla');
@use '@mozilla-protocol/core/protocol/css/includes/themes';

Kod referansı

  • Markayı Sass yapılandırması seçer; bu, çalışma zamanında sınıf değiştirme yöntemi değildir.
04

Mozilla Protocol Tasarım Sistemi Ajan Kurulumu

Uygulamaya Başlangıç Noktası

Yerel önizleme için yerel CSS/fonts ve özgün betik pakete eklendi. Vite sürümünüzün desteklediği bir Node.js sürümü kullanın. Derlemeyi yeniden dağıtırken paket lisansını ve varlık atıflarını koruyun.

sh
npm create vite@latest protocol-reading -- --template vanilla
cd protocol-reading
npm install
npm install @mozilla-protocol/[email protected]
npm install --save-dev sass
npx sass --load-path=node_modules src/protocol-theme.scss src/protocol-theme.css
# Replace index.html; add src/main.js and src/protocol.css from the full examples.
npm run dev

Projeniz İçin Bir İstem

Ajan İstemi
Mozilla Protocol 22.0.0 ile editoryal bir sayfa oluşturun. Yazı tipleri, aralıklar ve kapsayıcılara ilişkin gerçek referansları inceleyin. Sağlanan eksiksiz HTML/CSS/JS düzenlemesini başlangıç noktası olarak kullanın; anlamsal başlıkları ve görünür form etiketlerini koruyun; özgün illüstrasyon ve yoğunluk tercihlerini resmî belirteçlerden ayırın. Yerel doğrulamanın ne yaptığını doğru biçimde belirtin; gerçek abonelik entegrasyonunu ancak hizmetin gereksinimleri ve izin koşulları tanımlandıktan sonra ekleyin.
05

Mozilla Protocol Tasarım Sistemi Kaynakları ve Kapsamı

Mozilla Protocol 22.0.0 sürümüne yönelik OpenDesign uygulama kılavuzu. Örnekte yayımlanmış CSS ve paketlenmiş yazı tipleri; özgün metin, illüstrasyon ve yerel form davranışıyla birlikte kullanılır. Bu, bir Mozilla ürünü, bülteni veya abonelik hizmeti değildir; marka ve varlık hakları ilgili sahiplerine aittir.