RTL
Découvrez comment activer la prise en charge du texte de droite à gauche dans Bootstrap dans notre mise en page, nos composants et nos utilitaires.
Se familiariser
Nous vous recommandons de vous familiariser d'abord avec Bootstrap en lisant notre page Introduction à la mise en route . Une fois que vous l'avez parcouru, continuez à lire ici pour savoir comment activer RTL.
Vous voudrez peut-être également en savoir plus sur le projet RTLCSS , car il alimente notre approche du RTL.
Fonctionnalité expérimentale
La fonctionnalité RTL est encore expérimentale et évoluera probablement en fonction des retours des utilisateurs. Vous avez repéré quelque chose ou avez une amélioration à suggérer ? Ouvrez un problème , nous serions ravis d'avoir votre avis.
HTML requis
Il existe deux exigences strictes pour activer RTL dans les pages alimentées par Bootstrap.
- Fixé
dir="rtl"
sur l'<html>
élément. - Ajoutez un
lang
attribut approprié, commelang="ar"
, sur l'<html>
élément.
À partir de là, vous devrez inclure une version RTL de notre CSS. Par exemple, voici la feuille de style de notre CSS compilé et minifié avec RTL activé :
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.rtl.min.css" integrity="sha384-OXTEbYDqaX2ZY/BOaZV/yFGChYHtrXH2nyXJ372n2Y8abBhrqacCEe+3qhSHtLjy" crossorigin="anonymous">
Modèle de démarrage
Vous pouvez voir les exigences ci-dessus reflétées dans ce modèle de démarrage RTL modifié.
<!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-OXTEbYDqaX2ZY/BOaZV/yFGChYHtrXH2nyXJ372n2Y8abBhrqacCEe+3qhSHtLjy" 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-u1OknCvxWvY5kfmNBILK2hRnQC3Pr17a+RTT6rIHI7NnikvbZlHgTPOOmMi466C8" 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-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-7VPbUDkoPSGFnVtYi0QogXtr74QeVeeIs99Qfg5YCF+TidwNdjvaKZX19NZ/e6oz" crossorigin="anonymous"></script>
-->
</body>
</html>
Exemples RTL
Commencez avec l'un de nos nombreux exemples RTL .
Approcher
Notre approche pour intégrer le support RTL dans Bootstrap s'accompagne de deux décisions importantes qui ont un impact sur la façon dont nous écrivons et utilisons notre CSS :
-
Tout d'abord, nous avons décidé de le construire avec le projet RTLCSS . Cela nous donne des fonctionnalités puissantes pour gérer les modifications et les remplacements lors du passage de LTR à RTL. Cela nous permet également de créer deux versions de Bootstrap à partir d'une seule base de code.
-
Deuxièmement, nous avons renommé une poignée de classes directionnelles pour adopter une approche de propriétés logiques. La plupart d'entre vous ont déjà interagi avec des propriétés logiques grâce à nos utilitaires flex — ils remplacent les propriétés de direction comme
left
etright
en faveur destart
etend
. Cela rend les noms et les valeurs de classe appropriés pour LTR et RTL sans aucune surcharge.
Par exemple, au lieu de .ml-3
pour margin-left
, utilisez .ms-3
.
Travailler avec RTL, via notre source Sass ou CSS compilé, ne devrait pas être très différent de notre LTR par défaut.
Personnaliser à partir de la source
En ce qui concerne la personnalisation , la méthode préférée consiste à tirer parti des variables, des cartes et des mixins. Cette approche fonctionne de la même manière pour RTL, même si elle est post-traitée à partir des fichiers compilés, grâce au fonctionnement de RTLCSS .
Valeurs RTL personnalisées
À l' aide des directives de valeur RTLCSS , vous pouvez définir une sortie de variable sur une valeur différente pour RTL. Par exemple, pour diminuer le poids de $font-weight-bold
tout au long de la base de code, vous pouvez utiliser la /*rtl: {value}*/
syntaxe :
$font-weight-bold: 700 #{/* rtl:600 */} !default;
Ce qui donnerait la sortie suivante pour nos CSS et RTL CSS par défaut :
/* bootstrap.css */
dt {
font-weight: 700 /* rtl:600 */;
}
/* bootstrap.rtl.css */
dt {
font-weight: 600;
}
Pile de polices alternative
Si vous utilisez une police personnalisée, sachez que toutes les polices ne prennent pas en charge l'alphabet non latin. Pour passer de la famille paneuropéenne à la famille arabe, vous devrez peut-être utiliser /*rtl:insert: {value}*/
dans votre pile de polices pour modifier les noms des familles de polices.
Par exemple, pour passer d' Helvetica Neue
une police pour LTR à Helvetica Neue Arabic
pour RTL, votre code Sass pourrait ressembler à ceci :
$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 et RTL en même temps
Besoin à la fois de LTR et de RTL sur la même page ? Grâce à RTLCSS String Maps , c'est assez simple. Enveloppez votre @import
s avec une classe et définissez une règle de renommage personnalisée pour 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*/
Après avoir exécuté Sass puis RTLCSS, chaque sélecteur dans vos fichiers CSS sera précédé de .ltr
, et .rtl
pour les fichiers RTL. Vous pouvez maintenant utiliser les deux fichiers sur la même page, et simplement utiliser .ltr
ou .rtl
sur vos wrappers de composants pour utiliser l'un ou l'autre sens.
Cas marginaux et limites connues
Bien que cette approche soit compréhensible, veuillez prêter attention aux points suivants :
- Lorsque vous changez
.ltr
et.rtl
, assurez-vous d'ajouter les attributsdir
et en conséquence.lang
- Le chargement des deux fichiers peut être un véritable goulot d'étranglement pour les performances : envisagez une optimisation et essayez peut-être de charger l'un de ces fichiers de manière asynchrone .
- L'imbrication des styles de cette manière empêchera notre
form-validation-state()
mixin de fonctionner comme prévu, vous obligeant donc à le modifier un peu par vous-même. Voir #31223 .
L'affaire du fil d'Ariane
Le séparateur de fil d'Ariane est le seul cas nécessitant sa propre nouvelle variable - à savoir $breadcrumb-divider-flipped
- par défaut à $breadcrumb-divider
.