mod: стили и меню...
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
{% block title %}{{ page.seo_title|default:page.title }} — ETPGRF{% endblock %}
|
{% block title %}{{ page.seo_title|default:page.title }} — ETPGRF{% endblock %}
|
||||||
{% block description %}{{ page.seo_description|default:page.content|striptags|truncatechars:160 }}{% endblock %}
|
{% block description %}{{ page.seo_description|default:page.content|striptags|truncatechars:160 }}{% endblock %}
|
||||||
|
{% block keywords %}{{ page.seo_keywords|default:'типограф, типографика, онлайн типограф, подготовка текста для веба, html типограф, неразрывные пробелы, кавычки елочки, длинное тире, очистка текста от мусора, интернет верстка, муравьев' }} seo_keywords {% endblock %}
|
||||||
{% block og_title %}{{ page.seo_title|default:page.title }}{% endblock %}
|
{% block og_title %}{{ page.seo_title|default:page.title }}{% endblock %}
|
||||||
{% block og_description %}{{ page.seo_description|default:page.content|striptags|truncatechars:160 }}{% endblock %}
|
{% block og_description %}{{ page.seo_description|default:page.content|striptags|truncatechars:160 }}{% endblock %}
|
||||||
{% block og_image %}{% if page.image %}{{ request.scheme }}://{{ request.get_host }}{{ page.image.url }}{% else %}{{ request.scheme }}://{{ request.get_host }}{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}{% endif %}{% endblock %}
|
{% block og_image %}{% if page.image %}{{ request.scheme }}://{{ request.get_host }}{{ page.image.url }}{% else %}{{ request.scheme }}://{{ request.get_host }}{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}{% endif %}{% endblock %}
|
||||||
@@ -22,15 +23,15 @@
|
|||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
{% if post.image %}
|
{% if post.image %}
|
||||||
<img src="{{ post.image.url }}" class="w-100 rounded" alt="{{ post.title|safe }}" />
|
<img src="{{ post.image.url }}" class="w-100" alt="{{ post.title|safe }}" />
|
||||||
{% else %}
|
{% else %}
|
||||||
<img src="{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}" class="w-100 rounded opacity-50" alt="{{ post.title|safe }}" />
|
<img src="{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}" class="w-100" alt="{{ post.title|safe }}" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{# Правая колонка: Контент #}
|
{# Правая колонка: Контент #}
|
||||||
<div class="col-lg-10 border-start ps-lg-4">
|
<div class="col-lg-10 border-start ps-lg-4 post-page-content">
|
||||||
|
|
||||||
<h1 class="display-4 mb-4">{{ page.title|safe }}</h1>
|
<h1 class="display-4 mb-4">{{ page.title|safe }}</h1>
|
||||||
|
|
||||||
|
|||||||
@@ -23,9 +23,9 @@
|
|||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
{% if post.image %}
|
{% if post.image %}
|
||||||
<img src="{{ post.image.url }}" class="w-100 rounded" alt="{{ post.title }}" />
|
<img src="{{ post.image.url }}" class="w-100" alt="{{ post.title }}" />
|
||||||
{% else %}
|
{% else %}
|
||||||
<img src="{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}" class="w-100 rounded opacity-50" alt="{{ post.title }}" />
|
<img src="{% static 'img/etpgrf-logo-for-fb-vk-x.gif' %}" class="w-100" alt="{{ post.title }}" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{# Правая колонка: Контент #}
|
{# Правая колонка: Контент #}
|
||||||
<div class="col-lg-10 border-start ps-lg-4">
|
<div class="col-lg-10 border-start ps-lg-4 post-page-content">
|
||||||
|
|
||||||
<h1 class="display-4 mb-4">{{ post.title }}</h1>
|
<h1 class="display-4 mb-4">{{ post.title }}</h1>
|
||||||
|
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ INSTALLED_APPS = [
|
|||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
'typograph',
|
'typograph', # Основное приложение типографа
|
||||||
'blog', # Наше новое приложение
|
'blog', # Приложение для блога и страниц
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
{# --- SEO & Meta Tags --- #}
|
{# --- SEO & Meta Tags --- #}
|
||||||
<title>{% block title %}ETPGRF — единая типографика для веба{% endblock %}</title>
|
<title>{% block title %}ETPGRF — единая типографика для веба{% endblock %}</title>
|
||||||
<meta name="description" content="{% block description %}Бесплатный онлайн-типограф для подготовки текстов к публикации в вебе. Расставка неразрывных пробелов, правильных кавычек («ёлочки»), тире, спецсимволы, отбивка, компоновка, висячая пунктуация. Идеально для верстки сайтов, статей и постов.{% endblock %}">
|
<meta name="description" content="{% block description %}Бесплатный онлайн-типограф для подготовки текстов к публикации в вебе. Расставка неразрывных пробелов, правильных кавычек («ёлочки»), тире, спецсимволы, отбивка, компоновка, висячая пунктуация. Идеально для верстки сайтов, статей и постов.{% endblock %}">
|
||||||
<meta name="keywords" content="типограф, типографика, онлайн типограф, подготовка текста для веба, html типограф, неразрывные пробелы, кавычки елочки, длинное тире, очистка текста от мусора, интернет верстка, муравьев">
|
<meta name="keywords" content="{% block keywords %}типограф, типографика, онлайн типограф, подготовка текста для веба, html типограф, неразрывные пробелы, кавычки елочки, длинное тире, очистка текста от мусора, интернет верстка, муравьев{% endblock %}">
|
||||||
<meta name="author" content="Sergei Erjemin">
|
<meta name="author" content="Sergei Erjemin">
|
||||||
|
|
||||||
{# --- Open Graph (Facebook, VK, LinkedIn, Telegram) --- #}
|
{# --- Open Graph (Facebook, VK, LinkedIn, Telegram) --- #}
|
||||||
@@ -60,6 +60,23 @@
|
|||||||
<a class="navbar-brand" href="/" style="background-image: var(--bg-image-text);"
|
<a class="navbar-brand" href="/" style="background-image: var(--bg-image-text);"
|
||||||
title="ETPGRF — единая типографика для веба">
|
title="ETPGRF — единая типографика для веба">
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
{# Кнопка-бургер для мобильных #}
|
||||||
|
<button class="navbar-toggler border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
{# Меню #}
|
||||||
|
<div class="collapse navbar-collapse justify-content-end text-end" id="navbarNav">
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link {% if '/blog/' in request.path %}active fw-bold{% endif %}" href="{% url 'blog:post_list' %}">Блог</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link {% if request.path == '/donate/' %}active fw-bold{% endif %}" href="/donate/">Поддержать</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
{% extends 'typograph/base.html' %}
|
{% extends 'typograph/base.html' %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
|
|
||||||
|
{% block title %}ETPGRF — единая типографика для веба{% endblock %}
|
||||||
|
|
||||||
|
{% block description %}Бесплатный онлайн-типограф для подготовки текстов к публикации в вебе. Расставка неразрывных пробелов, правильных кавычек («ёлочки»), тире, спецсимволы, отбивка, компоновка, висячая пунктуация. Идеально для верстки сайтов, статей и постов.{% endblock %}
|
||||||
|
|
||||||
|
{% block keywords %}типограф, типографика, онлайн типограф, подготовка текста для веба, html типограф, неразрывные пробелы, кавычки елочки, длинное тире, очистка текста от мусора, интернет верстка, муравьев{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
|
|||||||
@@ -26,6 +26,9 @@
|
|||||||
--bs-link-color: #90caf9;
|
--bs-link-color: #90caf9;
|
||||||
--bs-link-hover-color: #bbdefb;
|
--bs-link-hover-color: #bbdefb;
|
||||||
|
|
||||||
|
--bs-linkcolor: #14abda;
|
||||||
|
--bs-linkclolor-hover: #90caf9;
|
||||||
|
|
||||||
--bs-border-color: #37474f;
|
--bs-border-color: #37474f;
|
||||||
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
|
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
|
||||||
|
|
||||||
@@ -38,11 +41,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Небольшие стили для красоты */
|
/* Небольшие стили для красоты */
|
||||||
html, body {
|
html {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
|
min-height: 100%; /* Используем min-height вместо height */
|
||||||
background-color: var(--bs-body-bg);
|
background-color: var(--bs-body-bg);
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -76,6 +80,7 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#main-navbar > #logo > .navbar-brand {
|
#main-navbar > #logo > .navbar-brand {
|
||||||
|
padding: 0; /* Убираем отступы у бренда */
|
||||||
display: block; /* Блок, чтобы работали размеры */
|
display: block; /* Блок, чтобы работали размеры */
|
||||||
background: no-repeat left;
|
background: no-repeat left;
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
@@ -96,6 +101,50 @@ body {
|
|||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --- Стили для ссылок в меню --- */
|
||||||
|
.navbar {
|
||||||
|
/* position: fixed; Убрал fixed, так как у нас sticky */
|
||||||
|
/* top: 0; */
|
||||||
|
/* width: 100%; */
|
||||||
|
/* background: var(--bs-navbar-bg); */
|
||||||
|
/* display: flex; */
|
||||||
|
/* justify-content: center; */
|
||||||
|
/* transition: all 0.8s; */
|
||||||
|
}
|
||||||
|
.nav-item {
|
||||||
|
color: var(--bs-body-bg);
|
||||||
|
padding: 10px 15px;
|
||||||
|
text-decoration: none;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Фикс для мобильной версии: ширина по контенту и прижатие вправо */
|
||||||
|
@media (max-width: 991.98px) {
|
||||||
|
.nav-item {
|
||||||
|
width: fit-content;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item:hover {
|
||||||
|
background-color: var(--bs-navbar-bg);
|
||||||
|
transition: background-color 0.8s;
|
||||||
|
}
|
||||||
|
.nav-item::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 3px;
|
||||||
|
background: var(--bs-linkcolor);
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
transform: scaleX(0);
|
||||||
|
transition: transform 0.3s;
|
||||||
|
}
|
||||||
|
.nav-item:hover::after {
|
||||||
|
transform: scaleX(1);
|
||||||
|
}
|
||||||
|
|
||||||
/* Контент растягивается, чтобы прижать футер */
|
/* Контент растягивается, чтобы прижать футер */
|
||||||
#content-container {
|
#content-container {
|
||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
@@ -154,10 +203,8 @@ body {
|
|||||||
color: var(--bs-body-color);
|
color: var(--bs-body-color);
|
||||||
border: 1px solid var(--bs-border-color);
|
border: 1px solid var(--bs-border-color);
|
||||||
border-radius: 0.375rem;
|
border-radius: 0.375rem;
|
||||||
padding: 1rem;
|
|
||||||
min-height: 300px;
|
min-height: 300px;
|
||||||
padding-left: 1.5rem;
|
padding: 1rem 1.5rem;
|
||||||
padding-right: 1.5rem;
|
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
font-family: inherit;
|
font-family: inherit;
|
||||||
}
|
}
|
||||||
@@ -250,3 +297,44 @@ body {
|
|||||||
#cookie-accept:hover {
|
#cookie-accept:hover {
|
||||||
background: rgba(var(--bs-primary-rgb), 0.1);
|
background: rgba(var(--bs-primary-rgb), 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --- Стили для контента блога (Typography) --- */
|
||||||
|
.post-page-content h1, .post-page-content h2, .post-page-content h3,
|
||||||
|
.post-page-content h4, .post-page-content h5, .post-page-content h6 {
|
||||||
|
color: var(--bs-body-color);
|
||||||
|
opacity: 90%;
|
||||||
|
font-weight: 300;
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.post-page-content p, .post-page-content li {
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
line-height: 1.6;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-page-content ul, .post-page-conten ol {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-page-content blockquote {
|
||||||
|
border-left: 4px solid var(--bs-primary);
|
||||||
|
padding-left: 1rem;
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
font-style: italic;
|
||||||
|
/*color: var(--bs-secondary-color);*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-page-content a {
|
||||||
|
color: var(--bs-linkcolor);
|
||||||
|
text-decoration: none;
|
||||||
|
border-bottom: 1px dotted var(--bs-linkcolor);
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-page-content a:hover {
|
||||||
|
color: var(--bs-linkclolor-hover);
|
||||||
|
border-bottom: 1px solid var(--bs-linkclolor-hover);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
function updateLogo() {
|
function updateLogo() {
|
||||||
const navbar = document.getElementById('logo');
|
const navbar = document.getElementById('logo');
|
||||||
if (!navbar) return;
|
if (!navbar) return;
|
||||||
|
|
||||||
const scrollY = window.scrollY;
|
const scrollY = window.scrollY;
|
||||||
|
|
||||||
// Гистерезис: включаем после 60px, выключаем до 10px
|
// Гистерезис: включаем после 60px, выключаем до 10px
|
||||||
@@ -32,6 +33,23 @@
|
|||||||
// Инициализация логотипа при загрузке и скролле
|
// Инициализация логотипа при загрузке и скролле
|
||||||
window.addEventListener('scroll', updateLogo, { passive: true });
|
window.addEventListener('scroll', updateLogo, { passive: true });
|
||||||
|
|
||||||
|
// --- МОБИЛЬНОЕ МЕНЮ (Скрытие логотипа при открытии) ---
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
const navbarNav = document.getElementById('navbarNav');
|
||||||
|
const navbarBrand = document.querySelector('.navbar-brand');
|
||||||
|
|
||||||
|
if (navbarNav && navbarBrand) {
|
||||||
|
navbarNav.addEventListener('show.bs.collapse', function () {
|
||||||
|
navbarBrand.style.opacity = '0';
|
||||||
|
navbarBrand.style.transition = 'opacity 0.3s ease';
|
||||||
|
});
|
||||||
|
|
||||||
|
navbarNav.addEventListener('hide.bs.collapse', function () {
|
||||||
|
navbarBrand.style.opacity = '1';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// --- КУКИ И СЧЕТЧИКИ ---
|
// --- КУКИ И СЧЕТЧИКИ ---
|
||||||
const COOKIE_KEY = 'cookie_consent';
|
const COOKIE_KEY = 'cookie_consent';
|
||||||
const TTL_MS = 90 * 24 * 60 * 60 * 1000; // 90 дней
|
const TTL_MS = 90 * 24 * 60 * 60 * 1000; // 90 дней
|
||||||
@@ -78,7 +96,7 @@
|
|||||||
// Делаем gtag глобальной, чтобы вызывать из sendGoal
|
// Делаем gtag глобальной, чтобы вызывать из sendGoal
|
||||||
window.gtag = gtag;
|
window.gtag = gtag;
|
||||||
gtag('js', new Date());
|
gtag('js', new Date());
|
||||||
gtag('config', GOOGLE_ID);
|
gtag('config', '\'' + GOOGLE_ID + '\'');
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("Ошибка загрузки счетчиков:", e);
|
console.error("Ошибка загрузки счетчиков:", e);
|
||||||
|
|||||||
Reference in New Issue
Block a user