Treci la conținutul principal Treceți la navigarea documentelor

Aflați cum să activați suportul pentru textul de la dreapta la stânga în Bootstrap în aspectul, componentele și utilitățile noastre.

Familiarizați-vă

Vă recomandăm să vă familiarizați cu Bootstrap mai întâi citind pagina noastră Introducere Introducere . După ce l-ați parcurs, continuați să citiți aici pentru a afla cum să activați RTL.

De asemenea, vă recomandăm să citiți despre proiectul RTLCSS , deoarece ne ajută să abordăm RTL.

Caracteristica experimentală

Caracteristica RTL este încă experimentală și probabil va evolua în funcție de feedback-ul utilizatorilor. Ați găsit ceva sau aveți o îmbunătățire de sugerat? Deschideți o problemă , ne-ar plăcea să obținem informațiile dvs.

HTML obligatoriu

Există două cerințe stricte pentru activarea RTL în paginile bazate pe Bootstrap.

  1. Setați dir="rtl"pe <html>element.
  2. Adăugați un langatribut adecvat, cum ar fi lang="ar", pe <html>element.

De acolo, va trebui să includeți o versiune RTL a CSS-ului nostru. De exemplu, iată foaia de stil pentru CSS-ul nostru compilat și miniat cu RTL activat:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.rtl.min.css" integrity="sha384-gXt9imSW0VcJVHezoNQsP+TNrjYXoGcrqBZJpry9zJt8PCQjobwmhMGaDHTASo9N" crossorigin="anonymous">

Șablon de pornire

Puteți vedea cerințele de mai sus reflectate în acest șablon de pornire RTL modificat.

<!doctype html>
<html lang="ar" dir="rtl">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.rtl.min.css" integrity="sha384-gXt9imSW0VcJVHezoNQsP+TNrjYXoGcrqBZJpry9zJt8PCQjobwmhMGaDHTASo9N" crossorigin="anonymous">

    <title>مرحبا بالعالم!</title>
  </head>
  <body>
    <h1>مرحبا بالعالم!</h1>

    <!-- Optional JavaScript; choose one of the two! -->

    <!-- Option 1: Bootstrap Bundle with Popper -->
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>

    <!-- Option 2: Separate Popper and Bootstrap JS -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
    -->
  </body>
</html>

Exemple RTL

Începeți cu unul dintre exemplele noastre RTL .

Abordare

Abordarea noastră de a construi suportul RTL în Bootstrap vine cu două decizii importante care influențează modul în care scriem și folosim CSS-ul nostru:

  1. În primul rând, am decis să-l construim cu proiectul RTLCSS . Acest lucru ne oferă câteva funcții puternice pentru gestionarea modificărilor și înlocuirilor atunci când trecem de la LTR la RTL. De asemenea, ne permite să construim două versiuni de Bootstrap dintr-o bază de cod.

  2. În al doilea rând, am redenumit câteva clase direcționale pentru a adopta o abordare a proprietăților logice. Majoritatea dintre voi ați interacționat deja cu proprietățile logice datorită utilităților noastre flexibile — acestea înlocuiesc proprietățile de direcție precum leftși rightîn favoarea startși end. Acest lucru face ca numele claselor și valorile să fie adecvate pentru LTR și RTL fără nicio suprasarcină.

De exemplu, în loc de .ml-3pentru margin-left, utilizați .ms-3.

Lucrul cu RTL, prin Sass-ul nostru sursă sau CSS compilat, nu ar trebui să fie mult diferit de LTR-ul nostru implicit.

Personalizați din sursă

Când vine vorba de personalizare , modalitatea preferată este să profitați de variabile, hărți și mixuri. Această abordare funcționează la fel pentru RTL, chiar dacă este post-procesată din fișierele compilate, datorită modului în care funcționează RTLCSS .

Valori RTL personalizate

Folosind directivele de valoare RTLCSS , puteți face o ieșire variabilă o valoare diferită pentru RTL. De exemplu, pentru a reduce greutatea pentru $font-weight-boldîntreaga bază de cod, puteți utiliza /*rtl: {value}*/sintaxa:

$font-weight-bold: 700 #{/* rtl:600 */} !default;

Care ar rezulta în următoarele pentru CSS și RTL CSS implicit:

/* bootstrap.css */
dt {
  font-weight: 700 /* rtl:600 */;
}

/* bootstrap.rtl.css */
dt {
  font-weight: 600;
}

Stivă alternativă de fonturi

În cazul în care utilizați un font personalizat, rețineți că nu toate fonturile acceptă alfabetul non-latin. Pentru a trece de la familia paneuropeană la familia arabă, poate fi necesar să utilizați /*rtl:insert: {value}*/în stiva dvs. de fonturi pentru a modifica numele familiilor de fonturi.

De exemplu, pentru a comuta de la Helvetica Neue Webfontpentru LTR la Helvetica Neue Arabicpentru RTL, codul tău Sass arată astfel:

$font-family-sans-serif:
  Helvetica Neue #{"/* rtl:insert:Arabic */"},
  // Cross-platform generic font family (default user interface font)
  system-ui,
  // Safari for macOS and iOS (San Francisco)
  -apple-system,
  // Chrome < 56 for macOS (San Francisco)
  BlinkMacSystemFont,
  // Windows
  "Segoe UI",
  // Android
  Roboto,
  // Basic web fallback
  Arial,
  // Linux
  "Noto Sans",
  // Sans serif fallback
  sans-serif,
  // Emoji fonts
  "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;

LTR și RTL în același timp

Aveți nevoie de LTR și RTL pe aceeași pagină? Datorită RTLCSS String Maps , acest lucru este destul de simplu. Încheiați-vă @importcu o clasă și setați o regulă de redenumire personalizată pentru RTLCSS:

/* rtl:begin:options: {
  "autoRename": true,
  "stringMap":[ {
    "name": "ltr-rtl",
    "priority": 100,
    "search": ["ltr"],
    "replace": ["rtl"],
    "options": {
      "scope": "*",
      "ignoreCase": false
    }
  } ]
} */
.ltr {
  @import "../node_modules/bootstrap/scss/bootstrap";
}
/*rtl:end:options*/

După ce rulați Sass și apoi RTLCSS, fiecare selector din fișierele dvs. CSS va fi antepus .ltr, și .rtlpentru fișierele RTL. Acum puteți folosi ambele fișiere pe aceeași pagină și pur și simplu utilizați .ltrsau .rtlpe wrapper-urile componentelor pentru a utiliza una sau alta direcție.

Cazuri marginale și limitări cunoscute

Deși această abordare este de înțeles, vă rugăm să acordați atenție următoarelor:

  1. Când comutați .ltrși .rtl, asigurați-vă că adăugați dirși langatributele în consecință.
  2. Încărcarea ambelor fișiere poate fi un adevărat blocaj de performanță: luați în considerare unele optimizari și poate încercați să încărcați unul dintre acele fișiere în mod asincron .
  3. Stilurile de cuibărire în acest fel vor împiedica form-validation-state()mixin-ul nostru să funcționeze conform intenționării, așa că vă va cere să îl modificați puțin singur. Vezi #31223 .

Cazul pesmet

Separatorul breadcrumb este singurul caz care necesită o variabilă proprie nou-nouță, și anume, $breadcrumb-divider-flippedimplicit la $breadcrumb-divider.

Resurse aditionale