跳至主要内容 跳至文档导航

了解如何在我们的布局、组件和实用程序中启用对 Bootstrap 中从右到左文本的支持。

熟悉

我们建议首先通过阅读我们的入门介绍页面来熟悉Bootstrap。完成它后,请继续阅读此处,了解如何启用 RTL。

您可能还想阅读 RTLCSS 项目,因为它为我们的 RTL 方法提供了动力。

Bootstrap的RTL功能仍处于实验阶段,将根据用户反馈进行发展。发现了什么或有改进建议?打开问题,,我们很乐意得到您的见解。

必须的 HTML

在Bootstrap驱动的页面中启用 RTL 有两个严格的要求。

  1. <html>元素上设置 dir="rtl"
  2. <html> 元素上添加适当的 lang 属性,如 lang="ar"

从那里,您需要包含我们 CSS 的 RTL 版本。例如,以下是启用了 RTL 的编译和缩小 CSS 的样式表:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.rtl.min.css" integrity="sha384-5/ZcxA7Dub2FNG09dHw8CHmPN7Fz6ASlweagj0nuXjmMyupgH9n9F5Hd926zsu3/" crossorigin="anonymous">

初学者模板

您可以在此修改后的 RTL 启动器模板中看到上述要求。

<!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/bootstrap@5.3.0-alpha2/dist/css/bootstrap.rtl.min.css" integrity="sha384-5/ZcxA7Dub2FNG09dHw8CHmPN7Fz6ASlweagj0nuXjmMyupgH9n9F5Hd926zsu3/" 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/bootstrap@5.3.0-alpha2/dist/js/bootstrap.bundle.min.js" integrity="sha384-qKXV1j0HvMUeCBQ+QVp7JcfGl760yU08IQ+GpUo5hlbpg51QRiuqHAJz8+BrxE/N" crossorigin="anonymous"></script>

    <!-- Option 2: Separate Popper and Bootstrap JS -->
    <!--
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.7/dist/umd/popper.min.js" integrity="sha384-zYPOMqeu1DAVkHiLqWBUTcbYfZ8osu1Nd6Z89ify25QV9guujx43ITvfi12/QExE" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/js/bootstrap.min.js" integrity="sha384-heAjqF+bCxXpCWLa6Zhcp4fu20XoNIA98ecBC1YkdXhszjoejr5y9Q77hIrv8R9i" crossorigin="anonymous"></script>
    -->
  </body>
</html>

RTL 示例

开始使用我们的几个 RTL 示例之一。

方法

我们在 Bootstrap 中构建 RTL 支持的方法有两个重要的决策,它们会影响我们编写和使用 CSS 的方式:

  1. 首先,我们决定使用 RTLCSS 项目构建它。 这为我们提供了一些强大的功能,用于在从 LTR 迁移到 RTL 时管理更改和覆盖。它还允许我们从一个代码库构建两个版本的 Bootstrap。

  2. 其次,我们重命名了一些定向类以采用逻辑属性方法。 由于我们的 flex 实用程序,你们中的大多数人已经与逻辑属性进行了交互 - 它们替换了leftright等方向属性,转而支持startend。这使得类名和值适用于 LTR 和 RTL,没有任何开销。

例如,使用.ml-3代替.ms-3表示margin-left

不过,通过我们的源 Sass 或编译的 CSS 使用 RTL,应该与我们的默认 LTR 没有太大区别。

从源自定义

当涉及到customization时,首选的方法是利用变量,映射和mixins。这种方法对 RTL 的工作方式相同,即使它是从编译的文件进行后处理的,这要归功于 RTLCSS 的工作原理

自定义 RTL 值

使用 RTLCSS 值指令, 您可以使变量输出为 RTL 的不同值.例如,要在整个代码库中减少 $font-weight-bold的权重,可以使用 /*rtl: {value}*/语法:

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

这将输出到我们默认的CSS和RTL CSS的以下内容:

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

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

替代字体堆栈

如果您使用的是自定义字体,请注意并非所有字体都支持非拉丁字母。要从泛欧系列切换到阿拉伯语系列,您可能需要在字体堆栈中使用/*rtl:insert: {value}*/来修改字体系列的名称。

例如,要从 LTR 的Helvetica Neue字体切换到 RTL 的Helvetica Neue Arabic,您的 Sass 代码可能如下所示:

$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 和 RTL 同时进行

需要在同一页面上同时使用 LTR 和 RTL?感谢 [RTLCSS 字符串映射]https://rtlcss.com/learn/usage-guide/string-map/),这非常简单。用类包装您的@import,并为 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*/

运行 Sass 然后运行 RTLCSS 后,CSS 文件中的每个选择器都将以.ltr和 RTL 文件的.rtl开头。现在,您可以在同一页面上使用这两个文件,只需在组件包装器上使用.ltr.rtl即可使用其中一个方向。

使用LTR和RTL组合实现时要考虑的边缘情况和已知限制

  1. 切换.ltr.rtl时,请确保相应地添加dirlang属性。
  2. 加载这两个文件可能是一个真正的性能瓶颈:考虑一些优化,也许尝试异步加载其中一个文件
  3. 以这种方式嵌套样式将阻止我们的form-validation-state()mixin按预期工作,因此需要您自己对其进行一些调整。参见#31223

面包屑例子

面包屑分隔符是唯一需要自己的全新变量的情况 - 即$breadcrumb-divider-flipped - 默认为$breadcrumb-divider

其他资源