готов список новостей на главной странице

This commit is contained in:
erjemin
2021-08-14 20:34:28 +03:00
parent ce10b8528f
commit b91c535b36
11 changed files with 403 additions and 15 deletions

View File

@@ -64,6 +64,7 @@ INSTALLED_APPS = [
# # 'ckeditor_uploader',
'ckeditor',
'taggit.apps.TaggitAppConfig',
# 'fontawesome-free'
'web.apps.WebConfig',
]
@@ -215,7 +216,13 @@ if DEBUG: # DEBUG: заменяем настройки прода, на на
# 'OPTIONS': { 'autocommit': True, }
}
}
MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware', ]
INSTALLED_APPS += ['debug_toolbar', ]
INTERNAL_IPS = ['127.0.0.1', '192.168.1.30']
# this is the main reason for not showing up the toolbar
import mimetypes
mimetypes.add_type("application/javascript", ".js", True)
DEBUG_TOOLBAR_CONFIG = {'INTERCEPT_REDIRECTS': False, }
else:
MEDIA_ROOT = MY_MEDIA_ROOT_PROD
STATIC_ROOT = MY_STATIC_ROOT_PROD

View File

@@ -14,16 +14,20 @@ Including another URLconf
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from django.conf.urls.static import static
from django.conf.urls import url
from django.urls import path, include
from cadpoint import settings
from django.conf.urls import url, include
from web import views
urlpatterns = [
path('admin/', admin.site.urls),
# /publication/32-hardware/
# /news/3-newsflash/
# /news/1-latest-news/
# /runet-cad/37-runet-cad/
# /video/
# /aboutcadpoint.html
url(r'^$', views.index),
]
@@ -31,5 +35,7 @@ handler404 = 'web.views.handler404'
handler500 = 'web.views.handler500'
if settings.DEBUG:
import debug_toolbar
urlpatterns = [path('__debug__/', include(debug_toolbar.urls)), ] + urlpatterns
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

View File

@@ -0,0 +1,38 @@
{% comment %}Django шаблон
Облако тегов (меток) -- выводит ярлыки-теги для страницы с листингом инфоюнитов. На ярлыках с метками
помечается число их вхождений на текущей странице и общее число вхождений в базу.
-------------
Требует обязательного наличия параметров во сходящем словаре:
TAGS_IN_PAGE -- QuerySet из записей таблицы taggit_taggeditem батарейки Django-Taggit или список словарей
с тегами-метками. Ключи словаря:
id -- taggit_taggeditem.id
slug -- taggit_taggeditem.slug
name -- taggit_taggeditem.name
NumInPage -- число вхождений тега-метки на текущей странице
NumTotal -- общее число вхождений тега-метки
------------
Необязательные параметры:
ACTIVE_TAG_ID -- id тега, который должен быть помечен как активный.
HIDEN_TAG_ID -- id тега, который надо "погасить" и не отображать в облаке.
SEC -- ID таблицы tbSection для работы облака тегов при включеном фильтре по Разделам
CAT -- ID таблицы tbCategories для работы облака тегов при включеном фильтре Категорий
{% endcomment %}<!-- ОБЛАКО ТЕГОВ: НАЧАЛО -->
<p class="tags">{% for I in TAGS_IN_PAGE %}{% if I.id != HIDEN_TAG_ID %}{% if I.NumInPage > 0%}
<a href="/tag_{{ I.slug|lower }}" class="tag-active{% if I.slug == ACTIVE_TAG_SLUG %}-current{% endif %}">
{{ I.name }} &nbsp; <span class="tag-note"><sup><b>{{ I.NumInPage }}</b></sup>/<sub>{{ I.NumTotal }}</sub></span>
</a>{% else %}
<a href="/tag_{{ I.slug|lower }}" class="tag-not-active">
{{ I.name }} &nbsp; <span class="tag-note"><sup><b>{{ I.NumInPage }}</b></sup>/<sub>{{ I.NumTotal }}</sub></span>
</a>{% endif %}{% endif %}{% endfor %}{% if ACTIVE_TAG_SLUG %}
<span class="label label-primary"><a href="?"><b class="glyphicon glyphicon-remove"></b></a></span>
{% endif %}
</p><!-- ОБЛАКО ТЕГОВ: НАЧАЛО -->

View File

@@ -1,4 +1,4 @@
{% extends "base.jinja2" %}{% load static %}
{% extends "base.jinja2" %}{% load static %}{% load thumbnail %}{% load slug_ru %}
{% block META_OG %}{% comment %} РАЗМЕТКА Open Graph ДЛЯ СОЦ-СЕТЕЙ
подробности: https://habr.com/ru/company/macloud/blog/555082/{% endcomment %}
@@ -29,11 +29,62 @@
<!--- ТИТУЛ --->
{% block Title %}Главная страница{% endblock %}
{% block canonical %}https://rsvo.ru/{{ ITEM.iPointType }}/{{ ITEM.szPointSlug }}{% if LIST and PAGE_OF_LIST != 0 %}/p{{ PAGE_OF_LIST }}{% endif %}{% endblock %}
{% block Description %}ФГУП Российские сети вещания и оповещения: Строительство и эксплуатация разноуровневых систем оповещения{% endblock %}
{% block Keywords %}ФГУП РСВО, российские сети вещания и оповещения, системы оповещения{% endblock %}
{% block Date4Meta %}{{ NEWS.0.tdContentPublishStart|date:'Y-m-d 08:30:00' }}{% endblock %}"
{% block Last4Meta %}{{ NEWS.0.dtContentTimeStamp|date:'Y-m-d H:i:s' }}{% endblock %}"
{% block Expires4Meta %}{% now 'Y-m-d H:i:s' %}{% endblock %}"
{% block CONTENT %}{# <!-- ХЛЕБНЫЕ КРОШКИ: НАЧАЛО -->#}
<div class="container bread-crumb">
<div class="row">
<nav class="col-12 х" aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item nw s"><a href="/"><i class="bi bi-house-door" title="Главная"></i>&#8199;Главная</a></li>{% if FIRST %}
<li class="breadcrumb-item nw s"><a href="/{{ ITEM.iPointType }}/">{{ ITEM.get_iPointType_display }}</a></li>{% if TEMPLATE_CONTENT and not HIDE_PAGE %}
<li class="breadcrumb-item nw s"><a href="/{{ ITEM.iPointType }}/{{ ITEMnakamichi.szPointSlug }}">{{ ITEM.szPointHead|safe }}</a></li>
<li class="breadcrumb-item active nw s" aria-current="page">Стр. {{ PAGE_OF_LIST|add:"1" }} ({% for i in LIST reversed %}{% if forloop.first %}{{ i.tdContentPublishStart|date:'d F Y' }}{% endif %}{% if forloop.last %} &mdash; {{ i.tdContentPublishStart|date:'d F Y' }}{% endif %}{% endfor %})</li>{% else %}
<li class="breadcrumb-item active nw s" aria-current="page">{{ ITEM.szPointHead|safe }}</li>{% endif %}{% endif %}
</ol>
</nav>
</div>
</div>{#<!-- ХЛЕБНЫЕ КРОШКИ: КОНЕЦ -->#}
{#<!-- POINT-СРАНИЦА: НАЧАЛО -->#}<div class="container lenta">
<div class="row">
<div class="col-12 col-md-9">
{% for i in LENTA %}<div class="row default-list">
<div class="col-md-4 d-none d-md-block{% if forloop.counter|divisibleby:2 %} order-last{% endif %}">
<a href="/news/1-latest-news/{{ i.id }}-{{ i.szContentHead|safe_html_ss|slug_ru:'50' }}?p={{ PAGE_OF_LIST }}&n={{ forloop.counter }}">{% if i.imgContentPreview is None %}
<img src="{% static 'img/og-cadpoint-default.png' %}"
alt="{{ i.szContentHead|safe_html_ss }}"
title="{{ i.szContentHead|safe_html_ss }}" />{% else %}
<img srcset="{% thumbnail i.imgContentPreview 340x340 upscale %} 640w, {% thumbnail i.imgContentPreview 680x680 upscale %} 1200w"
sizes="(min-width: 1024px) 1200px, (min-width: 320px) 640px, 100vw"
src="{% thumbnail i.imgContentPreview 680x680 upscale %}"
alt="{{ i.szContentHead|safe_html_ss }}"
title="{{ i.szContentHead|safe_html_ss }}" />{% endif %}</a>
</div>
<div class="col-12 col-md-8">
<time datetime="{{ i.tdContentPublishUp|date:'Y-m-d' }}">{{ i.tdContentPublishUp|date:'d E Y' }} <small>({{ i.tdContentPublishUp|date:'l'|lower }})</small></time>
<h3><a href="/news/1-latest-news/{{ i.id }}-{{ i.szContentHead|safe_html_ss|slug_ru:"50" }}?p={{ PAGE_OF_LIST }}&n={{ forloop.counter }}">{{ i.szContentHead|safe }}</a></h3>
<nav class="sm-tags">{% for t in i.tags.all%}<a href="/tag_{{ t.slug|lower }}"><i class="bi bi-tag"></i> {{ t.name }}</a> &nbsp; &#8198; {% endfor %}</nav>
{{ i.szContentIntro|safe }}
<p class="next"><a href="item/{{ i.id }}-{{ i.szContentHead|safe_html_ss|slug_ru:'50' }}?p={{ PAGE_OF_LIST }}&n={{ forloop.counter }}">Читать дальше &rarr;</a></p>
</div>
</div>{% endfor %}
</div>
{#<!-- БОКОВАЯ НАВИГАЦИЯ: НАЧАЛО-->#}<nav class="col order-last order-md-first l-menu">
<h6>Теги текущей страницы:</h6>
{% include "blocks/tags-cloud.jinja2" %}
</nav>{#<!-- боковая навигация: конец-->#}
</div>
</div>{#<!-- POINT-СРАНИЦА: КОНЕЦ -->#}
{% block CONTENT %}
<h1><br /><br /><br /><br /><br /><br /><br /><br />ЛЯ-ЛЯ</h1>
{% endblock %}
{% block Top_JS1 %}<script type="text/javascript">

View File

@@ -36,4 +36,4 @@ def safe_html_special_symbols(s: str) -> str:
result = result.replace('&#8470;', '')
result = result.replace('<br />', ' ')
result = result.replace('<br>', ' ')
return result
return result

View File

@@ -68,7 +68,7 @@ class TbContent(models.Model):
help_text=u"Дата публикации, с её момента новость появится на сайте."
)
tdContentPublishDown = models.DateTimeField(
db_index=True, null=True, blank=True, # default=datetime.datetime(2035, 12, 31, 23, 59, 59, 0), # default=0,
db_index=True, null=True, blank=True, # default=datetime.datetime(2035, 12, 31, 23, 59, 59, 0), # default=0,
verbose_name="Окончания публикации",
help_text=u"Дата окончания публикации, с её момента новость исчезнет с сайта."
)
@@ -165,7 +165,7 @@ class TbContent(models.Model):
def save(self, *args, **kwargs):
# переопределяем метод save() чтобы "проверуть" тексты через типографы...
if self.szContentSlug is None or self.szContentSlug == "" or " " in self.szContentSlug:
print("ку-ку", self.szContentHead)
# print("ку-ку", self.szContentHead)
result_slug = pytils.translit.slugify(
safe_html_special_symbols(self.szContentHead)).lower()
while TbContent.objects.filter(szContentSlug=result_slug).count() != 0:

View File

@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from django import template
from web.add_function import safe_html_special_symbols
import pytils
register = template.Library()
@register.filter
def slug_ru(value: str, arg: int) -> str:
try:
arg = int(arg)
return pytils.translit.slugify(str(value).lower())[:int(arg)]
except ValueError:
return pytils.translit.slugify(str(value).lower())
@register.filter
def safe_html_ss(value: str) -> str:
return safe_html_special_symbols(value)

View File

@@ -1,6 +1,11 @@
# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.db.models import Q
from datetime import datetime
from django.utils import timezone
from web.models import TbContent
from web.add_function import *
import pytz
# Create your views here.
def handler404(request, exception: str) -> render:
@@ -34,4 +39,40 @@ def index(request) -> render:
"""
template = "index.jinja2" # шаблон
to_template = {"COOKIES": check_cookies(request)}
# query = Q(tdContentPublishDown__isnull=True)
# query.add(Q(tdContentPublishDown__gt=timezone.now()), Q.OR)
# query.add(Q(bContentPublish=True), Q.AND)
# q_content = TbContent.objects.filter(query)[:5]
query = "SELECT web_tbcontent.* FROM web_tbcontent " \
"WHERE (web_tbcontent.tdContentPublishDown IS NULL" \
" OR web_tbcontent.tdContentPublishDown > NOW())" \
" AND web_tbcontent.bContentPublish " \
"ORDER BY web_tbcontent.tdContentPublishUp DESC " \
"LIMIT 5 OFFSET 0"
q_content = TbContent.objects.raw(query)
q_tags = TbContent.objects.raw("SELECT DISTINCT tTotalInfo.*,"
" IF (tPageInfo.NumInPage IS UNKNOWN, 0, tPageInfo.NumInPage) AS NumInPage "
"FROM (SELECT DISTINCT taggit_tag.id, COUNT(tPage.id) AS NumInPage "
" FROM taggit_taggeditem"
" INNER JOIN taggit_tag"
" ON taggit_taggeditem.tag_id = taggit_tag.id"
" INNER JOIN (%s) tPage"
" ON taggit_taggeditem.object_id = tPage.id"
" GROUP BY taggit_tag.id) tPageInfo"
" RIGHT OUTER JOIN (SELECT DISTINCT"
" taggit_tag.*,"
" COUNT(web_tbcontent.id) AS NumTotal"
" FROM taggit_taggeditem"
" INNER JOIN taggit_tag"
" ON taggit_taggeditem.tag_id = taggit_tag.id"
" INNER JOIN web_tbcontent"
" ON taggit_taggeditem.object_id = web_tbcontent.id"
" GROUP BY taggit_tag.id, taggit_tag.name, taggit_tag.slug) tTotalInfo"
" ON tPageInfo.id = tTotalInfo.id"
" GROUP BY tPageInfo.id, tPageInfo.NumInPage,"
" tTotalInfo.id, tTotalInfo.NumTotal,"
" tTotalInfo.name, tTotalInfo.slug "
"ORDER BY tPageInfo.NumInPage DESC, tTotalInfo.name,"
" tTotalInfo.NumTotal DESC" % (query,))
to_template.update({"LENTA": q_content, "TAGS_IN_PAGE": q_tags})
return render(request, template, to_template)

View File

@@ -1,12 +1,16 @@
@charset "utf-8";
@import url('https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css');
@import url('https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&family=Ubuntu+Condensed&display=swap');
body { font-family: 'Ubuntu', sans-serif; }
h1, h2, h3, h4, h5, h6 {color: indigo}
h1, h2, h3, h4, h5, h6 {color: #006799; font-family: 'Ubuntu Condensed', sans-serif;}
a { color: #006799; text-decoration: none; border-bottom: 1px dotted #006799; }
a:hover { color: #008DD2; border-bottom: 1px solid #008DD2; transition:0.6s; }
a:not(hover) { transition:1.2s; }
header > .navbar {background-color: white}
header > .navbar > .container > a.navbar-brand > img,
header.rastopiir > .container > a.navbar-brand > img { height: 42px; margin: 1ex 0; }
header > .navbar > .container > .navbar-nav > .nav-item > a {
@@ -33,4 +37,220 @@ header > .navbar > .container > .navbar-nav > .nav-item > form > .input-group >
border: solid 1px #008DD2; border-left: none; background: none;
height: 31px; border-radius: 0 6px 6px 0;
}
header.rastopiir { height: 112px; z-index: 1;}
header.rastopiir { height: 82px; z-index: 1;}
/****************************
** ОФОРМЛЕНИЕ ЛЕНТЫ *********
****************************/
div.lenta > div.row > div[class^="col"] div.row > div[class^="col"] > a > img,
div.lenta > div.row > div[class^="col"] > div.row > div[class^="col"] > p > img,
div.lenta > div.row > div[class^="col"] > div.row > div[class^="col"] > p > iframe {
width: 100%;
border: solid #006799 1px;
border-radius: 4px;
}
div.lenta > div.row > div[class^="col"] div.row > div[class^="col"] > a:hover > img {
border: solid #008DD2 1px;
transition:0.6s;
animation-name: scaleUpDown;
animation-duration: 0.6s;
animation-timing-function: ease-in-out; -webkit-animation-timing-function: ease-in-out;
visibility: visible !important;
}
div.lenta > div.row > div[class^="col"] div.row > div[class^="col"] > time {
font-family: 'Ubuntu Condensed', sans-serif;
color: #888888;
}
div.lenta > div.row > div[class^="col"] div.row > div[class^="col"] > h3 > a {
color: #006799;
text-decoration: none;
border-bottom: 1px dotted #006799;
font-weight: 500;
font-size: 130%;
}
div.lenta > div.row > div[class^="col"] div.row > div[class^="col"] > nav.sm-tags { margin-bottom: 2ex; }
div.lenta > div.row > div[class^="col"] div.row > div[class^="col"] > nav.sm-tags > a {
font-family: 'Ubuntu Condensed', sans-serif;
font-size: smaller;
display: inline-block;
color: #006799;
text-decoration: none;
border-bottom: 1px dotted #006799;
}
div.lenta > div.row > div[class^="col"] div.row > div[class^="col"] > h3 > a:hover,
div.lenta > div.row > div[class^="col"] div.row > div[class^="col"] > nav.sm-tags > a:hover {
color: #008DD2;
border-bottom: 1px solid #008DD2;
transition:0.6s;
}
div.lenta > div.row > div[class^="col"] div.row > div[class^="col"] > nav.sm-tags > a:hover {
animation-name: scaleUpDown2;
animation-duration: 0.6s;
animation-timing-function: ease-in-out; -webkit-animation-timing-function: ease-in-out;
visibility: visible !important;
}
div.lenta > div.row > div[class^="col"] > div.row > div[class^="col"] > p {
font-family: 'Ubuntu', sans-serif;
color: black;
}
div.lenta > div.row > div[class^="col"] > div.row > div[class^="col"] > p > img,
div.lenta > div.row > div[class^="col"] > div.row > div[class^="col"] > p > iframe {
border-bottom: solid white 12px;
border-image: url('/static/svgs/logo_cadpoint-2021-border.svg') 0 0 600 0 round;
}
div.lenta > div.row > div[class^="col"] > div.row > div[class^="col"] > p.next > a {
letter-spacing: 0.2ex;
}
div.lenta > div.row > div[class^="col"] > div.row {
border-bottom: 1px gray dashed;
margin-bottom: 1em;
padding-bottom: 1em;
}
@keyframes scaleUpDown {
0% { transform: scale(1); }
25% { transform: scale(0.98); }
75% { transform:scale(1.02); }
80% { transform: rotate(1deg); }
85% { transform: rotate(-1deg); }
90% { transform: rotate(1deg); }
95% { transform: rotate(-2deg); }
100%{ transform: translateX(1); }
}
@keyframes scaleUpDown2 {
0% { transform: scale(1); }
25% { transform: scale(0.96); }
75% { transform:scale(1.04); }
80% { transform: rotate(2deg); }
85% { transform: rotate(-2deg); }
90% { transform: rotate(2deg); }
95% { transform: rotate(-4deg); }
100%{ transform: translateX(1); }
}
/****************************
** ОФОРМЛЕНИЕ ТЕГОВ *********
****************************/
.tags {font-family: 'Ubuntu Condensed', sans-serif; }
.tags > a {
display: inline-block;
margin: 0.5ex 1ex 0.5ex 0.9ex;
padding: 0.5ex 0 0.5ex 1.5ex;
white-space: nowrap;
position: relative;
font-family: 'Ubuntu Condensed', sans-serif;
text-decoration: none;
text-transform: uppercase;
border-radius: 0 0.8ex 0.8ex 0;
}
/* активные теги (с ненулевой представленностью на странице) цветные */
.tags > a.tag-active {
color: #eee;
background: -moz-linear-gradient(top, #85CCF1 0%, #008DD2 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#85CCF1), color-stop(100%,#008DD2));
background: -webkit-linear-gradient(top, #85CCF1 0%,#008DD2 100%);
background: -o-linear-gradient(top, #85CCF1 0%,#008DD2 100%);
background: linear-gradient(to bottom, #85CCF1 0%,#008DD2 100%);
background-color: #008DD2;
}
/* активные теги (с ненулевой представленностью на странице) цветные */
.tags > a.tag-active-current {
color: #fff;
background: -moz-linear-gradient(top, #e86ad9 0%, #e86a79 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e86ad9), color-stop(100%,#e86a79));
background: -webkit-linear-gradient(top, #e86ad9 0%,#e86a79 100%);
background: -o-linear-gradient(top, #e86ad9 0%,#e86a79 100%);
background: linear-gradient(to bottom, #e86ad9 0%,#e86a79 100%);
background-color: #e86aa9;
}
/* неактивные теги (с нулевой представленностью на странице) серые */
.tags > a.tag-not-active {
color: #000;
font-size: small;
background: -moz-linear-gradient(top, #ccc 0%, #888 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#888));
background: -webkit-linear-gradient(top, #ccc 0%,#888 100%);
background: -o-linear-gradient(top, #ccc 0%,#888 100%);
background: linear-gradient(to bottom, #ccc 0%,#888 100%);
background-color: #aaa;
}
/* левые треугольный хвостик тега */
.tags > a:before {
content: '';
position: absolute;
top: 1ex;
left: -0.9ex;
width: 1.8ex;
height: 1.8ex;
border-radius: 0 1ex 0 1ex;
-webkit-transform: scale(1, 1.5) rotate(45deg);
-moz-transform: scale(1, 1.5) rotate(45deg);
-ms-transform: scale(1, 1.5) rotate(45deg);
transform: scale(1, 1.5) rotate(45deg);
}
/* левые треугольные хвостики активного тега (с ненулевой представленностью на странице) цветные */
.tags > a.tag-active:before {
background: -moz-linear-gradient(45deg, #85CCF1 0%, #008DD2 100%);
background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,#85CCF1), color-stop(100%,#008DD2));
background: -webkit-linear-gradient(-45deg, #85CCF1 0%,#008DD2 100%);
background: -o-linear-gradient(45deg, #85CCF1 0%,#008DD2 100%);
background: linear-gradient(135deg, #85CCF1 0%,#008DD2 100%);
background-color: #008DD2;
}
/* левые треугольные хвостики активного тега (с ненулевой представленностью на странице) цветные */
.tags > a.tag-active-current:before {
background: -moz-linear-gradient(45deg, #e86ad9 0%, #e86a79 100%);
background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,#e86ad9), color-stop(100%,#e86a79));
background: -webkit-linear-gradient(-45deg, #e86ad9 0%,#e86a79 100%);
background: -o-linear-gradient(45deg, #e86ad9 0%,#e86a79 100%);
background: linear-gradient(135deg, #e86ad9 0%,#e86a79 100%);
background-color: #e86aa9;
}
/* левые треугольные хвостики не активного тега (с ненулевой представленностью на странице) серые */
.tags > a.tag-not-active:before {
background: -moz-linear-gradient(45deg, #ccc 0%, #888 100%);7
background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,#ccc), color-stop(100%,#888));
background: -webkit-linear-gradient(-45deg, #ccc 0%,#888 100%);
background: -o-linear-gradient(45deg, #ccc 0%,#888 100%);
background: linear-gradient(135deg, #ccc 0%,#888 100%);
background-color: #aaa;
}
/* правые цыфровые поля тега */
.tags > a .tag-note {
padding: 1ex;
background-color: rgba(255,255,255,0.3);
border-radius: 0 0.8ex 0.8ex 0;
border-left: 1px dotted white;
}
.tags > a.tag-active .tag-note { color: #ccc; }
.tags > a.tag-active-current .tag-note { color: #fee; }
.tags > a.tag-not-active .tag-note { color: #333; }
/* дырочка в левом хвостике */
.tags > a:after {
content: '';
position: absolute;
top: 1.6ex;
left: 0;
width: 0.6ex;
height: 0.6ex;
background: #FFF;
border-radius: 0.4ex;
}
/* поведение при наведении на ссылку */
.tags > a:hover { transition:0.5s; }
.tags > a.tag-active:hover { color: #fff; }
.tags > a.tag-not-active:hover { color: #000; }
.tags > a:hover .tag-note { background-color: rgba(255,255,255,0.7); transition:0.5s;
}
.tags > a.tag-active:hover .tag-note { color: #008DD2; }
.tags > a.tag-not-active:hover .tag-note { color: #008DD2; }
.tags > a:not(:hover), .tags > a:not(:hover) .tag-note { transition:1s; }
/****************************
** ОФОРМЛЕНИЕ ТЕГОВ *********
****************************/
.label > a {color: white}
.on-light {background-color:#bc9ec5;transition:all 0.5s ease-out 0.5s; }
.test {
position: absolute;top:200px;
}

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1117" height="250" viewBox="0 0 286779 64226" shape-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" xmlns:v="https://vecta.io/nano"><defs><linearGradient id="A" gradientUnits="userSpaceOnUse" x1="181696" y1="50202" x2="181696" y2="14029"><stop offset=".3" stop-color="#000"/><stop offset=".9" stop-color="#555"/></linearGradient></defs><g fill-rule="nonzero"><path d="M101107 38004c-173 4016-1303 7051-3382 9105-2078 2062-5006 3093-8791 3093-3984 0-7027-1312-9146-3926-2120-2623-3176-6359-3176-11208v-5930c0-4833 1097-8561 3283-11183 2194-2615 5237-3926 9138-3926 3827 0 6746 1072 8734 3208 1987 2144 3117 5221 3389 9229h-7125c-66-2483-446-4190-1147-5138-701-940-1987-1410-3851-1410-1905 0-3250 668-4041 1995-784 1336-1204 3522-1254 6573v6656c0 3497 388 5905 1171 7208 784 1311 2120 1963 4025 1963 1864 0 3159-454 3868-1369 709-907 1105-2556 1204-4940h7101zm21171 4528h-9683l-1888 7175h-7513l10993-35183h6499l11068 35183h-7588l-1888-7175zm-8140-5938h6573l-3283-12553-3290 12553zm20907 13113V14524h9303c4107 0 7381 1303 9822 3917 2441 2606 3687 6186 3728 10730v5699c0 4627-1221 8256-3654 10886-2441 2631-5806 3951-10094 3951h-9105zm7101-29245v23356h2127c2367 0 4033-627 5007-1872 964-1245 1468-3398 1517-6457v-6112c0-3291-462-5575-1377-6878-916-1295-2483-1971-4685-2037h-2589zm27966 16874v12371h-7109V14524h11984c3480 0 6259 1080 8329 3241 2070 2153 3101 4957 3101 8404s-1022 6169-3068 8173c-2045 1996-4882 2994-8503 2994h-4734zm0-5938h4875c1360 0 2399-445 3142-1328 742-883 1113-2169 1113-3851 0-1749-379-3143-1138-4182-751-1031-1765-1559-3043-1575h-4949v10936zm45814 3884c0 4726-1113 8388-3348 11002-2227 2615-5328 3918-9287 3918-3950 0-7051-1295-9303-3885-2251-2581-3398-6210-3431-10861v-6021c0-4841 1122-8618 3357-11332 2243-2713 5352-4074 9328-4074 3917 0 7002 1336 9253 4000 2260 2672 3398 6416 3431 11233v6020zm-7126-5913c0-3175-453-5534-1352-7084-899-1543-2301-2318-4206-2318-1881 0-3275 742-4182 2235-899 1493-1369 3761-1402 6804v6260c0 3084 462 5352 1378 6812 923 1460 2342 2186 4255 2186 1856 0 3233-710 4132-2136 899-1427 1361-3646 1377-6639v-6120zm19629 20338h-7101V14524h7101v35183zm30557 0h-7101l-10392-23076v23076h-7101V14524h7101l10416 23100V14524h7077v35183zm27793-29245h-8693v29245h-7125V20462h-8561v-5938h24379v5938z" fill="url(#A)"/></g></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" color="#006799" viewBox="0 0 16 16">
<path d="M6 4.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm-1 0a.5.5 0 1 0-1 0 .5.5 0 0 0 1 0z"/>
<path d="M2 1h4.586a1 1 0 0 1 .707.293l7 7a1 1 0 0 1 0 1.414l-4.586 4.586a1 1 0 0 1-1.414 0l-7-7A1 1 0 0 1 1 6.586V2a1 1 0 0 1 1-1zm0 5.586 7 7L13.586 9l-7-7H2v4.586z"/>
</svg>

After

Width:  |  Height:  |  Size: 392 B