Sử dụng chú thích hình ảnh trong Markdown Jekyll


149

Tôi đang lưu trữ một Blog Jekyll trên Github và viết bài đăng của mình với Markdown. Khi tôi thêm hình ảnh, tôi làm theo cách sau:

![name of the image](http://link.com/image.jpg)

Điều này sau đó cho thấy hình ảnh trong văn bản.

Tuy nhiên, làm cách nào tôi có thể yêu cầu Markdown thêm chú thích được trình bày bên dưới hoặc bên trên hình ảnh?

Câu trả lời:


115

Nếu bạn không muốn sử dụng bất kỳ plugin nào (có nghĩa là bạn có thể đẩy nó trực tiếp lên GitHub mà không cần tạo trang web trước), bạn có thể tạo một tệp mới có tên image.htmltrong _includes:

<figure class="image">
  <img src="{{ include.url }}" alt="{{ include.description }}">
  <figcaption>{{ include.description }}</figcaption>
</figure>

Và sau đó hiển thị hình ảnh từ đánh dấu của bạn với:

{% include image.html url="/images/my-cat.jpg" description="My cat, Robert Downey Jr." %}

1
Đó là một ý tưởng tuyệt vời! Tuy nhiên, site_rootkhông được chấp nhận là một biến hợp lệ. Khi kết xuất nó kết thúc là src="{{ site.url_root }}....
orschiro

2
À, đúng rồi, đó là một biến được thêm vào trong Octopress . Tôi đã chỉnh sửa nó, vì vậy mã mẫu chỉ sử dụng một URL tương đối cho hình ảnh.
IQAndreas

3
Jekyll hiện bao gồm một site.urlbiến.
Roy Tinker

20
Một đánh dấu tốt hơn sẽ là:<figure class="image"><img src="{{ include.url }}" alt="{{ include.description }}"><figcaption>{{ include.description }}</figcaption></figure>
edmundo

Tôi cần thêm thông tin, có thể đặt nhiều hơn một hình ảnh mà không cần lặp lại include image.htmlkhông? Tôi đang cố gắng với một cái gì đó như {% for image in page.images %}nhưng không thành công. Bạn có thể giúp tôi được không?
edmundo

286

Tôi biết đây là một câu hỏi cũ nhưng tôi nghĩ tôi vẫn chia sẻ phương pháp thêm chú thích hình ảnh của mình. Bạn sẽ không thể sử dụng các thẻ captionhoặc figcaption, nhưng đây sẽ là một cách thay thế đơn giản mà không cần sử dụng bất kỳ plugin nào.

Trong phần đánh dấu của bạn, bạn có thể bọc chú thích của mình bằng thẻ nhấn mạnh và đặt nó trực tiếp bên dưới hình ảnh mà không cần chèn một dòng mới như vậy:

![](path_to_image)
*image_caption*

Điều này sẽ tạo ra HTML sau:

<p>
    <img src="path_to_image" alt>
    <em>image_caption</em>
</p>

Sau đó, trong CSS của bạn, bạn có thể tạo kiểu cho nó bằng cách sử dụng bộ chọn sau mà không can thiệp vào các emthẻ khác trên trang:

img + em { }

Lưu ý rằng bạn không được có một dòng trống giữa hình ảnh và chú thích vì điều đó thay vào đó sẽ tạo ra:

<p>
    <img src="path_to_image" alt>
</p>
<p>
    <em>image_caption</em>
</p>

Bạn cũng có thể sử dụng bất cứ thẻ nào bạn muốn ngoài em. Chỉ cần đảm bảo có thẻ, nếu không bạn sẽ không thể tạo kiểu cho nó.


3
Tuyệt vời! Không cần phải ghi nhớ một số cú pháp jekyll ngu ngốc :)
Corstian Boerman

2
Tôi là một fan hâm mộ lớn của điều này
Alex Williams

Cảm ơn bạn! Chỉ đang tìm kiếm điều đó
Michal Gruca

1
Chào bạn Tôi không chắc chắn nơi để đặt phần CSS ... nó sẽ thực sự tuyệt vời nếu có ai có thể giúp đỡ.
ChriiSchee

2
@ChriiSchee Hoặc bạn đặt nó trong tệp CSS chính hoặc bạn có thể tạo riêng của mình và liên kết nó với bố cục mặc định của bạn. Ví dụ: bố cục mặc định của tôi liên kết đến tệp main.css <link href="{{ site.baseurl }}/assets/css/main.css" rel="stylesheet">vì vậy tôi chỉ cần thêm định nghĩa CSS tùy chỉnh của mình ở dưới cùng của tệp này: // My custom css img + em { display: block; text-align: center; } //image captions
Jan Zavrel

92

Bạn có thể sử dụng bảng cho việc này. Nó hoạt động tốt.

| ![space-1.jpg](http://www.storywarren.com/wp-content/uploads/2016/09/space-1.jpg) | 
|:--:| 
| *Space* |

Kết quả:

nhập mô tả hình ảnh ở đây


8
Câu trả lời này là tốt nhất .. Sử dụng markdown thuần túy và nhận được những gì bạn cần. Cảm ơn!
Kadam Parikh

Sắp xếp không chính thức, nhưng điều này cũng hoạt động trong Notebook Jupyter.
paulochf

Nó giảm chiều rộng từ 100% cho tôi. Làm thế nào để tôi mở rộng nó?
Abhay Hegde

50

HTML chính xác để sử dụng cho hình ảnh có chú thích, là <figure>với<figcaption> .

Không có Markdown tương đương cho điều này, vì vậy nếu bạn chỉ thêm chú thích không thường xuyên, tôi khuyến khích bạn chỉ cần thêm html đó vào tài liệu Markdown của mình:

Lorem ipsum dolor sit amet, consectetur adipiscing elit...

<figure>
  <img src="{{site.url}}/assets/image.jpg" alt="my alt text"/>
  <figcaption>This is my caption text.</figcaption>
</figure>

Vestibulum eu vulputate magna...

Thông số Markdown khuyến khích bạn nhúng HTML trong các trường hợp như thế này, vì vậy nó sẽ hiển thị tốt. Nó cũng đơn giản hơn nhiều so với việc làm rối các plugin.

Nếu bạn đang cố gắng sử dụng các tính năng Markdown-y khác (như bảng, dấu sao, v.v.) để tạo chú thích, thì bạn chỉ đang hack xung quanh cách sử dụng Markdown.


4
Thật tệ khi câu trả lời này đã không nhận được bất kỳ sự chú ý nào - tôi thực sự nghĩ rằng đó là cách đơn giản nhất và đúng nhất về mặt ngữ nghĩa. Tôi đặc biệt đau khổ bởi tất cả các câu trả lời gợi ý định dạng bằng cách sử dụng các bảng, chỉ là những dấu vết của thập niên 1990. ;-)
sudo thực hiện cài đặt

Tôi đồng ý. Tuy nhiên, dường như nó chưa được Bitbucket hỗ trợ. Một Pitty.
Boriel

Tôi thích câu trả lời thông minh và đơn giản do @Andrew cung cấp nhưng tôi phải đi với câu trả lời rõ ràng này, sử dụng các thẻ HTML phù hợp và không yêu cầu nhập quá nhiều.
Seanba

1
Cảm ơn rất nhiều, tôi chưa quen với jekyll và không biết markdown có thể được sử dụng với html.
Sambo Kim

6

Một câu riff nhẹ về câu trả lời được bình chọn hàng đầu mà tôi thấy rõ ràng hơn một chút là sử dụng cú pháp jekyll để thêm một lớp vào một cái gì đó và sau đó tạo kiểu theo cách đó.

Vì vậy, trong bài bạn sẽ có:

![My image](/images/my-image.png)

{:.image-caption}
*The caption for my image*

Và sau đó trong tệp CSS của bạn, bạn có thể làm một cái gì đó như thế này:

.image-caption {
  text-align: center;
  font-size: .8rem;
  color: light-grey;

Nhìn ra tốt!


4

Có hai giải pháp đúng về mặt ngữ nghĩa cho câu hỏi này:

  1. Sử dụng plugin
  2. Tạo một tùy chỉnh bao gồm

1. Sử dụng plugin

Tôi đã thử một vài plugin làm điều này và yêu thích của tôi làjekyll-figure .

1.1. Tải vềjekyll-figure

Một cách để cài đặt jekyll-figurelà thêm gem "jekyll-figure"vào Gemfile của bạn trong nhóm plugin của bạn.

Sau đó chạy bundle installtừ cửa sổ thiết bị đầu cuối của bạn.

1.2. Sử dụngjekyll-figure

Đơn giản chỉ cần bọc markdown của bạn trong {% figure %}{% endfigure %}thẻ.

Chú thích của bạn đi vào {% figure %}thẻ mở và thậm chí bạn có thể tạo kiểu cho nó bằng cách đánh dấu!

Thí dụ:

{% figure caption:"Le logo de **Jekyll** et son clin d'oeil à Robert Louis Stevenson" %}
    ![Le logo de Jekyll](/assets/images/2018-08-07-jekyll-logo.png)
{% endfigure %}

1.3. Phong cách nó

Giờ đây, hình ảnh và chú thích của bạn đã chính xác về mặt ngữ nghĩa, bạn có thể áp dụng CSS theo ý muốn:

  • figure (cho cả hình ảnh và chú thích)
  • figure img (chỉ dành cho hình ảnh)
  • figcaption (chỉ dành cho chú thích)

2. Tạo một tùy chỉnh bao gồm

Bạn sẽ cần tạo một image.htmltệp trong _includesthư mục của mìnhđưa tệp đó vào Liquid trong Markdown .

2.1. Tạo _includes / image.html

Tạo image.htmltài liệu trong thư mục _includes của bạn:

<!-- _includes/image.html -->
<figure>
    {% if include.url %}
    <a href="{{ include.url }}">
    {% endif %}
    <img
        {% if include.srcabs %}
            src="{{ include.srcabs }}"
        {% else %}
            src="{{ site.baseurl }}/assets/images/{{ include.src }}"
        {% endif %}
    alt="{{ include.alt }}">
    {% if include.url %}
    </a>
    {% endif %}
    {% if include.caption %}
        <figcaption>{{ include.caption }}</figcaption>
    {% endif %}
</figure>

2.2. Trong Markdown, bao gồm hình ảnh bằng Liquid

Một hình ảnh /assets/imagesvới chú thích:

This is [Jekyll](https://jekyllrb.com)'s logo :

{% include image.html
    src="jekyll-logo.png" <!-- image filename (placed in /assets/images) -->
    alt="Jekyll's logo" <!-- alt text -->
    caption="This is Jekyll's logo, featuring Dr. Jekyll's serum!" <!-- Caption -->
%}

Hình ảnh (bên ngoài) sử dụng URL tuyệt đối: (thay đổi src=""thành srcabs="")

This is [Jekyll](https://jekyllrb.com)'s logo :

{% include image.html
    srcabs="https://jekyllrb.com/img/logo-2x.png" <!-- absolute URL to image file -->
    alt="Jekyll's logo" <!-- alt text -->
    caption="This is Jekyll's logo, featuring Dr. Jekyll's serum!" <!-- Caption -->
%}

Một hình ảnh có thể nhấp: (thêm url=""đối số)

This is [Jekyll](https://jekyllrb.com)'s logo :

{% include image.html
    src="https://jekyllrb.com/img/logo-2x.png" <!-- absolute URL to image file -->
    url="https://jekyllrb.com" <!-- destination url -->
    alt="Jekyll's logo" <!-- alt text -->
    caption="This is Jekyll's logo, featuring Dr. Jekyll's serum!" <!-- Caption -->
%}

Một hình ảnh không có chú thích:

This is [Jekyll](https://jekyllrb.com)'s logo :

{% include image.html
    src="https://jekyllrb.com/img/logo-2x.png" <!-- absolute URL to image file -->
    alt="Jekyll's logo" <!-- alt text -->
%}

2.3. Phong cách nó

Giờ đây, hình ảnh và chú thích của bạn đã chính xác về mặt ngữ nghĩa, bạn có thể áp dụng CSS theo ý muốn:

  • figure (cho cả hình ảnh và chú thích)
  • figure img (chỉ dành cho hình ảnh)
  • figcaption (chỉ dành cho chú thích)

1
Để hoàn thiện, nếu bạn muốn sử dụng jekyll-hình, bạn sẽ phải thêm jekyll-hình vào các plugin trong _config.yml
Aleix Sanchis

3

Bạn có thể thử sử dụng pandocnhư là công cụ chuyển đổi của bạn. Đây là một plugin jekyll để thực hiện điều này. Pandoc sẽ có thể tự động thêm chú thích hình giống như altthuộc tính của bạn .

Nhưng bạn phải đẩy trang được biên dịch vì github không cho phép bổ trợ trong các trang Github để bảo mật.


Cảm ơn. Vì vậy, markdown một mình không có khả năng tạo chú thích?
orschiro

Tôi tin rằng nó phụ thuộc vào trình chuyển đổi bạn sử dụng, tuy nhiên, tiêu chuẩn đánh dấu không hỗ trợ thêm chú thích.
Chongxu Ren

3

Câu trả lời @ andrew-wei của Andrew hoạt động rất tốt. Bạn cũng có thể xâu chuỗi một vài cái lại với nhau, tùy thuộc vào những gì bạn đang cố gắng làm. Ví dụ, điều này giúp bạn có một hình ảnh với alt, tiêu đề và chú thích với dấu ngắt dòng và đậm và in nghiêng trong các phần khác nhau của chú thích:

img + br + strong {margin-top: 5px; margin-bottom: 7px; font-style:italic; font-size: 12px; }
img + br + strong + em {margin-top: 5px; margin-bottom: 7px; font-size: 12px; font-style:italic;}

Với đánh dấu sau <img>:

![description](https://img.jpg "description")
***Image:*** *description*

1
<p align="center">
  <img alt="img-name" src="/path/image-name.png" width="300">
  <br>
    <em>caption</em>
</p>

Đó là sử dụng chú thích cơ bản. Không cần thiết phải sử dụng một plugin bổ sung.


0

Đây là giải pháp đơn giản nhất (nhưng không đẹp nhất): tạo một bảng xung quanh toàn bộ. Rõ ràng có các vấn đề mở rộng và đây là lý do tại sao tôi đưa ra ví dụ của mình với HTML để bạn có thể sửa đổi kích thước hình ảnh một cách dễ dàng. Điều này làm việc cho tôi.

| <img src="" alt="" style="width: 400px;"/> |
| My Caption |
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.