Використання підпису зображення у Markdown Jekyll


149

Я розміщую блог Джекілла в Github і пишу свої повідомлення разом із Маркдаун. Додаючи зображення, я роблю це наступним чином:

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

Потім це показує зображення в тексті.

Однак як я можу сказати Markdown додати підпис, який представлений нижче або над зображенням?

Відповіді:


115

Якщо ви не хочете використовувати будь - яких плагінів (а значить , ви можете підштовхнути його до GitHub безпосередньо без створення сайту першого), ви можете створити новий файл з ім'ям image.htmlв _includes:

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

А потім виведіть зображення з розмітки за допомогою:

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

1
Це чудова ідея! Однак site_rootне приймається як дійсна змінна. Коли він відображається, він закінчується як src="{{ site.url_root }}....
orschiro

2
Ага, правда, це змінна, додана в Octopress . Я її відредагував, тому зразок коду просто використовує відносну URL-адресу до зображення.
IQAndreas

3
Зараз Джекілл включає site.urlзмінну.
Рой Тінкер

20
Кращою розміткою було б:<figure class="image"><img src="{{ include.url }}" alt="{{ include.description }}"><figcaption>{{ include.description }}</figcaption></figure>
edmundo

Мені потрібна додаткова інформація ... можна поставити більше одного зображення без необхідності повторення include image.html? Я намагаюся з чимось подібним, {% for image in page.images %}але успіху немає. Можеш допомогти мені?
Едмундо

287

Я знаю, що це старе питання, але я подумав, що все-таки поділюсь своїм методом додавання підписів до зображень. Ви не зможете використовувати теги captionабо figcaption, але це буде простою альтернативою без використання плагінів.

Під час розмітки ви можете загортати підпис із тегом наголосу та розміщувати його безпосередньо під зображенням, не вставляючи новий рядок, як:

![](path_to_image)
*image_caption*

Це створило б такий HTML:

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

Тоді у своєму CSS ви можете стилювати його за допомогою наступного селектора, не втручаючись у інші emтеги на сторінці:

img + em { }

Зауважте, що у вас не повинно бути порожнього рядка між зображенням і підписом, оскільки це натомість генерує:

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

Ви також можете використовувати будь-який тег, який ви хочете, крім em. Просто переконайтеся, що є тег, інакше ви не зможете його стилізувати.


3
Дивовижно! Не потрібно запам’ятовувати якийсь дурний синтаксис
Джекілла

2
Я великий фанат цього
Алекс Вільямс

Дякую! Щойно шукав це
Michal Gruca

1
Привіт там! Я не зовсім впевнений, куди і як розмістити частину CSS ... було б справді чудово, якби хто-небудь міг допомогти.
ChriiSchee

2
@ChriiSchee Або розмістіть його в головному файлі CSS, або ви можете створити свій власний і пов’язати його зі своїм макетом за замовчуванням. Наприклад, мій макет за замовчуванням посилається на файл main.css, <link href="{{ site.baseurl }}/assets/css/main.css" rel="stylesheet">тому я просто додаю своє власне визначення CSS внизу цього файлу: // My custom css img + em { display: block; text-align: center; } //image captions
Ян Заврел

93

Ви можете використовувати таблицю для цього. Це чудово працює.

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

Результат:

введіть тут опис зображення


8
Ця відповідь найкраща. Використання чистої відмітки та отримання необхідного. Дякую!
Кадам Парих,

Сортування офтопіків, але це також працює в Jupyter Notebooks.
paulochf

Це зменшило ширину зі 100% для мене. Як я його розширюю?
Абхай Гегде

50

Правильний HTML, який слід використовувати для зображень із заголовками, є <figure>з<figcaption> .

Для цього немає еквівалента Markdown, тому, якщо ви додаєте лише випадкові підписи, я б радив вам просто додати цей HTML у ваш документ Markdown:

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...

Специфікація Markdown рекомендує вам вставляти HTML у подібних випадках, тому він відображатиметься чудово. Це також набагато простіше, ніж возитися з плагінами.

Якщо ви намагаєтесь використовувати інші функції Markdown-y (наприклад, таблиці, зірочки тощо) для створення підписів, то ви просто хакеруєте, як передбачалося використовувати Markdown.


5
Дуже погано, що ця відповідь не привернула жодної уваги - я дійсно вважаю це найпростішим і семантично правильним. Мене особливо хвилюють усі відповіді, що пропонують форматування за допомогою таблиць, які просто кричать в 90-х роках. ;-)
sudo make install

Я згоден. Однак, схоже, Bitbucket ще не підтримується. Піти.
Бор'єль

Мені подобається розумна і проста відповідь, яку надає @Andrew, але мені потрібно погодитись із цією явною інформацією, використовує відповідні теги HTML і не вимагає занадто багато вводити текст.
Шонба

1
Велике спасибі, я новачок в jekyll і не знав, що розмітка може використовуватися з html.
Самбо Кім

6

Невеликий риф вгорі проголосував відповіддю, який я вважаю трохи більш явним - використовувати синтаксис jekyll для додавання класу до чогось, а потім стиль його таким чином.

Тож у посаді ви мали б:

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

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

А потім у своєму CSS-файлі ви можете зробити щось подібне:

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

Виходить добре виглядати!


4

Є два семантично правильних рішення цього питання:

  1. Використання плагіна
  2. Створення користувальницької включати

1. Використання плагіна

Я спробував пару плагінів, роблячи це, і мій улюбленийjekyll-figure .

1.1. Встановитиjekyll-figure

Один із способів встановлення jekyll-figure- це додавання gem "jekyll-figure"до вашого Gemfile у групі плагінів.

Потім запустіть bundle installз вікна вашого терміналу.

1.2. Використовуйтеjekyll-figure

Просто загорніть позначку {% figure %}та {% endfigure %}позначки.

Підпис міститься в {% figure %}тезі, що відкривається , і ви навіть можете стилізувати його за допомогою розмітки!

Приклад:

{% 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. Стиль це

Тепер, коли ваші зображення та підписи є семантично правильними, ви можете застосувати CSS так, як хочете:

  • figure (як для зображення, так і для підпису)
  • figure img (лише для зображення)
  • figcaption (лише для підписів)

2. Створення користувальницької включати

Вам потрібно буде створити image.htmlфайл у своїй _includesпапці та включити його за допомогою рідини в Markdown .

2.1. Створіть _includes / image.html

Створіть image.htmlдокумент у папці _includes:

<!-- _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. У розмітку додайте зображення за допомогою рідини

Зображення /assets/imagesз підписом:

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 -->
%}

Зовнішнє зображення з абсолютною URL-адресою: (змінити src=""на 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 -->
%}

Зображення, яке можна натиснути: (додати url=""аргумент)

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 -->
%}

Зображення без підпису:

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. Стиль це

Тепер, коли ваші зображення та підписи є семантично правильними, ви можете застосувати CSS так, як хочете:

  • figure (як для зображення, так і для підпису)
  • figure img (лише для зображення)
  • figcaption (лише для підписів)

1
Для повноти, якщо ви хочете використовувати jekyll-фігуру, вам доведеться додати jekyll-figure до плагінів у вашому _config.yml
Aleix Sanchis

3

Ви можете спробувати використовувати pandocяк конвертер. Ось плагін для jekyll для цього. Pandoc зможе автоматично додати підпис до фігури, такий же, як ваш altатрибут.

Але вам потрібно натиснути скомпільований сайт, оскільки github не дозволяє плагінам на сторінках Github для безпеки.


Дякую. Тож розмітка сама по собі не здатна створювати підписи?
orschiro

Я вважаю, що це залежить від перетворювача, який ви використовуєте, однак стандарт розмітки не підтримує додавання підписів.
Chongxu Ren

3

Відповідь Ендрю @ andrew-wei чудово працює. Ви також можете зв'язати декілька разом, залежно від того, що ви намагаєтеся зробити. Наприклад, ви отримуєте зображення з alt, заголовком та підписом із розривом рядка та жирним шрифтом та курсивом у різних частинах підпису:

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;}

З такою <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>

Це основне використання підписів. Не потрібно використовувати додатковий плагін.


0

Ось найпростіше (але не найкрасивіше) рішення: складіть стіл навколо всієї справи. Очевидно, є проблеми із масштабуванням, і саме тому я наводя свій приклад із HTML, щоб ви могли легко змінювати розмір зображення. Це працювало для мене.

| <img src="" alt="" style="width: 400px;"/> |
| My Caption |
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.