Страница <style> в заголовке за 11ти
Я новичок в 11ty и Nunjucks, но нигде не могу найти этот ответ. Я хотел бы добавить блок стиля для конкретной страницы в тег заголовка шаблона со страницы. Я пришел из фона Vue/Nuxt, и мне очень нравится, как вы можете привязать блок CSS к компоненту / странице, и они автоматически помещают его в тег заголовка для вас.
Вот мой общий макет:
index.njk
---
layout: default.njk
title: Home
---
<img src="http://lorempixel.com/1200/300/sports/5" style="width: 100%;" />
<div class="container">
<h1>11ty Test</h1>
</div>
{% block customstyles %}
<style>
.container{
background: red;
}
</style>
{% endblock %}
_includes / default.njk
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }}
| 11ty Sandbox</title>
{% block customstyles %}
This is the default content
{% endblock %}
</head>
<body>
{{ content | safe }}
</body>
</html>
Это работает до определенной степени, но тег стиля находится в теле, а не в голове, и блок не работает, как я понимаю. Что мне не хватает?
3 ответа
Проблема в том, что вы не можете использовать {% block %}
в файле содержимого... их можно использовать только в файле, расположенном в _includes
. Вот версия вашего примера, которая действительно работает...
_includes / default.njk
Это ваш базовый макет, от которого "расширяются" все остальные макеты.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }}
| 11ty Sandbox</title>
{% block customstyles %}
This is the default content
{% endblock %}
</head>
<body>
{% block body %}
{{ content | safe }}
{% endblock %}
</body>
</html>
_includes / simple.njk
Это макет только для "простых" страниц. Обратите внимание, что он использует{% extends "default.njk" %}
и он использует {% block customstyles %}
чтобы предоставить индивидуальный стиль.
{% extends "default.njk" %}
{% block customstyles %}
<style>
.container{
background: red;
}
</style>
{% endblock %}
{% block body %}
<img src="{{ image }}" style="width: 100%;" />
<div class="container">
<h1>{{ title }}</h1>
{{ content | safe }}
</div>
{% endblock %}
index.njk
Эта страница - это просто контент, изображение и заголовок, и она отображается с использованием "простого" макета.
---
layout: simple.njk
title: Home
image: http://lorempixel.com/1200/300/sports/5
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Sed finibus, velit a tristique hendrerit, nisl nisi aliquet diam, a vulputate tortor quam et odio.
Vivamus vitae magna a eros suscipit luctus a quis lorem.
Для вывода данных в шапку сайта следует использовать следующий блок
Вы можете попробовать поместить свои конкретные стили в данные вступительного документа, а затем отобразить их в основном шаблоне.
layout: default.njk
title: Home
style: ".container{background: red;}"
или, если есть длинные стили, сделайте компонент и передайте его имя в заголовке страницы, чтобы ваш шаблон включил его в рендер.