diff --git a/etpgrf_site/blog/templates/blog/page_detail.html b/etpgrf_site/blog/templates/blog/page_detail.html index d4dbca0..94dc7ee 100644 --- a/etpgrf_site/blog/templates/blog/page_detail.html +++ b/etpgrf_site/blog/templates/blog/page_detail.html @@ -3,6 +3,7 @@ {% block title %}{{ page.seo_title|default:page.title }} — ETPGRF{% 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_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 %} @@ -22,15 +23,15 @@

{% if post.image %} - {{ post.title|safe }} + {{ post.title|safe }} {% else %} - {{ post.title|safe }} + {{ post.title|safe }} {% endif %}

{# Правая колонка: Контент #} -
+

{{ page.title|safe }}

diff --git a/etpgrf_site/blog/templates/blog/post_detail.html b/etpgrf_site/blog/templates/blog/post_detail.html index a8e6011..b0fa76a 100644 --- a/etpgrf_site/blog/templates/blog/post_detail.html +++ b/etpgrf_site/blog/templates/blog/post_detail.html @@ -23,9 +23,9 @@

{% if post.image %} - {{ post.title }} + {{ post.title }} {% else %} - {{ post.title }} + {{ post.title }} {% endif %}

@@ -35,7 +35,7 @@
{# Правая колонка: Контент #} -
+

{{ post.title }}

@@ -54,5 +54,5 @@
-
+ {% endblock %} diff --git a/etpgrf_site/etpgrf_site/settings.py b/etpgrf_site/etpgrf_site/settings.py index 98b4edb..f66afdb 100644 --- a/etpgrf_site/etpgrf_site/settings.py +++ b/etpgrf_site/etpgrf_site/settings.py @@ -34,8 +34,8 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', - 'typograph', - 'blog', # Наше новое приложение + 'typograph', # Основное приложение типографа + 'blog', # Приложение для блога и страниц ] MIDDLEWARE = [ diff --git a/etpgrf_site/typograph/templates/typograph/base.html b/etpgrf_site/typograph/templates/typograph/base.html index 76d7425..a275d3b 100644 --- a/etpgrf_site/typograph/templates/typograph/base.html +++ b/etpgrf_site/typograph/templates/typograph/base.html @@ -7,7 +7,7 @@ {# --- SEO & Meta Tags --- #} {% block title %}ETPGRF — единая типографика для веба{% endblock %} - + {# --- Open Graph (Facebook, VK, LinkedIn, Telegram) --- #} @@ -60,6 +60,23 @@ + + {# Кнопка-бургер для мобильных #} + + + {# Меню #} + diff --git a/etpgrf_site/typograph/templates/typograph/index.html b/etpgrf_site/typograph/templates/typograph/index.html index 9eeb1ea..bdfd197 100644 --- a/etpgrf_site/typograph/templates/typograph/index.html +++ b/etpgrf_site/typograph/templates/typograph/index.html @@ -1,6 +1,12 @@ {% extends 'typograph/base.html' %} {% load static %} +{% block title %}ETPGRF — единая типографика для веба{% endblock %} + +{% block description %}Бесплатный онлайн-типограф для подготовки текстов к публикации в вебе. Расставка неразрывных пробелов, правильных кавычек («ёлочки»), тире, спецсимволы, отбивка, компоновка, висячая пунктуация. Идеально для верстки сайтов, статей и постов.{% endblock %} + +{% block keywords %}типограф, типографика, онлайн типограф, подготовка текста для веба, html типограф, неразрывные пробелы, кавычки елочки, длинное тире, очистка текста от мусора, интернет верстка, муравьев{% endblock %} + {% block content %}
diff --git a/public/static/css/etpgrf.css b/public/static/css/etpgrf.css index e510503..2d95d02 100644 --- a/public/static/css/etpgrf.css +++ b/public/static/css/etpgrf.css @@ -26,6 +26,9 @@ --bs-link-color: #90caf9; --bs-link-hover-color: #bbdefb; + --bs-linkcolor: #14abda; + --bs-linkclolor-hover: #90caf9; + --bs-border-color: #37474f; --bs-border-color-translucent: rgba(255, 255, 255, 0.15); @@ -38,11 +41,12 @@ } /* Небольшие стили для красоты */ -html, body { +html { height: 100%; } body { + min-height: 100%; /* Используем min-height вместо height */ background-color: var(--bs-body-bg); display: flex; flex-direction: column; @@ -76,6 +80,7 @@ body { } #main-navbar > #logo > .navbar-brand { + padding: 0; /* Убираем отступы у бренда */ display: block; /* Блок, чтобы работали размеры */ background: no-repeat left; background-size: contain; @@ -96,6 +101,50 @@ body { 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 { flex: 1 0 auto; @@ -154,10 +203,8 @@ body { color: var(--bs-body-color); border: 1px solid var(--bs-border-color); border-radius: 0.375rem; - padding: 1rem; min-height: 300px; - padding-left: 1.5rem; - padding-right: 1.5rem; + padding: 1rem 1.5rem; white-space: pre-wrap; font-family: inherit; } @@ -249,4 +296,45 @@ body { #cookie-accept:hover { 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); + } \ No newline at end of file diff --git a/public/static/js/base.js b/public/static/js/base.js index fbbc99e..a8b9cb7 100644 --- a/public/static/js/base.js +++ b/public/static/js/base.js @@ -18,6 +18,7 @@ function updateLogo() { const navbar = document.getElementById('logo'); if (!navbar) return; + const scrollY = window.scrollY; // Гистерезис: включаем после 60px, выключаем до 10px @@ -31,6 +32,23 @@ // Инициализация логотипа при загрузке и скролле 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'; @@ -78,7 +96,7 @@ // Делаем gtag глобальной, чтобы вызывать из sendGoal window.gtag = gtag; gtag('js', new Date()); - gtag('config', GOOGLE_ID); + gtag('config', '\'' + GOOGLE_ID + '\''); } catch (e) { console.error("Ошибка загрузки счетчиков:", e);