Show / Hide Table of Contents

RuSO Archive

Ответ user757704 на вопрос "Новогодний конкурс 2025-2026 года!"

Answer 1623546

Source - by user757704

участник Grundy♦ проверил это сообщение 16 часов назад: Отклонить

Правка адресована автору сообщения и, по сути, правкой не является. Её стоит опубликовать в форме комментария или ответа.

Эта причина отклонения серьёзно предлагает опубликовать текст в качестве ответа?) Ну тогда вот вам ответ, который вы всё равно удалите:

Вопросы-соревнования

Все вопросы-соревнования на Stack Overflow на русском должны иметь:

  1. Четкое описание требований, предъявляемых к решениям.

  2. Объективный критерий победы, который даст возможность выбрать лучшее решение из предложенных.

Читаем вопрос:

В этом году хочется провести конкурс более развернуто, без ограничительных рамок.

Прямое противоречие первому пункту правил проведения соревнований.

И победит та работа, которая соберет наибольшее количество upvote голосов

Сперва может показаться, что это объективный критерий победы, но...

и будет наиболее выигрышна в создании Новогоднего настроения!

И как эту выигрышность оценивать? Нарушение второго пункта правил проведения соревнований.

Вопросы-соревнования по визуализации должны иметь сценарий визуализации. В сценарии должны быть указаны конкретные необходимые элементы (шаги) визуализации и ожидаемая от них совместная работа.

Ну вы поняли.


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


Максимально выигрышная новогодняя рекомендация от нейронки gpt-oss:20b, которая не позволит удалить ответ по причине "Не является ответом":

/* ---------- Создание звёзд ----------
*/
const stars=document.querySelector('.stars');
for(let i=0;i<70;i++){
  const s=document.createElement('div');
  s.style.top=`${Math.random()*100}vh`;
  s.style.left=`${Math.random()*100}vw`;
  s.style.animationDelay=`${Math.random()*2}s`;
  stars.appendChild(s);
}

/* ---------- Падающие снежинки ----------
*/
const flakes=document.querySelector('.snowflakes');
for(let i=0;i<60;i++){
  const f=document.createElement('div');
  f.className='snowflake';
  f.textContent='❄️';
  f.style.left=`${Math.random()*100}vw`;
  f.style.animationDelay=`-${Math.random()*5}s`;          // отрицательная задержка
  f.style.animationDuration=`${4+Math.random()*4}s`;
  /* более сильный ветер: горизонтальное смещение ±20 px */
  f.style.setProperty('--dx', `${(Math.random()*40-20)}px`);
  flakes.appendChild(f);
}
/* ---------- Общие стили ----------
   порядок слоёв: небо → земля → снеговики → ёлочка → надпись → снежинки ----------
*/
body{margin:0;overflow:hidden;background:#001;font-family:sans-serif}
.scene{position:relative;width:100vw;height:100vh;
       display:flex;align-items:center;justify-content:center}

/* ---------- Звёздное небо ----------
   Самый нижний слой (z-index 0) ----------
*/
.stars{position:absolute;top:0;left:0;width:100%;height:100%;z-index:0}
.stars div{position:absolute;width:1px;height:1px;
           background:#fff;box-shadow:0 0 3px #fff;
           animation:flicker 2s infinite ease-in-out}

/* ---------- Заснеженная земля ----------
   слой 1 ----------
*/
.ground{position:absolute;bottom:0;left:0;width:100%;height:30px;
        background:#fff;z-index:1}

/* ---------- Снеговики ----------
   слой 2 ----------
*/
.snowman{position:absolute;width:60px;height:80px}
.left{left:10%;bottom:0;z-index:2}
.right{right:10%;bottom:0;z-index:2}
.snowman circle{fill:#fff;stroke:#000;stroke-width:2}

/* ---------- Ёлочка ----------
   слой 3 ----------
*/
.tree{position:absolute;bottom:0;left:50%;
      transform:translateX(-50%);z-index:3}
.tree polygon{fill:#0c0}
.tree .garland{animation:glow 1s infinite alternate}
@keyframes glow{to{opacity:.2}}

/* ---------- Текст ----------
   слой 4 ----------
*/
.text{position:relative;font-size:2.2rem;color:#0f0;
      text-shadow:0 0 10px #0f0,0 0 20px #0f0;z-index:4;
      filter:url(#snow)}
.text::after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;
             background:radial-gradient(circle,#fff,.1px,#fff 0,.2px,#fff);
             background-size:4px 4px;opacity:.15}
@keyframes neon{0%{text-shadow:0 0 10px #0f0,0 0 20px #0f0}
                100%{text-shadow:0 0 20px #0f0,0 0 30px #f0f}}
.neon{animation:neon 1s infinite alternate}

/* ---------- Падающие снежинки ----------
   слой 5 (напротив всех) ----------
*/
.snowflakes{position:absolute;top:0;left:0;width:100%;height:100%;
            pointer-events:none;z-index:5}
.snowflake{position:absolute;font-size:12px;opacity:.8;
           animation:snow linear infinite}
@keyframes snow{
  0%   {transform:translateX(0) translateY(-10vh);}
  50%  {transform:translateX(var(--dx)) translateY(55vh);}
  100% {transform:translateX(calc(-1*var(--dx))) translateY(110vh);}
}

/* ---------- Анимации ----------
*/
@keyframes flicker{0%{opacity:.5} 50%{opacity:.9} 100%{opacity:.5}}
<div class="scene">
  <div class="stars"></div>

  <div class="ground"></div>

  <svg class="tree" viewBox="0 -10 100 130">
    <polygon points="50,0 25,45 75,45"/>
    <polygon points="50,45 15,90 85,90"/>
    <polygon points="50,90 5,120 95,120"/>

    <!-- 12 точек гирлянды -->
    <circle class="garland" cx="50"  cy="0"   r="4" fill="#f00"/>
    <circle class="garland" cx="25"  cy="45"  r="4" fill="#0f0"/>
    <circle class="garland" cx="75"  cy="45"  r="4" fill="#00f"/>
    <circle class="garland" cx="15"  cy="90"  r="4" fill="#ff0"/>
    <circle class="garland" cx="85"  cy="90"  r="4" fill="#0ff"/>
    <circle class="garland" cx="5"   cy="120" r="4" fill="#f0f"/>
    <circle class="garland" cx="95"  cy="120" r="4" fill="#fff"/>
    <circle class="garland" cx="30"  cy="70"  r="4" fill="#c00"/>
    <circle class="garland" cx="70"  cy="70"  r="4" fill="#0c0"/>
    <circle class="garland" cx="40"  cy="115" r="4" fill="#00c"/>
    <circle class="garland" cx="60"  cy="115" r="4" fill="#c0c"/>
    <circle class="garland" cx="50"  cy="105" r="4" fill="#cc0"/>
  </svg>

  <div class="text"><span class="neon">Соблюдайте правила!</span></div>
  <div class="snowflakes"></div>

  <svg class="snowman left" viewBox="0 0 60 80">
    <circle class="head" cx="30" cy="20" r="15"/>
    <circle cx="30" cy="50" r="20"/>
    <circle cx="30" cy="70" r="25"/>
  </svg>
  <svg class="snowman right" viewBox="0 0 60 80">
    <circle class="head" cx="30" cy="20" r="15"/>
    <circle cx="30" cy="50" r="20"/>
    <circle cx="30" cy="70" r="25"/>
  </svg>
</div>

Content is retrieved from StackExchange API.

Auto-generated by ruso-archive tools.

In This Article
Back to top RuSO Archive (published from sources in GitHub repository). Content licensed under CC-BY-SA 4.0.
Generated by DocFX