Chủ đề - MkDocs
Phát triển chủ đề
Hướng dẫn tạo và phân phối chủ đề tùy chỉnh.
Ghi chú
Nếu bạn đang tìm kiếm các chủ đề của bên thứ ba hiện có, chúng được liệt kê trong trang wiki cộng đồng và danh mục dự án MkDocs . Nếu bạn muốn chia sẻ một chủ đề bạn tạo, bạn nên liệt kê chủ đề đó ở đó.
Khi tạo một chủ đề mới, bạn có thể làm theo các bước trong hướng dẫn này để tạo một chủ đề từ đầu hoặc bạn có thể tải xuống dưới mkdocs-basic-themedạng chủ đề cơ bản nhưng đầy đủ với tất cả các mẫu cần thiết. Bạn có thể tìm thấy chủ đề cơ bản này trên GitHub . Nó chứa các bình luận chi tiết trong mã để mô tả các tính năng khác nhau và cách sử dụng của chúng.
Tạo chủ đề tùy chỉnh
Yêu cầu tối thiểu cho một chủ đề tùy chỉnh là tệp main.html mẫu Jinja2 được đặt trong một thư mục không phải là con của docs_dir . Trong mkdocs.yml, hãy đặt theme.custom_dir tùy chọn thành đường dẫn của thư mục chứa main.html. Đường dẫn phải tương đối với tệp cấu hình. Ví dụ, với bố cục dự án mẫu này:
mkdocs.yml docs/ index.md about.md custom_theme/ main.html ...
... bạn sẽ bao gồm các thiết lập sau mkdocs.ymlđể sử dụng thư mục chủ đề tùy chỉnh:
theme: name: null custom_dir: 'custom_theme/'
Ghi chú
Nhìn chung, khi xây dựng chủ đề tùy chỉnh của riêng bạn, thiết lập cấu hình theme.name sẽ đ ược đặt thành .null Tuy nhiên, nếu giá trị cấu hình theme.custom_dir được sử dụng kết hợp với một chủ đề hiện có, thì theme.custom_dir có thể được sử dụng để chỉ thay thế các phần cụ thể của một chủ đề tích hợp. Ví dụ, với bố cục ở trên và nếu bạn đặt name: "mkdocs"thì main.htmltệp trong theme.custom_dir sẽ thay thế tệp có cùng tên trong chủ đề nhưng nếu không thì chủ đề sẽ không thay đổi. Điều này hữu ích nếu bạn muốn thực hiện các điều chỉnh nhỏ cho một chủ đề hiện có.mkdocs``mkdocs
Để biết thông tin cụ thể hơn, hãy xem mục Tùy chỉnh chủ đề của bạn .
Cảnh báo
Cấu hình của chủ đề được xác định trong mkdocs_theme.ymltệp không được tải từ theme.custom_dir. Khi toàn bộ chủ đề tồn tại trong theme.custom_dir và theme.nameđược đặt thành null, thì toàn bộ cấu hình chủ đề phải được xác định trong tùy chọn cấu hình chủ đề trong mkdocs.ymltệp.
Tuy nhiên, khi một chủ đề được đóng gói để phân phối và tải bằng theme.nametùy chọn cấu hình thì mkdocs_theme.ymlcần có một tệp cho chủ đề đó.
Chủ đề cơ bản
Tệp đơn giản nhất main.htmllà tệp sau:
<!DOCTYPE html> <html> <head> <title>{% if page.title %}{{ page.title }} - {% endif %}{{ config.site_name }}</title> {%- for path in config.extra_css %} <link href="{{ path | url }}" rel="stylesheet"> {%- endfor %} </head> <body> {{ page.content }} {%- for script in config.extra_javascript %} {{ script | script_tag }} {%- endfor %} </body> </html>
Nội dung chính từ mỗi trang được chỉ định trong mkdocs.ymlđược chèn bằng {{ page.content }}thẻ. Các bảng định kiểu và tập lệnh có thể được đưa vào chủ đề này như với tệp HTML thông thường. Thanh điều hướng và mục lục cũng có thể được tạo và bao gồm tự động, thông qua các đối tượng navvà toc. Nếu bạn muốn viết chủ đề của riêng mình, bạn nên bắt đầu bằng một trong các chủ đề tích hợp và sửa đổi cho phù hợp.
Ghi chú
Vì MkDocs sử dụng Jinja làm công cụ mẫu của mình, bạn có thể truy cập vào tất cả sức mạnh của Jinja, bao gồm cả kế thừa mẫu . Bạn có thể nhận thấy rằng các chủ đề đi kèm với MkDocs sử dụng rộng rãi kế thừa mẫu và các khối, cho phép người dùng dễ dàng ghi đè các bit và phần nhỏ của mẫu từ chủ đề custom_dir . Do đó, các chủ đề tích hợp được triển khai trong một base.htmltệp, main.htmlmở rộng. Mặc dù không bắt buộc, nhưng các tác giả mẫu của bên thứ ba được khuyến khích làm theo một mẫu tương tự v à có thể muốn xác định các khối giống như được sử dụng trong các chủ đề tích hợp để đảm bảo tính nhất quán.
Lấy CSS và JavaScript từ cấu hình
MkDocs định nghĩa các cấu hình extra_css và extra_javascript cấp cao nhất . Đây là danh sách các tệp.
Chủ đề phải bao gồm HTML liên kết các mục từ các cấu hình này, nếu không các cấu hình sẽ không hoạt động. Bạn có thể xem cách được đề xuất để hiển thị cả hai trong ví dụ cơ sở ở trên .
Đã thay đổi trong phiên bản 1.5:
Các mục trong config.extra_javascriptdanh sách trước đây là các chuỗi đơn giản nhưng giờ đã trở thành các đối tượng có các trường sau: path, type, async, defer.
Trong phiên bản đó, MkDocs cũng có thêm script_tagbộ lọc .
Phong cách lỗi thời:
{%- for path in extra_javascript %} <script src="{{ path }}"></script> {%- endfor %}
Ví dụ kiểu cũ này thậm chí còn sử dụng extra_javascriptdanh sách cấp cao nhất đã lỗi thời. Vui lòng luôn sử dụng config.extra_javascriptthay thế.
Vì vậy, một cách tiếp cận hiện đại hơn một chút là như sau, nhưng nó vẫn lỗi thời vì nó bỏ qua các thuộc tính bổ sung của tập lệnh:
{%- for path in config.extra_javascript %} <script src="{{ path | url }}"></script> {%- endfor %}
? VÍ DỤ: Kiểu mới:
{%- for script in config.extra_javascript %} {{ script | script_tag }} {%- endfor %}
Nếu bạn muốn có thể chọn các tùy chỉnh mới trong khi vẫn giữ cho chủ đề của mình tương thích với các phiên bản cũ hơn của MkDocs, hãy sử dụng đoạn mã này:
Phong cách tương thích ngược:
{%- for script in config.extra_javascript %} {%- if script.path %} {# Detected MkDocs 1.5+ which has `script.path` and `script_tag` #} {{ script | script_tag }} {%- else %} {# Fallback - examine the file name directly #} <script src="{{ script | url }}"{% if script.endswith(".mjs") %} type="module"{% endif %}></script> {%- endif %} {%- endfor %}