ForumD.ru - Дизайн, графика, скрипты, техническая поддержка для форумов и сайтов

Объявление

GEMcross

Кроссовер, ориентированный на активную игру и уютный флуд.
Собираем у себя драгоценных игроков уже почти три года.

Посетить

💰 Теперь у нас можно приобрести "Мгновенные уведомления от Алекса"

Скрипт оповещает пользователей о событиях на форуме в реальном времени, придавая динамики общению.
Автор: Alex_63 | Платформа: MyBB.ru.

У нас: структурированная документация, возможность платить иностранными картами, перевыпустить подписку или купить бессрочно.

Купить скрипт

🔥 Новинка в портфолио: ДИЗАЙН ФОРУМА В СТИЛЕ ФЭНТЭЗИ С ПРОЗРАЧНОСТЬЮ

Платформа: MyBB.ru (RusFF)
Стоимость: 8000 рублей;
Авторы: Moju & Gerda

Посмотреть

🌟 ОПЛАТА ЗАКАЗА НАГРАДНЫМИ БАЛЛАМИ И СКИДКИ

Заказы можно оплачивать наградными баллами (НБ). Полностью или частично.
Бартер за НБ осуществляется на условиях платного заказа, в качестве оплаты - НБ.
А если у вас есть любой платный заказ, вы можете обменять НБ на скидочные купоны.

узнать подробности

📣 Наш проект: Ролевой поисковик

Поиск роли на текстовых ролевых
Проект от специалистов FD

Спойлеры и обсуждение

❤️ Поддержать проект

Если у вас есть желание помочь нам сделать наш проект лучше:
Реклама на сайтеПредложения
Стать модераторомОтзывы

Подробнее

SPECIAL OFFER: We distribute designs for free

Finalizing the layout for your project;
Developing a style code;
Mobile version included if you wish.

Details

Support the project

If you want to help us:
Become a moderator
SuggestionsReviews

Details
❗ ❗ ❗ Technical work is underway. We'll fix it soon. :) If you're english-speaker and want to use our forum, switch to the russian language. This is temporary, until the works with multi-language option will be done. Sorry for the inconvenience.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Эксперименты Will O The Wisp

Сообщений 161 страница 170 из 187

161

#p180686,Gerda написал(а):

Will O The Wisp
а у тебя все эти макеты были на кодах? использовались на форуме?

были и использовались, насколько я помню. тестовики под них не найду, сами коды остались на родных форумах
в итоговых версиях что-то менялось, что-то сохранялось
в новогодней по-моему была еще страница "елка пожеланий" но сделана под поздравления к дню рождения
каждая кнопка и скрипт дополнительно кастомизировались, в том числе магазин с подарками
потому я не могу толком собрать как это выглядело
сейчас пытаюсь доделать более простой шаблон с root'ами чтобы менять шаблоны хтмл оформления и скрипты
не нужны и не использованы эти: http://swa11ow.artbb.me/  https://sh3ol.mybb.ru/  хотя уже перепилены

+1

162

таблица через гриды

Код:
[html]
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400&display=swap');
:root {
--bg1: url('https://i.pinimg.com/originals/bf/78/35/bf78358ddb423e409345ef9006c3415f.gif');
--bg2: url('https://i.pinimg.com/originals/18/b7/e5/18b7e55e0116dda0770a062cb8bacfdd.gif');
}

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}


.container {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-gap: 10px;
}

.container > div {
  cursor: pointer;
  height: 210px;
  background-size: cover;
  background-attachment: fixed;

  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
color: #ccc;
  transition: all 0.5s ease-in;
}

.container > div:hover {
  opacity: 0.7;
  transform: scale(0.98);
}

.container > div:nth-of-type(1) {
  grid-column: 1 / 3;
}

.container > div:nth-of-type(6) {
  grid-column: 3 / 5;
}

.container > div:nth-of-type(9) {
  grid-column: 3 / 5;
}

.container > div:nth-of-type(10) {
  grid-column: 1 / 3;
}

.bg1 {
  background: var(--bg1);
}

.bg2 {
  background: var(--bg2);
  color: #333;
}

</style>
<script>

</script>
<div class="container">
      <div class="bg1">
        <h2>16 <span>| 24</span></h2>
        <p>Goals Completed</p>
      </div>
      <div class="bg1">
        <h2><i class="fas fa-battery-three-quarters"></i></h2>
        <p>Respiration</p>
      </div>
      <div class="bg2">
        <h2><i class="fas fa-running"></i></h2>
        <p>Miles</p>
      </div>
      <div class="bg1">
        <h2>36 &deg;</h2>
        <p>Temperature</p>
      </div>
      <div class="bg1">
        <h2><i class="fas fa-bed"></i></h2>
        <p>Sleep Keep</p>
      </div>
      <div class="bg2">
        <h2>98 <span>bpm</span></h2>
        <p>Heart Rate</p>
      </div>
      <div class="bg1">
        <h2>170 <span>lbs</span></h2>
        <p>Weight</p>
      </div>
      <div class="bg1">
        <h2>28 <span>%</span></h2>
        <p>Fat Percentage</p>
      </div>
      <div class="bg2">
        <h2>118 <span>mgdl</span></h2>
        <p>Blood Glucose</p>
      </div>
      <div class="bg2">
        <h2>680 <span>kcal</span></h2>
        <p>AVG Consumption</p>
      </div>
      <div class="bg2">
        <h2><i class="fas fa-dumbbell"></i></h2>
        <p>Workouts</p>
      </div>
      <div class="bg2">
        <h2>85 <span>%</span></h2>
        <p>Body Hydration</p>
      </div>
    </div>
[/html]

+2

163

снова летающие точки которые будут убегать от курсора
меняется цвет размер кол-во

Код:
[html]
<style>
#demo {
    padding-left: 0;
    padding-right: 0;
    margin-left: auto;
    margin-right: auto;
    display: block;
    width: 100%;
}
</style>
<script>

var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
var width = canvas.width;
var height = canvas.height;

// Design тут можно заменить цвет точек в двух местах
var circleFill = "rgba(255,160,30,1)";

var Particle = function (sx, sy) {
    this.sx = sx;
    this.sy = sy;
    this.vx = 0.0;
    this.vy = 0.0;
};

// create particles здесь же в n меняется кол во точек если лагает меньше 
var n = 255;
var particles = [];
for (var i = 0; i < n; ++i) {
    var sx = Math.random() * canvas.width;
    var sy = Math.random() * canvas.height;
    particles[i] = new Particle(sx, sy);
}

var drawLine = function (x0, y0, x1, y1, alpha) {
    context.lineWidth = "hairline";
    context.strokeStyle = "rgba(255,160,30," + alpha + ")";
    context.beginPath();
    context.moveTo(x0, y0);
    context.lineTo(x1, y1);
    context.closePath();
    context.stroke();
};

var drawCircle = function (x, y, r) {
    context.fillStyle = circleFill;
    context.beginPath();
    context.arc(x, y, r, 0.0, Math.PI * 2.0);
    context.closePath();
    context.fill();
};

var mouseX = 0.0;
var mouseY = 0.0;

// Physics Properties
var particleInfluenceRadius = 26.0;
var particleAttractionRadius = 18.0;
var partcileAttrationForce = 1.0 / 200.0;
var partcileVelocityDecay = 0.99;
var particleMouseInfluenceRadius = 48.0;
var particleMouseRejectionForce = 1.0 / 96.0;

var solveAndDraw = function () {
    var strength;
    var i = particles.length;
    while (--i > -1) {
        var particle = particles[i];
        var j = i;
        while (--j > -1) {
            var neighbour = particles[j];
            var dx = particle.sx - neighbour.sx;
            var dy = particle.sy - neighbour.sy;
            var dd = Math.sqrt(dx * dx + dy * dy);
            if (dd > particleInfluenceRadius) {
                //-- out of radius
            } else if (dd > particleAttractionRadius) {
                //-- attraction
                particle.vx -= dx * partcileAttrationForce;
                particle.vy -= dy * partcileAttrationForce;
                neighbour.vx += dx * partcileAttrationForce;
                neighbour.vy += dy * partcileAttrationForce;
                strength = 1.0 - (dd - particleAttractionRadius) / (particleInfluenceRadius - particleAttractionRadius);
                drawLine(
                particle.sx,
                particle.sy,
                neighbour.sx,
                neighbour.sy,
                strength);
            } else if (dd > 0.0) {
                //-- rejection:spring
                dd = 0.5 * (dd - particleAttractionRadius) / dd;
                dx *= dd;
                dy *= dd;
                particle.vx -= dx;
                particle.vy -= dy;
                neighbour.vx += dx;
                neighbour.vy += dy;
                drawLine(
                particle.sx,
                particle.sy,
                neighbour.sx,
                neighbour.sy, 1.0);
            }
        }
    }
};

var moveAndDraw = function () {
    for (var i = 0; i < n; ++i) {
        var particle = particles[i];
        var sx = particle.sx;
        var sy = particle.sy;
        // mouse attraction
        var dx = mouseX - sx;
        var dy = mouseY - sy;
        var dd = Math.sqrt(dx * dx + dy * dy);
        if (dd < particleMouseInfluenceRadius) {
            particle.vx -= dx * particleMouseRejectionForce;
            particle.vy -= dy * particleMouseRejectionForce;
        }
        // damp velocity
        particle.vx *= partcileVelocityDecay;
        particle.vy *= partcileVelocityDecay;
        // apply velocity
        sx += particle.vx;
        sy += particle.vy;
        // bounds
        if (sx < 0) {
            sx = 0;
            particle.vx = -particle.vx;
        } else if (sx > width) {
            sx = width;
            particle.vx = -particle.vx;
        }
        if (sy < 0) {
            sy = 0;
            particle.vy = -particle.vy;
        } else if (sy > height) {
            sy = height;
            particle.vy = -particle.vy;
        }
        // draw
        drawCircle(sx, sy, 2.0);
        // write back
        particle.sx = sx;
        particle.sy = sy;
    }
};

var enterFrame = function () {
    context.clearRect(0, 0, width, height);
    solveAndDraw();
    moveAndDraw();
    window.requestAnimationFrame(enterFrame);
};

var mouseMove = function (e) {
    mouseX = e.offsetX;
    mouseY = e.offsetY;
};

window.requestAnimationFrame(enterFrame);
canvas.addEventListener("mousemove", mouseMove);
</script>
<div id="demo">
    <canvas id="canvas" width="800" height="200">no canvas, no shlanvas</canvas>
</div>

[/html]

+1

164

потому что заброшенные псевдо тесты и форумы имеют обыкновение теряться
http://smpostblue.rusff.me/
картинки в шапке и другие мелкие приказали долго жить, оставив только намек на былое великолепие, но принцип ясен
реализовано: юзер панель со ссылками; слева панель с указанием баллов по фракциям, начисляются ручками, просто как показатель актива; админы; вывод поста из темы; внизу партнеры, блок "уже в игре" с изменением каждые m-секунд, блок нужны в игру каждые n-секунд; из дополнительного кнопка на тему с инфо юзера
http://smselenawars.rusff.me/ один из вариантов демонстрации дизайна пока он рабочий и более старый вариант http://smselenawars.mybb.ru
http://smor.rusff.me/ и тоже просто дизайн

+2

165

Как именно ваш форум реагирует на огромные слова и перенос слов?

https://forumupload.ru/uploads/0007/e3/f7/7629/158052.jpg
Здесь у нас лорем ипсум слепленный в одно слово и оно уходит в никуда

https://forumupload.ru/uploads/0007/e3/f7/7629/335776.jpg
А теперь как будет выглядеть текст в котором мы внесем перенос длинных слов и перенос через тире
При этом текст копируются "чистым", без тире

За перенос слов отвечает свойство
word-wrap: break-word;

за добавление тире на месте переноса
hyphens: auto;

В итоге стиль для текста может выглядеть вот так:
.punbb .post-content p {
  margin: 0;
  line-height: 150%;
  font-size: 1.1em;
  word-wrap: break-word;
  hyphens: auto;

}
для применения к области текста на всем форуме

Отредактировано Will O The Wisp (22.02.23 12:46)

+2

166

Буквицы

Стиль буквицы, первой буквы каждого абзаца задается через ::first-letter
к примеру
.container p::first-letter{
    color:#FE5F55;
    font-weight: bold;
    font-size: 70px;
    float: left;
    line-height: 60px;
    padding-right: 8px;
    margin-top: -3px;
}
Большая красная буква в начале

Стиль буквицы только для первой буквы первого абзаца
.container p:first-child::first-letter{
    color:#FE5F55;
    font-weight: bold;
    font-size: 70px;
    float: left;
    line-height: 60px;
    padding-right: 8px;
    margin-top: -3px;
}

0

167

в дополнение к буквам, игра с тенью
https://codepen.io/JorenVanHee/pen/DyLrxE

Код:
[html]
<style>
@import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz);
.russian-river {
  position: relative;
  display: inline-block;
}

h17 {
  margin: 0;
  font-size: 128px;
  font-family: 'Yanone Kaffeesatz', sans-serif;
  text-transform: uppercase;
  letter-spacing: .1em;
  color: #fcf5ed;
  text-shadow:
    /* grey part - static */
    -1px -1px #34342f,
    1px 1px #34342f,
    2px 2px #34342f,
    3px 3px #34342f,
    4px 4px #34342f,
    5px 5px #34342f,
    6px 6px #34342f,
    7px 7px #34342f,
    /* red part - dynamic */
    0 8px #da5845,
    0 9px #da5845,
    0 10px #da5845,
    0 11px #da5845,
    0 12px #da5845,
    0 13px #da5845,
    0 14px #da5845,
    0 15px #da5845,
    0 16px #da5845,
    0 17px #da5845,
    0 18px #da5845,
    1px 8px #da5845,
    1px 9px #da5845,
    1px 10px #da5845,
    1px 11px #da5845,
    1px 12px #da5845,
    1px 13px #da5845,
    1px 14px #da5845,
    1px 15px #da5845,
    1px 16px #da5845,
    1px 17px #da5845,
    1px 18px #da5845,
    2px 8px #da5845,
    2px 9px #da5845,
    2px 10px #da5845,
    2px 11px #da5845,
    2px 12px #da5845,
    2px 13px #da5845,
    2px 14px #da5845,
    2px 15px #da5845,
    2px 16px #da5845,
    2px 17px #da5845,
    2px 18px #da5845,
    3px 8px #da5845,
    3px 9px #da5845,
    3px 10px #da5845,
    3px 11px #da5845,
    3px 12px #da5845,
    3px 13px #da5845,
    3px 14px #da5845,
    3px 15px #da5845,
    3px 16px #da5845,
    3px 17px #da5845,
    3px 18px #da5845,
    4px 8px #da5845,
    4px 9px #da5845,
    4px 10px #da5845,
    4px 11px #da5845,
    4px 12px #da5845,
    4px 13px #da5845,
    4px 14px #da5845,
    4px 15px #da5845,
    4px 16px #da5845,
    4px 17px #da5845,
    4px 18px #da5845,
    5px 8px #da5845,
    5px 9px #da5845,
    5px 10px #da5845,
    5px 11px #da5845,
    5px 12px #da5845,
    5px 13px #da5845,
    5px 14px #da5845,
    5px 15px #da5845,
    5px 16px #da5845,
    5px 17px #da5845,
    5px 18px #da5845,
    6px 8px #da5845,
    6px 9px #da5845,
    6px 10px #da5845,
    6px 11px #da5845,
    6px 12px #da5845,
    6px 13px #da5845,
    6px 14px #da5845,
    6px 15px #da5845,
    6px 16px #da5845,
    6px 17px #da5845,
    6px 18px #da5845,
    7px 8px #da5845,
    7px 9px #da5845,
    7px 10px #da5845,
    7px 11px #da5845,
    7px 12px #da5845,
    7px 13px #da5845,
    7px 14px #da5845,
    7px 15px #da5845,
    7px 16px #da5845,
    7px 17px #da5845,
    7px 18px #da5845;
}

.first-letter, .last-letter {
  font-size: 160px;
  position: relative;
  top: 23px;
}

[class^="trigger"] {
  position: absolute;
  width: 20%;
  height: 100%;
  z-index:2;
}

.trigger2 {left: 20%;}
.trigger3 {left: 40%;}
.trigger4 {left: 60%;}
.trigger5 {left: 80%;}

.trigger1:hover ~ h17 {
  text-shadow:
    /* grey part - static */
    -1px -1px #34342f,
    1px 1px #34342f,
    2px 2px #34342f,
    3px 3px #34342f,
    4px 4px #34342f,
    5px 5px #34342f,
    6px 6px #34342f,
    7px 7px #34342f,
    /* red part - dynamic */
    8px 8px #da5845,
    8px 9px #da5845,
    9px 10px #da5845,
    9px 11px #da5845,
    10px 12px #da5845,
    10px 13px #da5845,
    11px 14px #da5845,
    11px 15px #da5845,
    12px 16px #da5845,
    12px 17px #da5845,
    13px 18px #da5845;
}

.trigger2:hover ~ h17 {
  text-shadow:
    /* grey part - static */
    -1px -1px #34342f,
    1px 1px #34342f,
    2px 2px #34342f,
    3px 3px #34342f,
    4px 4px #34342f,
    5px 5px #34342f,
    6px 6px #34342f,
    7px 7px #34342f,
    /* red part - dynamic */
    8px 8px #da5845,
    8px 9px #da5845,
    8px 10px #da5845,
    9px 11px #da5845,
    9px 12px #da5845,
    9px 13px #da5845,
    10px 14px #da5845,
    10px 15px #da5845,
    10px 16px #da5845,
    11px 17px #da5845,
    11px 18px #da5845;
}

.trigger4:hover ~ h17 {
  text-shadow:
    /* grey part - static */
    -1px -1px #34342f,
    1px 1px #34342f,
    2px 2px #34342f,
    3px 3px #34342f,
    4px 4px #34342f,
    5px 5px #34342f,
    6px 6px #34342f,
    7px 7px #34342f,
    /* red part - dynamic */
    -1px 1px #da5845,
    -1px 2px #da5845,
    -1px 3px #da5845,
    -2px 4px #da5845,
    -2px 5px #da5845,
    -2px 6px #da5845,
    -3px 7px #da5845,
    -3px 8px #da5845,
    -3px 9px #da5845,
    -4px 10px #da5845,
    -4px 11px #da5845,
    -4px 12px #da5845,
    -5px 13px #da5845,
    -5px 14px #da5845,
    -5px 15px #da5845,
    -6px 16px #da5845,
    -6px 17px #da5845,
    -6px 18px #da5845,
    
    6px 8px #da5845,
    6px 9px #da5845,
    6px 10px #da5845,
    5px 11px #da5845,
    5px 12px #da5845,
    5px 13px #da5845,
    4px 14px #da5845,
    4px 15px #da5845,
    4px 16px #da5845,
    3px 17px #da5845,
    3px 18px #da5845;;
}

.trigger5:hover ~ h17 {
  text-shadow:
    /* grey part - static */
    -1px -1px #34342f,
    1px 1px #34342f,
    2px 2px #34342f,
    3px 3px #34342f,
    4px 4px #34342f,
    5px 5px #34342f,
    6px 6px #34342f,
    7px 7px #34342f,
    /* red part - dynamic */
    -1px 1px #da5845,
    -1px 2px #da5845,
    -2px 3px #da5845,
    -2px 4px #da5845,
    -3px 5px #da5845,
    -3px 6px #da5845,
    -4px 7px #da5845,
    -4px 8px #da5845,
    -5px 9px #da5845,
    -5px 10px #da5845,
    -6px 11px #da5845,
    -6px 12px #da5845,
    -7px 13px #da5845,
    -7px 14px #da5845,
    -8px 15px #da5845,
    -8px 16px #da5845,
    -9px 17px #da5845,
    -9px 18px #da5845,
    
    6px 8px #da5845,
    6px 9px #da5845,
    5px 10px #da5845,
    5px 11px #da5845,
    4px 12px #da5845,
    4px 13px #da5845,
    3px 14px #da5845,
    3px 15px #da5845,
    2px 16px #da5845,
    2px 17px #da5845,
    1px 18px #da5845;
}

</style>
<div class="russian-river">
  <div class="trigger1"></div>
  <div class="trigger2"></div>
  <div class="trigger3"></div>
  <div class="trigger4"></div>
  <div class="trigger5"></div>
  <h17><span class="first-letter">R</span>ussian Rive<span class="last-letter">r</span></h17>
</div>
[/html]

+2

168

итак, в какой-то момент игроки решили что оформление тем недостаточно синее/красное/серо-буро-малиновое?
оформите им темы с панелью цвета
https://codepen.io/oliverjam/pen/bGjQoEq

Код:
[html]
<style>
/***************/
/* Theme stuff */
/***************/
body {
  --h: 180; /* Default in case JS doesn't run */
  --text: hsl(var(--h), 30%, 25%);
  --text-alt: hsl(calc(var(--h) + 180), 100%, 25%lob); /* Invert the hue */
  --bg: hsl(var(--h), 20%, 85%);
  --highlight: hsl(var(--h), 70%, 70%);
  --focus: hsl(var(--h), 100%, 50%);}
 #theme{ width: 98%;
  color: var(--text);
  background-color: var(--bg);
}

#theme code {
  background-color: var(--highlight);
  font-size: 1.2em;
}
#theme h15{
  font-size: 2em;
  font-weight: normal;
  text-align: center;
  color: var(--h);
}

#theme h15,
#theme a {
  color: var(--text-alt);
}

#imgArt{
max-height: 100px;
width: 98%;
overflow: clip;
border: 2px solid var(--text);
}

#theme a {
  text-decoration: underline !important;
  text-decoration-color: var(--focus)!important;
  text-decoration-thickness: 2px!important;
  text-underline-offset: 8px!important;
  transition: text-underline-offset 0.2s, text-decoration-color 0.2s;
}

#theme a:hover {
  text-decoration-color: currentcolor!important;
  text-underline-offset: 3px!important;
}

#theme p::first-letter {
  font-size: 2em;
  text-decoration-color: var(--focus);
  text-decoration-thickness: 2px;
  text-underline-offset: 8px;
  transition: text-underline-offset 0.2s, text-decoration-color 0.2s;
}

/****************************************************/
/* It's not too bad to style range inputs these days*/
/****************************************************/

[type="range"] {
  --height: 2rem;
  width: 100%;
  height: var(--height);
  appearance: none;
  color: inherit;
  border: 2px solid;
  --s: 90%;
  --l: 70%;
  --rainbow: linear-gradient(
    to right,
    hsl(0deg var(--s) var(--l)),
    hsl(60deg var(--s) var(--l)),
    hsl(120deg var(--s) var(--l)),
    hsl(180deg var(--s) var(--l)),
    hsl(240deg var(--s) var(--l)),
    hsl(300deg var(--s) var(--l)),
    hsl(360deg var(--s) var(--l))
  );
  background-image: var(--rainbow);
}


[type="range"]:focus {
  outline: 0;
  box-shadow: 0 0 0 3px var(--focus);
}

[type="range"]:focus:not(:focus-visible) {
  box-shadow: none;
}

::-moz-range-thumb {
  appearance: none;
  width: 1rem;
  height: calc(var(--height) + 2px);
  border: 2px solid;
  border-radius: 0;
  box-shadow: inset 0 0 0 2px white;
  background-color: white;
  --shading: hsl(var(--h) 0% 85%);
  background-image: linear-gradient(to bottom, white, var(--shading));
}

::-webkit-slider-thumb {
  appearance: none;
  width: 1rem;
  height: calc(var(--height) + 2px);
  border: 2px solid;
  border-radius: 0;
  box-shadow: inset 0 0 0 2px white;
  background-color: white;
  --shading: hsl(var(--h) 0% 85%);
  background-image: linear-gradient(to bottom, white, var(--shading));
}


</style>
<script>
document
  .querySelector("[type='range']")
  .addEventListener("input", event => {
    let hue = event.target.value;
    document.body.style.setProperty("--h", hue);
  })

</script>

<div id="theme">

<h15>Hue theme picker</h15>
<p>A simple theme picker using an <code>&lt;input type="range"&gt;</code>.</p>

<input type="range" min="0" value="180" max="360">

</div>


<div id="theme">

<p>
Зал Совета директоров много лет не ремонтировали, священные фрески, которыми был расписан потолок, почти выцвели, пошли замысловатыми пятнами сырости, придававшими загадочность батальным сценам.
<br><br>
Господин директор Спел разглядывал потолок, словно стараясь угадать смысл в изображениях. Он не хотел показывать, что интересуется происходящим.
<br><br>
Господин директор Мекиль, начальник полиции, уже заканчивал свою разгромную речь, и до слуха Спела долетали лишь отрывки фраз: «... преступно нарушив Порядок, инженер Лемень... опорочив честное имя одного из самых уважаемых семейств, инженер Лемень...»
<br><br>
Мекиль, по прозвищу Мокрица, имел в виду семейство Спелов. Инженер Лемень вознамерился жениться на дочери Спела.
<br><br>
Шестнадцать директоров, сидевших в жестких деревянных <code>креслах вокруг массивного, отполированного локтями стола, слушали внимательно, и каждый из них старался понять, какую угрозу для них таит гневная речь Мокрицы. Тощий, мрачный, похожий на летучую мышь, Первый директор Калгар задумчиво крутил пальцами колокольчик. Его не устраивало усиление позиции начальника полиции.
<br><br>
Калгар покосился на Спела. Тот разглядывал фрески на потолке. Он не посмел пойти против Мокрицы и теперь делает вид, что слова Мекиля его не касаются.</code>
<br><br>
Мокрица кончил говорить. Директора зашевелились. Кто-то кашлянул. Калгар поднялся. Он был Первым директором, и ему проводить голосование.
<br><br>
<div id ="imgArt"><img src="https://wallpapers.com/images/featured/flower-kjzc9tzmwq40sj5f.jpg"></div>
<br><br>
— Господин Спел, — сказал Калгар. — Согласны ли вы, что нарушитель Порядка инженер Лемень заслуживает смерти в Огненной Бездне?
<br><br>
Спел наклонил голову.
<br><br>
— Господин генерал-директор?
<br><br>
Сверкающая нашивками туша колыхнулась.
<br><br>
— Без сомнения.
<br><br>
— Господин директор шахт?
<br><br>
Директор шахт долго жевал губами, изображая работу мысли. Калгар подумал, что Мокрица заплатил ему, но недостаточно.
<br><br>
— Полагаю, что поступки инженера <code>Леменя</code> выходят, так сказать, за рамки... А его идеи о существовании Города Наверху?
<br><br>
— Мы судим Леменя не за идеи, а за нарушение Порядка, — перебил его Мекиль.
<br><br>
— Да, — сказал директор шахт быстро. — Да, да.
<br><br>
— Господин директор коммуникаций?
<br><br>
У директора коммуникаций болит печень. Он морщится, прислушиваясь к боли, достает флакон с лекарством и машет свободной рукой — конечно, что там обсуждать...
<br><br>
Когда последний из директоров проголосовал за смерть Леменю, Калгар отцепил висящий на нагрудной цепи небольшой ключ от Переговорной.
<br><br>
— Тогда, — сказал он, — в согласии с традициями и Порядком, мы должны сделать Всеобщее оповещение. Господин директор Спел!
<br><br>
Хранитель ключа от Переговорной, <a href=#>директор Спел медленно</a> поднялся.
<br><br>
Мокрица смотрел на директоров. Это был час его торжества.
<br><br>
У двери Спел обернулся. У черной портьеры, скрывающей вход в зал заседаний, среди чиновников, жрецов, лакеев и охраны стоял его сын в форме офицера тайной стражи. Спел-старший встретился с ним взглядом. Спел-младший незаметно кивнул.

</p>

</div>

[/html]

+2

169

https://codepen.io/kitjenson/pen/vYybmBB

Код:
[html]
<style>
.panel {
  position:relative;
  display:inline-block;
  width:12.5vw;
  max-width:200px;
  height:25vw;
  margin:5vw 1vw;
  background: rgb(255, 255, 255);
  box-shadow:0 5px 10px rgba(0,0,0,.5);
  border-radius:.25vw;
  overflow:hidden;
  -webkit-backdrop-filter:blur(4px);
  backdrop-filter:blur(4px);
}
.panel:nth-child(2), .panel:nth-child(4) {
  margin:2.5vw 1vw;
  height:30vw;
}
.panel:nth-child(3) {
  height:35vw;
  margin:0 1vw;
}

.panel div {
  position:absolute;
  mix-blend-mode:multiply;
}
.panel .triangle {
  clip-path:polygon(50% 0%, 100% 100%, 0% 100%);
}
.panel .circle {
  border-radius:50%;
}

label {
  width:100px;
  display:block;
  font-size:14px;
  font-family:sans-serif;
  text-align:center;
  color:white;
  position:fixed;
  bottom:35px;
  left:10px;
  left:calc(50% - 50px);
}
#interior_elements {
  width:100px;
  position:fixed;
  bottom:10px;
  left:calc(50% - 50px);
}
</style>
<script>
const divs = document.querySelectorAll('div')
function fillPanels() {
  var elementCount = document.querySelector('input').value
  divs.forEach(function(el){
    el.innerHTML = ''
    function addElement() {
      var d = document.createElement('div')
      var shape = Math.random() < .5 ? 'triangle' : 'circle'
      d.className = Math.random() < .5 ? shape : 'square'
      var size = Math.ceil(Math.random()*7) + 'vw';
      d.style.width = size
      d.style.height = size
      var color = 'hsl('+(Math.random()*360)+'deg, 100%, 60%)'
      if(Math.random() < .5) {
        d.style.backgroundColor = color 
      } else {
        d.style.backgroundImage = 'linear-gradient(to bottom, transparent 4px , '+color+' 4px, '+color+' 5px, transparent 5px)'
      }      
      d.style.backgroundSize = '100% 6px'
      d.style.left = Math.random()*100 + '%'
      d.style.top = Math.random()*100 + '%'
      d.style.transform = 'rotate('+Math.random()*360+'deg)'
      el.appendChild(d)
    }

    for(var i=0;i<elementCount;i++) {
      addElement()  
    }
  })  
}

fillPanels()

window.addEventListener('click', fillPanels)
document.querySelector('input').addEventListener('change', fillPanels)
</script>
<div class='panel'></div>
<div class='panel'></div>
<div class='panel'></div>
<div class='panel'></div>
<div class='panel'></div>

<label for="interior_elements">Interior Shapes:</label>
<input type="number" id="interior_elements" name="interior_elements" min="1" max="50" value="5">
[/html]

+2

170

ховер анимация

Код:
[html]
<style>
#dvid {
    position: relative;
    margin: auto;
    width: 200px;
    height: 100px;
    line-height: 100px;
    text-align: center;
    overflow: hidden;}
    
    #dvid::after {
        content: "Hover Me";
        position: absolute;
        top: 4px;
        bottom: 4px;
        right: 4px;
        left: 4px;
        line-height: 92px;
        font-size: 24px;
        background: #fff;
        // border-radius: 50%;
        border: 2px solid yellowgreen;
        cursor: pointer;
        color: yellowgreen;
    }
    
    #dvid::before {
        content: "";
        position: absolute;
        top: 0px;
        bottom: 0px;
        right: -20px;
        left: 0px;
        background: #fff;
        //border-radius: 50%;
        transform: rotateZ(-90deg) translate(-100%, -100%);
        transform-origin: top left;
        transition: transform .3s;
        transition-timing-function: linear;
    }
    
    #dvid:hover {
        filter: contrast(1.2);
    }
    
        #dvid:hover::before {
            transform: rotateZ(0deg) translate(0%, -0%);
        }


#dvid:nth-child(2) {
    overflow: unset;
    
    #dvid::after {
        content: "";
    }
}

#dvid:nth-child(1):hover ~ #dvid:nth-child(2)::before {
    transform: rotateZ(0deg) translate(0%, -0%);
}
    
</style>
<div id="dvid">Hover Me</div>
<div id="dvid">Hover Me</div>
[/html]

+2