.
тест
Сообщений 1 страница 18 из 18
Поделиться32025-12-27 13:48:44
одной из самых красивых пар посвящаю
@finn sawyer и @september ross
[html]
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.card-container {
width: 100%;
max-width: 1200px;
background: rgba(10, 30, 40, 0.85);
border-radius: 25px;
padding: 40px;
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.7);
position: relative;
border: 5px solid #000;
overflow: hidden;
}
/* Декоративные еловые ветки */
.decoration {
position: absolute;
z-index: 1;
pointer-events: none;
}
.decoration-1 {
top: -20px;
left: -15px;
width: 250px;
}
.decoration-2 {
bottom: -20px;
right: -20px;
width: 200px;
}
.decoration-3 {
top: 50%;
left: -30px;
width: 150px;
}
.decoration-4 {
top: 50%;
right: -30px;
transform: translateY(-50%) rotate(-90deg);
width: 150px;
}
/* Контент */
.card-content {
position: relative;
z-index: 2;
}
.images-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 25px;
margin-bottom: 40px;
}
.image-frame {
width: 300px;
height: 300px;
position: relative;
border-radius: 15px;
overflow: hidden;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
transition: transform 0.5s ease;
background: #57785c1a;
display: flex;
justify-content: center;
align-items: center;
}
.image-frame:hover {
transform: scale(1.1);
z-index: 10;
}
.image-frame img {
width: 90%;
height: 90%;
object-fit: cover;
border-radius: 10px;
position: relative;
z-index: 1;
}
/* Повороты */
.frame-1 { transform: rotate(-5deg); }
.frame-1:hover { transform: rotate(-5deg) scale(1.1); }
.frame-2 { transform: rotate(2deg); }
.frame-2:hover { transform: rotate(2deg) scale(1.1); }
.frame-3 { transform: rotate(-3deg); }
.frame-3:hover { transform: rotate(-3deg) scale(1.1); }
.frame-4 { transform: rotate(4deg); }
.frame-4:hover { transform: rotate(4deg) scale(1.1); }
.frame-5 { transform: rotate(-2deg); }
.frame-5:hover { transform: rotate(-2deg) scale(1.1); }
/* Украшение рамок */
.frame-decoration {
position: absolute;
width: 30px;
height: 30px;
z-index: 2;
opacity: 0.8;
}
.top-left { top: 8px; left: 8px; }
.top-right { top: 8px; right: 8px; }
.bottom-left { bottom: 8px; left: 8px; }
.bottom-right { bottom: 8px; right: 8px; }
/* Текст */
.greeting-text {
background: #57785c1a;
border-radius: 20px;
padding: 30px;
margin-top: 30px;
border: 2px solid #00000075;
backdrop-filter: blur(5px);
color: #85cf99;
}
.signature {
text-align: right;
margin-top: 10px;
font-style: italic;
font-family: Sunday;
color: #ffaa2a;
}
/* Адаптивность */
@media (max-width: 1100px) {
.image-frame {
width: 180px;
height: 180px;
}
}
@media (max-width: 900px) {
.images-container {
gap: 15px;
}
.image-frame {
width: 130px;
height: 130px;
}
}
@media (max-width: 700px) {
.card-container {
padding: 25px;
}
.image-frame {
width: 100px;
height: 100px;
}
.greeting-text {
padding: 20px;
}
}
@media (max-width: 550px) {
.images-container {
gap: 10px;
}
.image-frame {
width: 85px;
height: 85px;
}
.decoration {
display: none;
}
}
</style>
<style>
/* СТИЛИ ДЛЯ СНЕГА - ДОБАВЬТЕ ЭТО В ВАШ CSS */
.snow-container {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 5;
overflow: hidden;
}
.snowflake {
position: absolute;
background: white;
border-radius: 50%;
top: -10px;
opacity: 0.8;
animation: snowFallIndividual linear infinite;
box-shadow: 0 0 3px white;
}
@keyframes snowFallIndividual {
0% {
transform: translateY(-10px) translateX(0);
opacity: 0.8;
}
100% {
transform: translateY(100vh) translateX(50px);
opacity: 0;
}
}
</style>
<div class="card-container">
<!-- Еловые ветки -->
<img src="https://cdn-icons-png.flaticon.com/512/2508/2508203.png" alt="Еловая ветка" class="decoration decoration-1">
<img src="https://cdn-icons-png.flaticon.com/512/3835/3835818.png" alt="Еловая ветка" class="decoration decoration-2">
<img src="https://cdn-icons-png.flaticon.com/512/16775/16775136.png" alt="Еловая ветка" class="decoration decoration-3">
<img src="https://cdn-icons-png.flaticon.com/512/6278/6278313.png" alt="Еловая ветка" class="decoration decoration-4">
<!-- Снег БЕЗ JavaScript -->
<div class="snow-container">
<!-- 20 снежинок, созданных через HTML -->
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
</div>
<div class="card-content">
<div class="images-container">
<!-- 5 фото -->
<div class="image-frame frame-1">
<div class="frame-decoration top-left">❄️</div>
<img src="https://upforme.ru/uploads/001b/ee/60/4/954684.jpg" alt="Новогоднее фото 1">
</div>
<div class="image-frame frame-2">
<div class="frame-decoration top-right">❄️</div>
<img src="https://upforme.ru/uploads/001b/ee/60/4/210178.png" alt="Новогоднее фото 2">
</div>
<div class="image-frame frame-3">
<div class="frame-decoration bottom-right">❄️</div>
<img src="https://upforme.ru/uploads/001b/ee/60/4/20349.jpg" alt="Новогоднее фото 3">
</div>
<div class="greeting-text">
<table>
<tr>
<td>Септембер и Финн, в снежный вечер<br>
Пусть придёт к вам счастье без преград.<br>
В Эврике‑Спрингс, под звёздным небом,<br>
Пусть звучит ваш тихий «навсегда».<br></td>
<td>С Новым годом! Светлых дней,<br>
Тёплых встреч и добрых вестей.<br>
Пусть любовь, как снежный шар,<br>
Станет крепче в этот дар. <br></td>
</tr>
</table>
<div class="signature">С новым годом от Люцифера!</div>
</div>
</div>
</div>
<!-- СКРИПТ ДЛЯ СНЕГА - ДОБАВЬТЕ ЭТО ПОСЛЕ ОТКРЫТКИ -->
<script>
// Простой скрипт для создания снежинок
(function() {
// Ждем немного чтобы все загрузилось
setTimeout(function() {
const snowContainer = document.querySelector('.snow-container');
if (!snowContainer) {
console.error('Не найден .snow-container');
return;
}
// Очищаем если что-то есть
snowContainer.innerHTML = '';
// Создаем 60 снежинок (можно изменить количество)
for (let i = 0; i < 60; i++) {
const snowflake = document.createElement('div');
snowflake.className = 'snowflake';
// Случайные параметры
const left = Math.random() * 100; // 0-100%
const size = Math.random() * 6 + 3; // 3-9px
const duration = Math.random() * 10 + 5; // 5-15 секунд
const delay = Math.random() * 20; // 0-20 секунд
const opacity = 0.5 + Math.random() * 0.5; // 0.5-1
// Применяем стили
snowflake.style.left = left + '%';
snowflake.style.width = size + 'px';
snowflake.style.height = size + 'px';
snowflake.style.animationDuration = duration + 's';
snowflake.style.animationDelay = delay + 's';
snowflake.style.opacity = opacity;
snowContainer.appendChild(snowflake);
}
console.log('Снег создан: ' + snowContainer.children.length + ' снежинок');
}, 100);
})();
</script>
[/html]
Поделиться42025-12-27 14:51:14
одной из самых красивых пар посвящаю
@finn sawyer и @september ross
скрещу пальчики, чтобы вы все-таки были вместе
[html]
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.card-container {
width: 100%;
max-width: 1200px;
background: rgba(10, 30, 40, 0.85);
border-radius: 25px;
padding: 40px;
box-shadow: 0 20px 50px rgba(0, 0, 0, 0.7);
position: relative;
border: 5px solid #000;
overflow: hidden;
}
/* Декоративные еловые ветки */
.decoration {
position: absolute;
z-index: 1;
pointer-events: none;
}
.decoration-1 {
top: -20px;
left: -15px;
width: 250px;
}
.decoration-2 {
bottom: -20px;
right: -20px;
width: 200px;
}
.decoration-3 {
top: 50%;
left: -30px;
width: 150px;
}
.decoration-4 {
top: 50%;
right: -30px;
transform: translateY(-50%) rotate(-90deg);
width: 150px;
}
/* Контент */
.card-content {
position: relative;
z-index: 2;
}
.images-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 25px;
margin-bottom: 40px;
}
.image-frame {
width: 200px;
height: 200px;
position: relative;
border-radius: 15px;
overflow: hidden;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
transition: transform 0.5s ease;
background: #57785c1a;
display: flex;
justify-content: center;
align-items: center;
}
.image-frame:hover {
transform: scale(1.1);
z-index: 10;
}
.image-frame img {
width: 90%;
height: 90%;
object-fit: cover;
border-radius: 10px;
position: relative;
z-index: 1;
}
/* Повороты */
.frame-1 { transform: rotate(-5deg); }
.frame-1:hover { transform: rotate(-5deg) scale(1.1); }
.frame-2 { transform: rotate(2deg); }
.frame-2:hover { transform: rotate(2deg) scale(1.1); }
.frame-3 { transform: rotate(-3deg); }
.frame-3:hover { transform: rotate(-3deg) scale(1.1); }
.frame-4 { transform: rotate(4deg); }
.frame-4:hover { transform: rotate(4deg) scale(1.1); }
.frame-5 { transform: rotate(-2deg); }
.frame-5:hover { transform: rotate(-2deg) scale(1.1); }
/* Украшение рамок */
.frame-decoration {
position: absolute;
width: 30px;
height: 30px;
z-index: 2;
opacity: 0.8;
}
.top-left { top: 8px; left: 8px; }
.top-right { top: 8px; right: 8px; }
.bottom-left { bottom: 8px; left: 8px; }
.bottom-right { bottom: 8px; right: 8px; }
/* Текст */
.greeting-text {
background: #57785c1a;
border-radius: 20px;
padding: 30px;
margin-top: 30px;
border: 2px solid #00000075;
backdrop-filter: blur(5px);
color: #85cf99;
}
.signature {
text-align: right;
margin-top: 10px;
font-style: italic;
font-family: Sunday;
color: #ffaa2a;
}
/* Адаптивность */
@media (max-width: 1100px) {
.image-frame {
width: 180px;
height: 180px;
}
}
@media (max-width: 900px) {
.images-container {
gap: 15px;
}
.image-frame {
width: 130px;
height: 130px;
}
}
@media (max-width: 700px) {
.card-container {
padding: 25px;
}
.image-frame {
width: 100px;
height: 100px;
}
.greeting-text {
padding: 20px;
}
}
@media (max-width: 550px) {
.images-container {
gap: 10px;
}
.image-frame {
width: 85px;
height: 85px;
}
.decoration {
display: none;
}
}
</style>
<style>
/* СТИЛИ ДЛЯ СНЕГА */
.snow-container {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 5;
overflow: hidden;
}
.snowflake {
position: absolute;
background: white;
border-radius: 50%;
top: -10px;
opacity: 0.8;
animation: snowFallIndividual linear infinite;
box-shadow: 0 0 3px white;
}
@keyframes snowFallIndividual {
0% { transform: translateY(-10px) translateX(0); opacity: 0.8; }
100% { transform: translateY(100vh) translateX(50px); opacity: 0; }
}
/* 20 снежинок с разными параметрами */
.snowflake:nth-child(1) { left: 5%; width: 6px; height: 6px; animation-duration: 9s; animation-delay: 0s; }
.snowflake:nth-child(2) { left: 15%; width: 5px; height: 5px; animation-duration: 12s; animation-delay: 1s; }
.snowflake:nth-child(3) { left: 25%; width: 7px; height: 7px; animation-duration: 8s; animation-delay: 2s; }
.snowflake:nth-child(4) { left: 35%; width: 4px; height: 4px; animation-duration: 11s; animation-delay: 3s; }
.snowflake:nth-child(5) { left: 45%; width: 6px; height: 6px; animation-duration: 5s; animation-delay: 4s; }
.snowflake:nth-child(6) { left: 55%; width: 5px; height: 5px; animation-duration: 4s; animation-delay: 5s; }
.snowflake:nth-child(7) { left: 65%; width: 8px; height: 8px; animation-duration: 7s; animation-delay: 6s; }
.snowflake:nth-child(8) { left: 75%; width: 4px; height: 4px; animation-duration: 7s; animation-delay: 7s; }
.snowflake:nth-child(9) { left: 85%; width: 6px; height: 6px; animation-duration: 10s; animation-delay: 8s; }
.snowflake:nth-child(10) { left: 95%; width: 5px; height: 5px; animation-duration: 5s; animation-delay: 9s; }
.snowflake:nth-child(11) { left: 10%; width: 7px; height: 7px; animation-duration: 12s; animation-delay: 10s; }
.snowflake:nth-child(12) { left: 20%; width: 4px; height: 4px; animation-duration: 11s; animation-delay: 11s; }
.snowflake:nth-child(13) { left: 30%; width: 6px; height: 6px; animation-duration: 9s; animation-delay: 12s; }
.snowflake:nth-child(14) { left: 40%; width: 5px; height: 5px; animation-duration: 11s; animation-delay: 13s; }
.snowflake:nth-child(15) { left: 50%; width: 8px; height: 8px; animation-duration: 7s; animation-delay: 14s; }
.snowflake:nth-child(16) { left: 60%; width: 4px; height: 4px; animation-duration: 8s; animation-delay: 15s; }
.snowflake:nth-child(17) { left: 70%; width: 6px; height: 6px; animation-duration: 6s; animation-delay: 16s; }
.snowflake:nth-child(18) { left: 80%; width: 5px; height: 5px; animation-duration: 9s; animation-delay: 17s; }
.snowflake:nth-child(19) { left: 90%; width: 7px; height: 7px; animation-duration: 5s; animation-delay: 18s; }
.snowflake:nth-child(20) { left: 100%; width: 4px; height: 4px; animation-duration: 11s; animation-delay: 19s; }
</style>
<div class="card-container">
<!-- Еловые ветки -->
<img src="https://cdn-icons-png.flaticon.com/512/2508/2508203.png" alt="Еловая ветка" class="decoration decoration-1">
<img src="https://cdn-icons-png.flaticon.com/512/3835/3835818.png" alt="Еловая ветка" class="decoration decoration-2">
<img src="https://cdn-icons-png.flaticon.com/512/16775/16775136.png" alt="Еловая ветка" class="decoration decoration-3">
<img src="https://cdn-icons-png.flaticon.com/512/6278/6278313.png" alt="Еловая ветка" class="decoration decoration-4">
<!-- ДОБАВЬТЕ ЭТОТ ДИВ ДЛЯ СНЕГА -->
<div class="snow-container">
<!-- 20 снежинок вручную -->
<div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div>
<div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div> <div class="snowflake"></div>
</div>
<div class="card-content">
<div class="images-container">
<!-- 5 фото -->
<div class="image-frame frame-1">
<div class="frame-decoration top-left">❄️</div>
<img src="https://upforme.ru/uploads/001b/ee/60/4/954684.jpg" alt="Новогоднее фото 1">
</div>
<div class="image-frame frame-2">
<div class="frame-decoration top-right">❄️</div>
<img src="https://upforme.ru/uploads/001b/ee/60/4/210178.png" alt="Новогоднее фото 2">
</div>
<div class="image-frame frame-3">
<div class="frame-decoration bottom-right">❄️</div>
<img src="https://upforme.ru/uploads/001b/ee/60/4/20349.jpg" alt="Новогоднее фото 3">
</div>
<div class="greeting-text">
<table>
<tr>
<td>Септембер и Финн, в снежный вечер<br>
Пусть придёт к вам счастье без преград.<br>
В Эврике‑Спрингс, под звёздным небом,<br>
Пусть звучит ваш тихий «навсегда».<br></td>
<td>С Новым годом! Светлых дней,<br>
Тёплых встреч и добрых вестей.<br>
Пусть любовь, как снежный шар,<br>
Станет крепче в этот дар. <br></td>
</tr>
</table>
<div class="signature">С новым годом от Люцифера!</div>
</div>
</div>
</div>
<!-- СКРИПТ ДЛЯ СНЕГА - ДОБАВЬТЕ ЭТО ПОСЛЕ ОТКРЫТКИ -->
<script>
// Простой скрипт для создания снежинок
(function() {
// Ждем немного чтобы все загрузилось
setTimeout(function() {
const snowContainer = document.querySelector('.snow-container');
if (!snowContainer) {
console.error('Не найден .snow-container');
return;
}
// Очищаем если что-то есть
snowContainer.innerHTML = '';
// Создаем 60 снежинок (можно изменить количество)
for (let i = 0; i < 60; i++) {
const snowflake = document.createElement('div');
snowflake.className = 'snowflake';
// Случайные параметры
const left = Math.random() * 100; // 0-100%
const size = Math.random() * 6 + 3; // 3-9px
const duration = Math.random() * 10 + 5; // 5-15 секунд
const delay = Math.random() * 20; // 0-20 секунд
const opacity = 0.5 + Math.random() * 0.5; // 0.5-1
// Применяем стили
snowflake.style.left = left + '%';
snowflake.style.width = size + 'px';
snowflake.style.height = size + 'px';
snowflake.style.animationDuration = duration + 's';
snowflake.style.animationDelay = delay + 's';
snowflake.style.opacity = opacity;
snowContainer.appendChild(snowflake);
}
console.log('Снег создан: ' + snowContainer.children.length + ' снежинок');
}, 100);
})();
</script>
[/html]
Поделиться52025-12-27 16:31:52
@Glenn Gordon с праздником тебя!
Пусть все идеи воплощаются и радуют сердечко)
от скромника Кая[html]<div class="gothic-christmas-card">
<div class="card-background"></div>
<div class="decoration left"></div>
<div class="decoration right"></div>
<div class="image-card second">
<img src="https://upforme.ru/uploads/001b/ee/60/4/795286.png" >
</div>
<div class="image-card first">
<img src="https://upforme.ru/uploads/001b/ee/60/4/721902.png" >
</div>
</div><style>
.gothic-christmas-card {
position: relative;
width: 600px;
height: 400px;
margin: 20px auto;
overflow: hidden;
font-family: 'Times New Roman', serif;
}.card-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url('https://i.pinimg.com/originals/5a/08/b3/5a08b3b4baffe5e8dd04d1e90b6249fc.gif') center/cover no-repeat;
filter: brightness(0.8);
}.decoration {
position: absolute;
width: 80px;
height: 100%;
background-repeat: repeat-y;
opacity: 0.7;
z-index: 2;
}.decoration.left {
left: 0;
background: left top;
}.decoration.right {
right: 0;
background: right top;
}.image-card {
position: absolute;
width: 280px;
height: 220px;
border-radius: 12px;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3);
overflow: hidden;
transform: rotate(-5deg);
transition: transform 0.3s ease;
}.image-card img {
width: 100%;
height: 100%;
object-fit: cover;
}.image-card.first {
top: 100px;
left: 80px;
}.image-card.second {
top: 120px;
right: 80px;
transform: rotate(7deg);
}.image-card:hover {
transform: scale(1.05) rotate(0deg);
z-index: 3;
}
</style>
<div class="christmas-card">
<div class="card-background"></div>
<div class="decoration left-decoration"></div>
<div class="decoration right-decoration"></div>
<div class="main-image-container">
<img src="https://upforme.ru/uploads/001b/ee/60/4/146500.png" class="main-image">
</div>
</div><style>
.christmas-card {
position: relative;
width: 600px;
height: 400px;
margin: 20px auto;
overflow: hidden;
border-radius: 15px;
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2);
}.card-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url('https://i.pinimg.com/originals/9c/1a/59/9c1a595d7d7a2774150240668dc0cdce.gif') center/cover no-repeat;
filter: brightness(0.7) saturate(1.2);
}.decoration {
position: absolute;
width: 60px;
height: 100%;
z-index: 2;
}.left-decoration {
left: 0;
background: url('https://example.com/left-fir-branch.png') left top / contain no-repeat;
}.right-decoration {
right: 0;
background: url('https://example.com/right-fir-branch.png') right top / contain no-repeat;
}.main-image-container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) rotate(-5deg);
width: 70%;
height: 70%;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
z-index: 3;
transition: transform 0.4s ease, box-shadow 0.4s ease;}
.main-image-container:hover {
transform: translate(-50%, -50%) scale(1.05);
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.4);
}.main-image {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}/* Адаптивность для мобильных */
@media (max-width: 768px) {
.christmas-card {
width: 95%;
height: auto;
padding-top: 66.67%; /* соотношение 3:2 */
}
.main-image-container {
width: 80%;
height: 80%;
}
.decoration {
width: 40px;
}
}
</style>
[/html]
Поделиться72025-12-27 18:19:22
[html]<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Рождественское Таро</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}body {
font-family: 'Georgia', serif;
background: linear-gradient(135deg, #1a0f0f 0%, #2c1810 100%);
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
}/* Подложка */
.card-container {
position: relative;
width: 100%;
max-width: 1400px;
min-height: 800px;
background:
linear-gradient(to bottom, #8b4513, #654321),
url('https://images.unsplash.com/photo-1513475382585-d06e58bcb0e0?ixlib=rb-4.0.3&auto=format&fit=crop&w=1350&q=80') center/cover;
background-blend-mode: overlay;
border-radius: 30px;
box-shadow: 0 30px 60px rgba(0, 0, 0, 0.8);
border: 15px solid #5d4037;
padding: 40px;
display: flex;
flex-direction: column;
align-items: center;
overflow: hidden;
}/* Заголовок */
.title {
text-align: center;
margin-bottom: 40px;
color: #ffd700;
text-shadow: 3px 3px 5px rgba(0, 0, 0, 0.7);
font-size: 3rem;
font-family: 'Cinzel', serif;
padding: 20px;
border-bottom: 2px solid rgba(255, 215, 0, 0.3);
width: 100%;
}/* Контейнер для карт */
.cards-spread {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 20px;
max-width: 1200px;
margin: 0 auto;
position: relative;
z-index: 2;
}/* Стиль карты */
.tarot-card {
width: 180px;
height: 280px;
cursor: pointer;
transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
transform-style: preserve-3d;
border-radius: 12px;
position: relative;
transform-origin: center center;
}/* Лицевая и обратная стороны */
.card-front,
.card-back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
border-radius: 12px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 15px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
}/* Рубашка карты */
.card-back {
background: linear-gradient(135deg, #8b0000 0%, #4a0000 100%);
border: 4px solid #ffd700;
transform: rotateY(0deg);
}.card-back::before {
content: '❄';
font-size: 60px;
color: #ffd700;
opacity: 0.7;
margin-bottom: 10px;
}.card-back::after {
content: 'Нажмите';
position: absolute;
bottom: 20px;
color: #ffd700;
font-size: 14px;
opacity: 0.8;
}/* Лицевая сторона */
.card-front {
background: linear-gradient(135deg, #f5f5dc 0%, #e8e4c9 100%);
transform: rotateY(180deg);
border: 3px solid #8b4513;
overflow: hidden;
}.card-image {
width: 100%;
height: 65%;
object-fit: cover;
border-radius: 8px;
margin-bottom: 10px;
border: 2px solid #5d4037;
}.card-name {
font-size: 16px;
color: #5d4037;
text-align: center;
font-weight: bold;
margin-bottom: 8px;
font-family: 'Cinzel', serif;
}.card-message {
font-size: 12px;
color: #654321;
text-align: center;
line-height: 1.3;
}/* Анимация при наведении */
.tarot-card:hover {
transform: translateY(-20px) scale(1.05);
z-index: 10;
}/* Анимация переворота */
.tarot-card.flipped {
transform: rotateY(180deg) translateY(-40px) scale(1.1);
z-index: 20 !important;
}/* Подпись */
.footer {
margin-top: 50px;
text-align: center;
color: #ffd700;
font-size: 18px;
font-family: 'Cinzel', serif;
padding: 20px;
border-top: 2px solid rgba(255, 215, 0, 0.3);
width: 100%;
}/* Декоративные снежинки */
.snowflake {
position: absolute;
background: white;
border-radius: 50%;
opacity: 0.8;
animation: fall linear infinite;
pointer-events: none;
z-index: 1;
}@keyframes fall {
0% { transform: translateY(-100px) translateX(0); }
100% { transform: translateY(1000px) translateX(100px); opacity: 0; }
}/* Адаптивность */
@media (max-width: 1200px) {
.cards-spread {
max-width: 900px;
}
.tarot-card {
width: 150px;
height: 230px;
}
}@media (max-width: 768px) {
.cards-spread {
gap: 15px;
}
.tarot-card {
width: 130px;
height: 200px;
}
.title {
font-size: 2rem;
}
.card-container {
padding: 20px;
}
}@media (max-width: 480px) {
.cards-spread {
gap: 10px;
}
.tarot-card {
width: 110px;
height: 170px;
}
.card-back::before {
font-size: 40px;
}
.card-name {
font-size: 14px;
}
}
</style>
<link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&display=swap" rel="stylesheet">
</head>
<body>
<div class="card-container">
<!-- Снег -->
<div id="snow"></div>
<h1 class="title">🎄 Рождественские Предсказания 🎄</h1>
<br>
<div class="cards-spread">
<!-- Карта 3 -->
<div class="tarot-card" onclick="flipCard(this)">
<div class="card-back"></div>
<div class="card-front">
<img src="https://upforme.ru/uploads/001b/ee/60/4/748620.png"
alt="Свечи" class="card-image">
<div class="card-name">НЕОЖИДАННОЕ СЧАСТЬЕ</div>
<div class="card-message">прямо в руки упадет желанный подарок</div>
</div>
</div>
<!-- Карта 4 -->
<div class="tarot-card" onclick="flipCard(this)">
<div class="card-back"></div>
<div class="card-front">
<img src="https://upforme.ru/uploads/001b/ee/60/4/967020.png"
alt="Ужин" class="card-image">
<div class="card-name">СЕМЕЙНЫЙ ОЧАГ</div>
<div class="card-message">Тепло дома согреет весь год</div>
</div>
</div>
<!-- Карта 5 -->
<div class="tarot-card" onclick="flipCard(this)">
<div class="card-back"></div>
<div class="card-front">
<img src="https://upforme.ru/uploads/001b/ee/60/4/152877.png"
alt="Звезда" class="card-image">
<div class="card-name">ВИФЛЕЕМСКАЯ ЗВЕЗДА</div>
<div class="card-message">Мечта станет реальностью</div>
</div>
</div>
<!-- Карта 6 -->
<div class="tarot-card" onclick="flipCard(this)">
<div class="card-back"></div>
<div class="card-front">
<img src="https://upforme.ru/uploads/001b/ee/60/4/766331.png"
alt="Ангел" class="card-image">
<div class="card-name">АНГЕЛ-ХРАНИТЕЛЬ</div>
<div class="card-message">Защита всегда будет с вами</div>
</div>
</div>
</div>
<div class="footer">
<p>Нажмите на карту, чтобы узнать предсказание</p>
<p>Счастливого Рождества! 🎅</p>
</div>
</div><script>
// Функция переворота карты
function flipCard(card) {
// Если карта уже перевернута - возвращаем обратно
if (card.classList.contains('flipped')) {
card.classList.remove('flipped');
} else {
// Закрываем все другие карты
document.querySelectorAll('.tarot-card.flipped').forEach(otherCard => {
if (otherCard !== card) {
otherCard.classList.remove('flipped');
}
});
// Открываем выбранную карту
card.classList.add('flipped');
}
}// Создаем снег
function createSnow() {
const snowContainer = document.getElementById('snow');
for (let i = 0; i < 40; i++) {
const snowflake = document.createElement('div');
snowflake.className = 'snowflake';
const size = Math.random() * 5 + 2;
const left = Math.random() * 100;
const duration = Math.random() * 8 + 8;
const delay = Math.random() * 15;
snowflake.style.cssText = `
width: ${size}px;
height: ${size}px;
left: ${left}%;
top: -20px;
animation-duration: ${duration}s;
animation-delay: ${delay}s;
opacity: ${0.4 + Math.random() * 0.4};
`;
snowContainer.appendChild(snowflake);
}
}// Запускаем снег при загрузке
document.addEventListener('DOMContentLoaded', createSnow);// Закрытие карты при клике вне карты
document.addEventListener('click', function(event) {
if (!event.target.closest('.tarot-card')) {
document.querySelectorAll('.tarot-card.flipped').forEach(card => {
card.classList.remove('flipped');
});
}
});
</script>
</body>
</html>[/html]
Поделиться82025-12-27 19:48:09
[html]<style>
.holiday-card-2024 {
position: relative;
width: 800px;
max-width: 100%;
min-height: 500px;
background: linear-gradient(135deg, #0a2e38 0%, #1a3a4a 100%);
border-radius: 25px;
padding: 30px;
margin: 20px auto;
box-shadow:
0 20px 40px rgba(0, 0, 0, 0.6),
inset 0 0 0 2px #d4af37;
overflow: hidden;
font-family: 'Segoe UI', Tahoma, Geneva, sans-serif;
}/* Гирлянда сверху */
.garland {
position: absolute;
top: -10px;
left: 0;
width: 100%;
height: 50px;
overflow: hidden;
z-index: 10;
}.light {
position: absolute;
width: 20px;
height: 20px;
border-radius: 50%;
top: 10px;
animation: blink 3s infinite;
box-shadow:
0 0 10px currentColor,
0 0 20px currentColor;
}/* Цвета лампочек */
.light:nth-child(1) { left: 5%; background: #ff0000; animation-delay: 0s; }
.light:nth-child(2) { left: 15%; background: #00ff00; animation-delay: 0.3s; }
.light:nth-child(3) { left: 25%; background: #ffff00; animation-delay: 0.6s; }
.light:nth-child(4) { left: 35%; background: #ff00ff; animation-delay: 0.9s; }
.light:nth-child(5) { left: 45%; background: #00ffff; animation-delay: 1.2s; }
.light:nth-child(6) { left: 55%; background: #ff8800; animation-delay: 1.5s; }
.light:nth-child(7) { left: 65%; background: #ff0088; animation-delay: 1.8s; }
.light:nth-child(8) { left: 75%; background: #88ff00; animation-delay: 2.1s; }
.light:nth-child(9) { left: 85%; background: #0088ff; animation-delay: 2.4s; }
.light:nth-child(10) { left: 95%; background: #ff4444; animation-delay: 2.7s; }@keyframes blink {
0%, 100% { opacity: 0.3; transform: scale(0.8); }
50% { opacity: 1; transform: scale(1.2); }
}/* Провод гирлянды */
.wire {
position: absolute;
top: 20px;
left: 0;
width: 100%;
height: 2px;
background: linear-gradient(90deg,
transparent 0%,
#d4af37 10%,
#d4af37 90%,
transparent 100%);
box-shadow: 0 2px 5px rgba(0,0,0,0.5);
}/* Заголовок */
.holiday-title {
text-align: center;
color: #ffd700;
font-size: 2.8rem;
margin: 60px 0 40px;
text-shadow:
0 0 10px rgba(255, 215, 0, 0.5),
2px 2px 4px rgba(0, 0, 0, 0.7);
letter-spacing: 2px;
position: relative;
}.holiday-title::after {
content: '🎄';
position: absolute;
right: 10%;
top: 50%;
transform: translateY(-50%);
font-size: 2rem;
}.holiday-title::before {
content: '❄️';
position: absolute;
left: 10%;
top: 50%;
transform: translateY(-50%);
font-size: 2rem;
}/* Контейнер для фотографий */
.photo-display {
display: flex;
justify-content: center;
gap: 40px;
margin: 40px 0;
flex-wrap: wrap;
perspective: 1000px;
}/* Стиль для фото-рамок */
.photo-frame {
width: 300px;
height: 350px;
position: relative;
cursor: pointer;
transform-style: preserve-3d;
transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
border-radius: 15px;
overflow: hidden;
}.photo-frame:hover {
transform: rotateY(10deg) translateY(-15px);
}.photo-frame.active {
transform: rotateY(180deg) scale(1.05);
z-index: 5;
}/* Передняя сторона (обложка) */
.frame-front {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
border-radius: 15px;
background: linear-gradient(135deg, #8b0000, #4a0000);
border: 6px solid #d4af37;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
box-shadow:
inset 0 0 30px rgba(0, 0, 0, 0.7),
0 15px 25px rgba(0, 0, 0, 0.5);
overflow: hidden;
}.frame-front::before {
content: '✨';
font-size: 60px;
color: #ffd700;
opacity: 0.8;
margin-bottom: 20px;
animation: sparkle 2s infinite;
}@keyframes sparkle {
0%, 100% { opacity: 0.5; transform: scale(1); }
50% { opacity: 1; transform: scale(1.2); }
}.frame-front::after {
content: 'Нажми, чтобы открыть';
color: #ffd700;
font-size: 18px;
text-align: center;
padding: 0 20px;
text-shadow: 1px 1px 2px rgba(0,0,0,0.5);
}/* Задняя сторона (фото) */
.frame-back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
border-radius: 15px;
background: #fff;
transform: rotateY(180deg);
overflow: hidden;
border: 4px solid #d4af37;
}.photo {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s;
}.photo-frame:hover .photo {
transform: scale(1.05);
}/* Подпись под фото */
.photo-caption {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: rgba(10, 30, 40, 0.9);
color: #ffd700;
padding: 15px;
text-align: center;
font-size: 16px;
transform: translateY(100%);
transition: transform 0.3s;
border-top: 2px solid #d4af37;
}.photo-frame:hover .photo-caption {
transform: translateY(0);
}/* Текст поздравления */
.greeting-text {
background: rgba(255, 255, 255, 0.1);
border-radius: 20px;
padding: 30px;
margin-top: 40px;
border: 2px solid rgba(212, 175, 55, 0.5);
backdrop-filter: blur(5px);
color: #e6f7ff;
line-height: 1.6;
font-size: 18px;
text-align: center;
position: relative;
overflow: hidden;
}.greeting-text::before {
content: '🎅';
position: absolute;
top: 10px;
left: 20px;
font-size: 30px;
opacity: 0.5;
}.greeting-text::after {
content: '🦌';
position: absolute;
bottom: 10px;
right: 20px;
font-size: 30px;
opacity: 0.5;
}.greeting-text p {
margin-bottom: 15px;
}.greeting-text .highlight {
color: #ffd700;
font-weight: bold;
font-size: 20px;
}/* Подпись */
.signature {
text-align: right;
margin-top: 25px;
color: #ffd700;
font-style: italic;
font-size: 20px;
padding-right: 20px;
position: relative;
}.signature::before {
content: '~';
margin-right: 10px;
font-size: 24px;
}/* Снежинки */
.snowflakes {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 1;
}.snowflake {
position: absolute;
background: white;
border-radius: 50%;
animation: snowFall 15s linear infinite;
opacity: 0.7;
top: -10px;
}@keyframes snowFall {
0% {
transform: translateY(0) translateX(0) rotate(0deg);
opacity: 0.8;
}
100% {
transform: translateY(500px) translateX(100px) rotate(360deg);
opacity: 0;
}
}/* Создаем снежинки */
.snowflake:nth-child(1) { left: 10%; width: 4px; height: 4px; animation-duration: 12s; animation-delay: 0s; }
.snowflake:nth-child(2) { left: 20%; width: 6px; height: 6px; animation-duration: 10s; animation-delay: 1s; }
.snowflake:nth-child(3) { left: 30%; width: 5px; height: 5px; animation-duration: 14s; animation-delay: 2s; }
.snowflake:nth-child(4) { left: 40%; width: 7px; height: 7px; animation-duration: 9s; animation-delay: 3s; }
.snowflake:nth-child(5) { left: 50%; width: 4px; height: 4px; animation-duration: 13s; animation-delay: 4s; }
.snowflake:nth-child(6) { left: 60%; width: 6px; height: 6px; animation-duration: 11s; animation-delay: 5s; }
.snowflake:nth-child(7) { left: 70%; width: 5px; height: 5px; animation-duration: 15s; animation-delay: 6s; }
.snowflake:nth-child(8) { left: 80%; width: 8px; height: 8px; animation-duration: 8s; animation-delay: 7s; }
.snowflake:nth-child(9) { left: 90%; width: 4px; height: 4px; animation-duration: 12s; animation-delay: 8s; }/* Адаптивность */
@media (max-width: 850px) {
.holiday-card-2024 {
width: 95%;
padding: 20px;
}
.photo-frame {
width: 250px;
height: 300px;
}
.holiday-title {
font-size: 2.2rem;
margin: 50px 0 30px;
}
.greeting-text {
padding: 20px;
font-size: 16px;
}
}@media (max-width: 600px) {
.photo-display {
gap: 20px;
}
.photo-frame {
width: 200px;
height: 250px;
}
.holiday-title {
font-size: 1.8rem;
}
.frame-front::before {
font-size: 40px;
}
.frame-front::after {
font-size: 14px;
}
}@media (max-width: 480px) {
.photo-frame {
width: 150px;
height: 200px;
}
.holiday-title {
font-size: 1.5rem;
margin: 40px 0 20px;
}
.greeting-text {
font-size: 14px;
padding: 15px;
}
}
</style><div class="holiday-card-2024">
<!-- Гирлянда -->
<div class="garland">
<div class="wire"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
</div><!-- Снежинки -->
<div class="snowflakes">
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
</div><!-- Заголовок -->
<h1 class="holiday-title">Счастливого Рождества!</h1><!-- Фотографии -->
<div class="photo-display">
<!-- Фото 1 -->
<div class="photo-frame" onclick="this.classList.toggle('active')">
<div class="frame-front"></div>
<div class="frame-back">
<img src="https://upforme.ru/uploads/001b/ee/60/4/195143.png"
alt="Рождественский ужин" class="photo">
<div class="photo-caption">Теплый семейный вечер</div>
</div>
</div><!-- Фото 2 -->
<div class="photo-frame" onclick="this.classList.toggle('active')">
<div class="frame-front"></div>
<div class="frame-back">
<img src="https://upforme.ru/uploads/001b/ee/60/4/49762.png"
alt="Рождественские подарки" class="photo">
<div class="photo-caption">Волшебные подарки</div>
</div>
</div>
</div><!-- Текст поздравления -->
<div class="greeting-text">
<p>В этот светлый праздник Рождества</p>
<p class="highlight">Пусть ангелы хранят ваш дом от зла,</p>
<p>Пусть в сердце будет радость и покой,</p>
<p>А жизнь наполнится любовью и теплом!</p>
<p>Пусть каждый день дарит улыбки и удачу,</p>
<p>А рождественское чудо коснется плеча!</p>
<div class="signature">С любовью и наилучшими пожеланиями!</div>
</div>
</div>[/html]
Поделиться92025-12-27 20:35:06
[html]<style>
.holiday-card-2024 {
position: relative;
width: 800px;
max-width: 100%;
background: url('https://i.pinimg.com/1200x/09/0f/a6/090fa65c96f052d3cd9a8a5396f1bf60.jpg') center/cover no-repeat;
border-radius: 25px;
padding: 40px;
margin: 0px auto;
overflow: hidden;
}/* Гирлянда сверху */
.garland {
position: absolute;
top: 5px;
left: 0;
width: 100%;
height: 50px;
overflow: hidden;
z-index: 10;
}.light {
position: absolute;
width: 20px;
height: 20px;
border-radius: 50%;
top: 10px;
animation: blink 3s infinite;
box-shadow:
0 0 10px currentColor,
0 0 20px currentColor;
}/* Цвета лампочек */
/* Теплая палитра */
.garland .light:nth-child(1) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(2) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(3) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(4) { background: #ffff00; box-shadow: 0 0 15px #ffff00, 0 0 30px #ffff00; }
.garland .light:nth-child(5) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(6) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(7) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }.garland .light:nth-child(11) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(12) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(9) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(13) { background: #ffff00; box-shadow: 0 0 15px #ffff00, 0 0 30px #ffff00; }
.garland .light:nth-child(8) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(14) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(10) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }.garland .light:nth-child(20) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(16) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(19) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(4) { background: #ffff00; box-shadow: 0 0 15px #ffff00, 0 0 30px #ffff00; }
.garland .light:nth-child(15) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(18) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(17) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }/* Автоматическая расстановка 20 лампочек */
.garland .light:nth-child(1) { left: 2.5%; animation-delay: 0s; }
.garland .light:nth-child(2) { left: 7.5%; animation-delay: 0.15s; }
.garland .light:nth-child(3) { left: 12.5%; animation-delay: 0.3s; }
.garland .light:nth-child(4) { left: 17.5%; animation-delay: 0.45s; }
.garland .light:nth-child(5) { left: 22.5%; animation-delay: 0.6s; }
.garland .light:nth-child(6) { left: 27.5%; animation-delay: 0.75s; }
.garland .light:nth-child(7) { left: 32.5%; animation-delay: 0.9s; }
.garland .light:nth-child(8) { left: 37.5%; animation-delay: 1.05s; }
.garland .light:nth-child(9) { left: 42.5%; animation-delay: 1.2s; }
.garland .light:nth-child(10) { left: 47.5%; animation-delay: 1.35s; }
.garland .light:nth-child(11) { left: 52.5%; animation-delay: 1.5s; }
.garland .light:nth-child(12) { left: 57.5%; animation-delay: 1.65s; }
.garland .light:nth-child(13) { left: 62.5%; animation-delay: 1.8s; }
.garland .light:nth-child(14) { left: 67.5%; animation-delay: 1.95s; }
.garland .light:nth-child(15) { left: 72.5%; animation-delay: 2.1s; }
.garland .light:nth-child(16) { left: 77.5%; animation-delay: 2.25s; }
.garland .light:nth-child(17) { left: 82.5%; animation-delay: 2.4s; }
.garland .light:nth-child(18) { left: 87.5%; animation-delay: 2.55s; }
.garland .light:nth-child(19) { left: 92.5%; animation-delay: 2.7s; }
.garland .light:nth-child(20) { left: 97.5%; animation-delay: 2.85s; }@keyframes blink {
0%, 100% { opacity: 0.3; transform: scale(0.8); }
50% { opacity: 1; transform: scale(1.2); }
}/* Провод гирлянды */
.wire {
position: absolute;
top: 20px;
left: 0;
width: 100%;
height: 2px;
background: linear-gradient(90deg,
transparent 0%,
#d4af37 10%,
#d4af37 90%,
transparent 100%);
box-shadow: 0 2px 5px rgba(0,0,0,0.5);
}/* Контейнер для фотографий - УПРОЩЕННЫЙ ВАРИАНТ */
.photo-display {
display: flex;
justify-content: center;
gap: 40px;
margin: 10px 0;
flex-wrap: wrap;
}/* Стиль для фото-рамок - БЕЗ ПЕРЕВОРОТА */
.photo-frame {
width: 300px;
height: 350px;
position: relative;
cursor: pointer;
border-radius: 15px;
transition: transform 0.5s ease, box-shadow 0.5s ease;
}.photo-frame:hover {
transform: translateY(-10px) scale(1.02);
box-shadow:
0 15px 30px rgba(0, 0, 0, 0.5),
0 0 30px rgba(212, 175, 55, 0.3);
}/* Закрытое состояние - рубашка с эффектом свечения */
.frame-cover {
position: absolute;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #734c35e2, #2d3c3dcd);
border-radius: 12px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
z-index: 2;
}.frame-cover::before {
content: '';
position: absolute;
width: 0;
height: 0;
background: radial-gradient(circle, #2b8ab3e2 0%, transparent 70%);
border-radius: 50%;
transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
opacity: 0.8;
}.frame-cover.active::before {
width: 600px;
height: 600px;
animation: colorSpread 0.8s forwards;
}@keyframes colorSpread {
0% {
transform: scale(0);
opacity: 0.8;
}
100% {
transform: scale(1);
opacity: 0;
}
}.cover-icon {
font-size: 50px;
color: #ffd700;
margin-bottom: 0px;
opacity: 0.9;
transition: transform 0.3s;
}.photo-frame:hover .cover-icon {
transform: scale(1.1);
}.cover-text {
color: #f2dfc9;
font-size: 18px;
text-align: center;
padding: 0 20px;
text-shadow: 1px 1px 2px rgba(0,0,0,0.5);
}/* Открытое состояние - фото */
.photo-content {
position: absolute;
width: 100%;
height: 100%;
background: #fff;
border-radius: 12px;
overflow: hidden;
opacity: 0;
transform: scale(0.9);
transition: opacity 0.5s 0.3s, transform 0.5s 0.3s;
z-index: 1;
}.frame-cover.active {
opacity: 0;
pointer-events: none;
}.frame-cover.active + .photo-content {
opacity: 1;
transform: scale(1);
}.photo {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s;
}.photo-caption {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: #131712e2;
color: #f5af5bc4;
padding: 15px;
text-align: center;
font-size: 16px;
transform: translateY(100%);
transition: transform 0.3s;
border-top: 2px solid #131712e2;
}.photo-content:hover .photo-caption {
transform: translateY(0);
}/* Текст поздравления */
/* Подпись */
.signature {
text-align: right;
margin-top: 5px;
color: #ffd700;
font-style: italic;
font-size: 20px;
padding-right: 20px;
position: relative;
}.signature::before {
content: '~';
margin-right: 10px;
font-size: 24px;
}/* Снежинки */
.snowflakes {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 1;
}.snowflake {
position: absolute;
background: white;
border-radius: 50%;
animation: snowFall 15s linear infinite;
opacity: 0.7;
top: -10px;
}@keyframes snowFall {
0% {
transform: translateY(0) translateX(0) rotate(0deg);
opacity: 0.8;
}
100% {
transform: translateY(500px) translateX(100px) rotate(360deg);
opacity: 0;
}
}/* Создаем снежинки */
.snowflake:nth-child(1) { left: 10%; width: 4px; height: 4px; animation-duration: 12s; animation-delay: 0s; }
.snowflake:nth-child(2) { left: 20%; width: 6px; height: 6px; animation-duration: 10s; animation-delay: 1s; }
.snowflake:nth-child(3) { left: 30%; width: 5px; height: 5px; animation-duration: 14s; animation-delay: 2s; }
.snowflake:nth-child(4) { left: 40%; width: 7px; height: 7px; animation-duration: 9s; animation-delay: 3s; }
.snowflake:nth-child(5) { left: 50%; width: 4px; height: 4px; animation-duration: 13s; animation-delay: 4s; }
.snowflake:nth-child(6) { left: 60%; width: 6px; height: 6px; animation-duration: 11s; animation-delay: 5s; }
.snowflake:nth-child(7) { left: 70%; width: 5px; height: 5px; animation-duration: 15s; animation-delay: 6s; }
.snowflake:nth-child(8) { left: 80%; width: 8px; height: 8px; animation-duration: 8s; animation-delay: 7s; }
.snowflake:nth-child(9) { left: 90%; width: 4px; height: 4px; animation-duration: 12s; animation-delay: 8s; }/* Адаптивность */
@media (max-width: 850px) {
.holiday-card-2024 {
width: 95%;
padding: 10px;
}
.photo-frame {
width: 250px;
height: 300px;
}
.holiday-title {
font-size: 2.2rem;
margin:10px 0 0px;
}
.greeting-text {
padding: 20px;
font-size: 16px;
}
.cover-icon {
font-size: 40px;
}
.cover-text {
font-size: 16px;
}
}@media (max-width: 600px) {
.photo-display {
gap: 20px;
}
.photo-frame {
width: 200px;
height: 250px;
}
.holiday-title {
font-size: 1.8rem;
}
.cover-icon {
font-size: 35px;
}
.cover-text {
font-size: 14px;
}
}@media (max-width: 480px) {
.photo-frame {
width: 150px;
height: 200px;
}
.holiday-title {
font-size: 1.5rem;
margin: 10px 0 10px;
}
.greeting-text {
font-size: 14px;
padding: 15px;
}
.cover-icon {
font-size: 30px;
margin-bottom: 10px;
}
.cover-text {
font-size: 12px;
}
}
</style><div class="holiday-card-2024">
<div class="garland">
<div class="wire"></div>
<!-- Добавьте столько лампочек, сколько нужно -->
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<!-- Еще 10 лампочек -->
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div></div>
<!-- Снежинки -->
<div class="snowflakes">
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
</div><!-- Заголовок -->
<h1 class="holiday-title">Счастливого Рождества!</h1><!-- Фотографии -->
<div class="photo-display">
<!-- Фото 1 -->
<div class="photo-frame">
<div class="frame-cover" onclick="this.classList.toggle('active')">
<div class="cover-icon">✨</div>
<div class="cover-text">Нажми, чтобы увидеть<br>рождественское чудо</div>
</div>
<div class="photo-content">
<img src="https://upforme.ru/uploads/001b/ee/60/4/49762.png"
alt="Рождественский ужин" class="photo">
<div class="photo-caption">Игристое шампанское</div>
</div>
</div><!-- Фото 2 -->
<div class="photo-frame">
<div class="frame-cover" onclick="this.classList.toggle('active')">
<div class="cover-icon">🎁</div>
<div class="cover-text">Нажми, чтобы открыть<br>рождественский подарок</div>
</div>
<div class="photo-content">
<img src="https://upforme.ru/uploads/001b/ee/60/4/195143.png"
alt="Рождественские подарки" class="photo">
<div class="photo-caption">Волшебное рождество</div>
</div>
</div>
</div>
</div>[/html]
Поделиться102025-12-27 21:07:37
[hideprofile]
моему личному солнцу
@Neil Holt
[html]
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}.card-container {
width: 100%;
max-width: 1200px;
background: rgba(10, 30, 40, 0.85);
border-radius: 25px;
padding: 40px;
position: relative;
border: 5px solid #000;
overflow: hidden;
}/* Декоративные еловые ветки */
.decoration {
position: absolute;
z-index: 1;
pointer-events: none;
}.decoration-1 {
top: -20px;
left: -15px;
width: 250px;
}.decoration-2 {
bottom: -20px;
right: -20px;
width: 200px;
}.decoration-3 {
top: 50%;
left: -30px;width: 150px;
}.decoration-4 {
top: 50%;
right: -30px;
transform: translateY(-50%) rotate(-90deg);
width: 150px;
}/* Контент */
.card-content {
position: relative;
z-index: 2;
}.images-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 25px;
margin-bottom: 40px;
}.image-frame {
width: 220px;
height: 220px;
position: relative;
border-radius: 15px;
overflow: hidden;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
transition: transform 0.5s ease;
background: #152638ee;
display: flex;
justify-content: center;
align-items: center;
}.image-frame:hover {
transform: scale(1.1);
z-index: 10;
}.image-frame img {
width: 90%;
height: 90%;
object-fit: cover;
border-radius: 10px;
position: relative;
z-index: 1;
}/* Повороты */
.frame-1 { transform: rotate(-5deg); }
.frame-1:hover { transform: rotate(-5deg) scale(1.1); }
.frame-2 { transform: rotate(2deg); }
.frame-2:hover { transform: rotate(2deg) scale(1.1); }
.frame-3 { transform: rotate(-3deg); }
.frame-3:hover { transform: rotate(-3deg) scale(1.1); }
.frame-4 { transform: rotate(4deg); }
.frame-4:hover { transform: rotate(4deg) scale(1.1); }
.frame-5 { transform: rotate(-2deg); }
.frame-5:hover { transform: rotate(-2deg) scale(1.1); }/* Украшение рамок */
.frame-decoration {
position: absolute;
width: 30px;
height: 30px;
z-index: 2;
opacity: 0.8;
}.top-left { top: 8px; left: 8px; }
.top-right { top: 8px; right: 8px; }
.bottom-left { bottom: 8px; left: 8px; }
.bottom-right { bottom: 8px; right: 8px; }/* Текст */
.greeting-text {
background: #57785c1a;
border-radius: 20px;
padding: 30px;
margin-top: 30px;
border: 2px solid #00000075;
backdrop-filter: blur(5px);
color: #85cf99;
}.signature {
text-align: right;
margin-top: 10px;
font-style: italic;
font-family: Sunday;
color: #ffaa2a;
}
</style><style>
/* СТИЛИ ДЛЯ СНЕГА - ДОБАВЬТЕ ЭТО В ВАШ CSS */
.snow-container {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 5;
overflow: hidden;
}
.snowflake {
position: absolute;
background: white;
border-radius: 50%;
top: -10px;
opacity: 0.8;
animation: snowFallIndividual linear infinite;
box-shadow: 0 0 3px white;
}
@keyframes snowFallIndividual {
0% {
transform: translateY(-10px) translateX(0);
opacity: 0.8;
}
100% {
transform: translateY(100vh) translateX(50px);
opacity: 0;
}
}
</style><div class="card-container">
<!-- Еловые ветки -->
<img src="https://cdn-icons-png.flaticon.com/512/2508/2508203.png" alt="Еловая ветка" class="decoration decoration-1">
<img src="https://cdn-icons-png.flaticon.com/512/3835/3835818.png" alt="Еловая ветка" class="decoration decoration-2">
<img src="https://cdn-icons-png.flaticon.com/512/16775/16775136.png" alt="Еловая ветка" class="decoration decoration-3">
<img src="https://cdn-icons-png.flaticon.com/512/6278/6278313.png" alt="Еловая ветка" class="decoration decoration-4"><!-- Снег БЕЗ JavaScript -->
<div class="snow-container">
<!-- 20 снежинок, созданных через HTML -->
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
</div><div class="card-content">
<div class="images-container">
<!-- 5 фото -->
<div class="image-frame frame-1">
<div class="frame-decoration top-left">❄️</div>
<img src="https://upforme.ru/uploads/001b/ee/60/4/80567.png" alt="Новогоднее фото 1">
</div>
<div class="image-frame frame-2">
<div class="frame-decoration top-right">❄️</div>
<img src="https://upforme.ru/uploads/001b/ee/60/4/867155.png" alt="Новогоднее фото 2">
</div>
<div class="image-frame frame-3">
<div class="frame-decoration bottom-right">❄️</div>
<img src="https://upforme.ru/uploads/001b/ee/60/4/122288.jpg" alt="Новогоднее фото 3">
</div>
<div class="greeting-text">
<table>
<tr>
<td>Кай и Нил, пусть Новый год как тик-ток<br>
Лишь веселье, драйв и смех несёт,<br>
Чтоб в ленте жизни — только хайп и лайки,<br>
И чтоб хейтеры сторонкой обошли</td>
<td>Пусть любовь ваша — как топовый сериал,<br>
Где сюжет крут, а хэппи-енд — навек,<br>
И каждый день как новая серия,<br>
Что дарит радость, страсть и человек.
</td>
</tr>
</table>
<div class="signature">С новым годом от целовательного Кая!</div>
</div>
</div>
</div><!-- СКРИПТ ДЛЯ СНЕГА - ДОБАВЬТЕ ЭТО ПОСЛЕ ОТКРЫТКИ -->
<script>
// Простой скрипт для создания снежинок
(function() {
// Ждем немного чтобы все загрузилось
setTimeout(function() {
const snowContainer = document.querySelector('.snow-container');
if (!snowContainer) {
console.error('Не найден .snow-container');
return;
}
// Очищаем если что-то есть
snowContainer.innerHTML = '';
// Создаем 60 снежинок (можно изменить количество)
for (let i = 0; i < 60; i++) {
const snowflake = document.createElement('div');
snowflake.className = 'snowflake';
// Случайные параметры
const left = Math.random() * 100; // 0-100%
const size = Math.random() * 6 + 3; // 3-9px
const duration = Math.random() * 10 + 5; // 5-15 секунд
const delay = Math.random() * 20; // 0-20 секунд
const opacity = 0.5 + Math.random() * 0.5; // 0.5-1
// Применяем стили
snowflake.style.left = left + '%';
snowflake.style.width = size + 'px';
snowflake.style.height = size + 'px';
snowflake.style.animationDuration = duration + 's';
snowflake.style.animationDelay = delay + 's';
snowflake.style.opacity = opacity;
snowContainer.appendChild(snowflake);
}
console.log('Снег создан: ' + snowContainer.children.length + ' снежинок');
}, 100);
})();
</script>
[/html]
Поделиться112025-12-27 21:08:00
@Glenn Gordon с праздником тебя!
Пусть все идеи воплощаются и радуют сердечко)
от скромника Кая
[html]<div class="gothic-christmas-card">
<div class="card-background"></div>
<div class="decoration left"></div>
<div class="decoration right"></div>
<div class="image-card second">
<img src="https://upforme.ru/uploads/001b/ee/60/4/795286.png" >
</div>
<div class="image-card first">
<img src="https://upforme.ru/uploads/001b/ee/60/4/721902.png" >
</div>
</div>
<style>
.gothic-christmas-card {
position: relative;
width: 600px;
height: 400px;
margin: 20px auto;
overflow: hidden;
font-family: 'Times New Roman', serif;
}
.card-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url('https://i.pinimg.com/originals/5a/08/b3/5a08b3b4baffe5e8dd04d1e90b6249fc.gif') center/cover no-repeat;
filter: brightness(0.8);
}
.decoration {
position: absolute;
width: 80px;
height: 100%;
background-repeat: repeat-y;
opacity: 0.7;
z-index: 2;
}
.decoration.left {
left: 0;
background: left top;
}
.decoration.right {
right: 0;
background: right top;
}
.image-card {
position: absolute;
width: 280px;
height: 220px;
border-radius: 12px;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3);
overflow: hidden;
transform: rotate(-5deg);
transition: transform 0.3s ease;
}
.image-card img {
width: 100%;
height: 100%;
object-fit: cover;
}
.image-card.first {
top: 100px;
left: 80px;
}
.image-card.second {
top: 120px;
right: 80px;
transform: rotate(7deg);
}
.image-card:hover {
transform: scale(1.05) rotate(0deg);
z-index: 3;
}
</style>
<div class="christmas-card">
<div class="card-background"></div>
<div class="decoration left-decoration"></div>
<div class="decoration right-decoration"></div>
<div class="main-image-container">
<img src="https://upforme.ru/uploads/001b/ee/60/4/146500.png" class="main-image">
</div>
</div>
<style>
.christmas-card {
position: relative;
width: 600px;
height: 400px;
margin: 20px auto;
overflow: hidden;
border-radius: 15px;
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2);
}
.card-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url('https://i.pinimg.com/originals/9c/1a/59/9c1a595d7d7a2774150240668dc0cdce.gif') center/cover no-repeat;
filter: brightness(0.7) saturate(1.2);
}
.decoration {
position: absolute;
width: 60px;
height: 100%;
z-index: 2;
}
.left-decoration {
left: 0;
background: url('https://example.com/left-fir-branch.png') left top / contain no-repeat;
}
.right-decoration {
right: 0;
background: url('https://example.com/right-fir-branch.png') right top / contain no-repeat;
}
.main-image-container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) rotate(-5deg);
width: 70%;
height: 70%;
border-radius: 12px;
overflow: hidden;
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.3);
z-index: 3;
transition: transform 0.4s ease, box-shadow 0.4s ease;
}
.main-image-container:hover {
transform: translate(-50%, -50%) scale(1.05);
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.4);
}
.main-image {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* Адаптивность для мобильных */
@media (max-width: 768px) {
.christmas-card {
width: 95%;
height: auto;
padding-top: 66.67%; /* соотношение 3:2 */
}
.main-image-container {
width: 80%;
height: 80%;
}
.decoration {
width: 40px;
}
}
</style>
[/html]
Поделиться122025-12-27 21:08:21
[html]
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body1 {
font-family: 'Georgia', serif;
background: linear-gradient(135deg, #1a0f0f 0%, #2c1810 100%);
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
}
/* Подложка */
.card-container {
position: relative;
width: 100%;
background: url('https://upforme.ru/uploads/001b/ee/60/4/33609.png') #c9ffe0 ;
background-repeat: repeat;
border-radius: 30px;
box-shadow: 0 30px 60px rgba(0, 0, 0, 0.8);
border: 15px solid #282e2b;
padding: 10px;
display: flex;
flex-direction: column;
align-items: center;
overflow: hidden;
}
/* Заголовок */
.title2 {
text-align: center;
margin-bottom: 10px;
color: #8affd4;
text-shadow: 3px 3px 5px rgba(0, 0, 0, 0.7);
font-size: 3rem;
font-family: 'Cinzel', serif;
padding: 10px;
border-bottom: 2px solid #1a4a2f;
width: 100%;
}
/* Контейнер для карт */
.cards-spread {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 20px;
max-width: 1200px;
margin: 0 auto;
position: relative;
z-index: 2;
}
/* Стиль карты */
.tarot-card {
width: 180px;
height: 280px;
cursor: pointer;
transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
transform-style: preserve-3d;
border-radius: 12px;
position: relative;
transform-origin: center center;
}
/* Лицевая и обратная стороны */
.card-front,
.card-back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
border-radius: 12px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 15px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
}
/* Рубашка карты */
.card-back {
background: linear-gradient(135deg, #2a6945 0%, #193324 100%);
border: 4px solid #282e2b;
transform: rotateY(0deg);
}
.card-back::before {
content: '❄';
font-size: 60px;
color: #8affd4;
opacity: 0.7;
margin-bottom: 10px;
}
.card-back::after {
content: 'Нажмите';
position: absolute;
bottom: 20px;
color: #8affd4;
font-size: 14px;
opacity: 0.8;
}
/* Лицевая сторона */
.card-front {
background: #588a6e;
transform: rotateY(180deg);
border: 3px solid #282e2b;
overflow: hidden;
}
.card-image {
width: 100%;
height: 65%;
object-fit: cover;
border-radius: 8px;
margin-bottom: 10px;
border: 2px solid #5d4037;
}
.card-name {
font-size: 16px;
color: #282e2b;
text-align: center;
font-weight: bold;
margin-bottom: 8px;
font-family: Caveat;
}
.card-message {
font-size: 9px;
color: #282e2b;
text-align: center;
line-height: 1.3;
}
/* Анимация при наведении */
.tarot-card:hover {
transform: translateY(-20px) scale(1.05);
z-index: 10;
}
/* Анимация переворота */
.tarot-card.flipped {
transform: rotateY(180deg) translateY(-40px) scale(1.1);
z-index: 20 !important;
}
/* Подпись */
.footer {
margin-top: 10px;
text-align: center;
color: #8affd4;
font-size: 18px;
font-family: 'Cinzel', serif;
padding: 10px;
border-top: 2px solid #1a4a2f;
width: 100%;
}
/* Декоративные снежинки */
.snowflake {
position: absolute;
background: white;
border-radius: 50%;
opacity: 0.8;
animation: fall linear infinite;
pointer-events: none;
z-index: 1;
}
@keyframes fall {
0% { transform: translateY(-100px) translateX(0); }
100% { transform: translateY(1000px) translateX(100px); opacity: 0; }
}
/* Адаптивность */
@media (max-width: 1200px) {
.cards-spread {
max-width: 900px;
}
.tarot-card {
width: 150px;
height: 230px;
}
}
@media (max-width: 768px) {
.cards-spread {
gap: 15px;
}
.tarot-card {
width: 130px;
height: 200px;
}
.title {
font-size: 2rem;
}
.card-container {
padding: 20px;
}
}
@media (max-width: 480px) {
.cards-spread {
gap: 10px;
}
.tarot-card {
width: 110px;
height: 170px;
}
.card-back::before {
font-size: 40px;
}
.card-name {
font-size: 14px;
}
}
</style>
<link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&display=swap" rel="stylesheet">
</head>
<body>
<div class="card-container">
<!-- Снег -->
<div id="snow"></div>
<div class="title2">🎄 Предсказания 🎄</div>
<br>
<div class="cards-spread">
<!-- Карта 3 -->
<div class="tarot-card" onclick="flipCard(this)">
<div class="card-back"></div>
<div class="card-front">
<img src="https://upforme.ru/uploads/001b/ee/60/4/748620.png"
alt="Свечи" class="card-image">
<div class="card-name">НЕОЖИДАННОЕ СЧАСТЬЕ</div>
<div class="card-message">прямо в руки упадет желанный подарок</div>
</div>
</div>
<!-- Карта 4 -->
<div class="tarot-card" onclick="flipCard(this)">
<div class="card-back"></div>
<div class="card-front">
<img src="https://upforme.ru/uploads/001b/ee/60/4/967020.png"
alt="Ужин" class="card-image">
<div class="card-name">СЕМЕЙНЫЙ ОЧАГ</div>
<div class="card-message">Тепло дома согреет весь год</div>
</div>
</div>
<!-- Карта 5 -->
<div class="tarot-card" onclick="flipCard(this)">
<div class="card-back"></div>
<div class="card-front">
<img src="https://upforme.ru/uploads/001b/ee/60/4/152877.png"
alt="Звезда" class="card-image">
<div class="card-name">ВИФЛЕЕМСКАЯ ЗВЕЗДА</div>
<div class="card-message">Мечта станет реальностью</div>
</div>
</div>
<!-- Карта 6 -->
<div class="tarot-card" onclick="flipCard(this)">
<div class="card-back"></div>
<div class="card-front">
<img src="https://upforme.ru/uploads/001b/ee/60/4/766331.png"
alt="Ангел" class="card-image">
<div class="card-name">АНГЕЛ-ХРАНИТЕЛЬ</div>
<div class="card-message">Все невзгоды закроет собой</div>
</div>
</div>
</div>
<div class="footer">
<p>Нажмите на карту, чтобы узнать предсказание</p>
<p>HAPPY NEW YEAR!!</p>
</div>
</div>
<script>
// Функция переворота карты
function flipCard(card) {
// Если карта уже перевернута - возвращаем обратно
if (card.classList.contains('flipped')) {
card.classList.remove('flipped');
} else {
// Закрываем все другие карты
document.querySelectorAll('.tarot-card.flipped').forEach(otherCard => {
if (otherCard !== card) {
otherCard.classList.remove('flipped');
}
});
// Открываем выбранную карту
card.classList.add('flipped');
}
}
// Создаем снег
function createSnow() {
const snowContainer = document.getElementById('snow');
for (let i = 0; i < 40; i++) {
const snowflake = document.createElement('div');
snowflake.className = 'snowflake';
const size = Math.random() * 5 + 2;
const left = Math.random() * 100;
const duration = Math.random() * 8 + 8;
const delay = Math.random() * 15;
snowflake.style.cssText = `
width: ${size}px;
height: ${size}px;
left: ${left}%;
top: -20px;
animation-duration: ${duration}s;
animation-delay: ${delay}s;
opacity: ${0.4 + Math.random() * 0.4};
`;
snowContainer.appendChild(snowflake);
}
}
// Запускаем снег при загрузке
document.addEventListener('DOMContentLoaded', createSnow);
// Закрытие карты при клике вне карты
document.addEventListener('click', function(event) {
if (!event.target.closest('.tarot-card')) {
document.querySelectorAll('.tarot-card.flipped').forEach(card => {
card.classList.remove('flipped');
});
}
});
</script>
[/html]
Поделиться132025-12-27 21:08:32
[html]<style>
.holiday-card-2024 {
position: relative;
width: 800px;
max-width: 100%;
background: url('https://i.pinimg.com/1200x/09/0f/a6/090fa65c96f052d3cd9a8a5396f1bf60.jpg') center/cover no-repeat;
border-radius: 25px;
padding: 40px;
margin: 0px auto;
overflow: hidden;
}
/* Гирлянда сверху */
.garland {
position: absolute;
top: 5px;
left: 0;
width: 100%;
height: 50px;
overflow: hidden;
z-index: 10;
}
.light {
position: absolute;
width: 20px;
height: 20px;
border-radius: 50%;
top: 10px;
animation: blink 3s infinite;
box-shadow:
0 0 10px currentColor,
0 0 20px currentColor;
}
/* Цвета лампочек */
/* Теплая палитра */
.garland .light:nth-child(1) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(2) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(3) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(4) { background: #ffff00; box-shadow: 0 0 15px #ffff00, 0 0 30px #ffff00; }
.garland .light:nth-child(5) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(6) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(7) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(11) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(12) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(9) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(13) { background: #ffff00; box-shadow: 0 0 15px #ffff00, 0 0 30px #ffff00; }
.garland .light:nth-child(8) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(14) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(10) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(20) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(16) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(19) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
.garland .light:nth-child(4) { background: #ffff00; box-shadow: 0 0 15px #ffff00, 0 0 30px #ffff00; }
.garland .light:nth-child(15) { background: #ff8c00; box-shadow: 0 0 15px #ff8c00, 0 0 30px #ff8c00; }
.garland .light:nth-child(18) { background: #ffa500; box-shadow: 0 0 15px #ffa500, 0 0 30px #ffa500; }
.garland .light:nth-child(17) { background: #ffd700; box-shadow: 0 0 15px #ffd700, 0 0 30px #ffd700; }
/* Автоматическая расстановка 20 лампочек */
.garland .light:nth-child(1) { left: 2.5%; animation-delay: 0s; }
.garland .light:nth-child(2) { left: 7.5%; animation-delay: 0.15s; }
.garland .light:nth-child(3) { left: 12.5%; animation-delay: 0.3s; }
.garland .light:nth-child(4) { left: 17.5%; animation-delay: 0.45s; }
.garland .light:nth-child(5) { left: 22.5%; animation-delay: 0.6s; }
.garland .light:nth-child(6) { left: 27.5%; animation-delay: 0.75s; }
.garland .light:nth-child(7) { left: 32.5%; animation-delay: 0.9s; }
.garland .light:nth-child(8) { left: 37.5%; animation-delay: 1.05s; }
.garland .light:nth-child(9) { left: 42.5%; animation-delay: 1.2s; }
.garland .light:nth-child(10) { left: 47.5%; animation-delay: 1.35s; }
.garland .light:nth-child(11) { left: 52.5%; animation-delay: 1.5s; }
.garland .light:nth-child(12) { left: 57.5%; animation-delay: 1.65s; }
.garland .light:nth-child(13) { left: 62.5%; animation-delay: 1.8s; }
.garland .light:nth-child(14) { left: 67.5%; animation-delay: 1.95s; }
.garland .light:nth-child(15) { left: 72.5%; animation-delay: 2.1s; }
.garland .light:nth-child(16) { left: 77.5%; animation-delay: 2.25s; }
.garland .light:nth-child(17) { left: 82.5%; animation-delay: 2.4s; }
.garland .light:nth-child(18) { left: 87.5%; animation-delay: 2.55s; }
.garland .light:nth-child(19) { left: 92.5%; animation-delay: 2.7s; }
.garland .light:nth-child(20) { left: 97.5%; animation-delay: 2.85s; }
@keyframes blink {
0%, 100% { opacity: 0.3; transform: scale(0.8); }
50% { opacity: 1; transform: scale(1.2); }
}
/* Провод гирлянды */
.wire {
position: absolute;
top: 20px;
left: 0;
width: 100%;
height: 2px;
background: linear-gradient(90deg,
transparent 0%,
#d4af37 10%,
#d4af37 90%,
transparent 100%);
box-shadow: 0 2px 5px rgba(0,0,0,0.5);
}
/* Контейнер для фотографий - УПРОЩЕННЫЙ ВАРИАНТ */
.photo-display {
display: flex;
justify-content: center;
gap: 40px;
margin: 10px 0;
flex-wrap: wrap;
}
/* Стиль для фото-рамок - БЕЗ ПЕРЕВОРОТА */
.photo-frame {
width: 300px;
height: 350px;
position: relative;
cursor: pointer;
border-radius: 15px;
transition: transform 0.5s ease, box-shadow 0.5s ease;
}
.photo-frame:hover {
transform: translateY(-10px) scale(1.02);
box-shadow:
0 15px 30px rgba(0, 0, 0, 0.5),
0 0 30px rgba(212, 175, 55, 0.3);
}
/* Закрытое состояние - рубашка с эффектом свечения */
.frame-cover {
position: absolute;
width: 100%;
height: 100%;
background: linear-gradient(135deg, #734c35e2, #2d3c3dcd);
border-radius: 12px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
z-index: 2;
}
.frame-cover::before {
content: '';
position: absolute;
width: 0;
height: 0;
background: radial-gradient(circle, #2b8ab3e2 0%, transparent 70%);
border-radius: 50%;
transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1);
opacity: 0.8;
}
.frame-cover.active::before {
width: 600px;
height: 600px;
animation: colorSpread 0.8s forwards;
}
@keyframes colorSpread {
0% {
transform: scale(0);
opacity: 0.8;
}
100% {
transform: scale(1);
opacity: 0;
}
}
.cover-icon {
font-size: 50px;
color: #ffd700;
margin-bottom: 0px;
opacity: 0.9;
transition: transform 0.3s;
}
.photo-frame:hover .cover-icon {
transform: scale(1.1);
}
.cover-text {
color: #f2dfc9;
font-size: 18px;
text-align: center;
padding: 0 20px;
text-shadow: 1px 1px 2px rgba(0,0,0,0.5);
}
/* Открытое состояние - фото */
.photo-content {
position: absolute;
width: 100%;
height: 100%;
background: #fff;
border-radius: 12px;
overflow: hidden;
opacity: 0;
transform: scale(0.9);
transition: opacity 0.5s 0.3s, transform 0.5s 0.3s;
z-index: 1;
}
.frame-cover.active {
opacity: 0;
pointer-events: none;
}
.frame-cover.active + .photo-content {
opacity: 1;
transform: scale(1);
}
.photo {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s;
}
.photo-caption {
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: #131712e2;
color: #f5af5bc4;
padding: 15px;
text-align: center;
font-size: 16px;
transform: translateY(100%);
transition: transform 0.3s;
border-top: 2px solid #131712e2;
}
.photo-content:hover .photo-caption {
transform: translateY(0);
}
/* Текст поздравления */
/* Подпись */
.signature {
text-align: right;
margin-top: 5px;
color: #ffd700;
font-style: italic;
font-size: 20px;
padding-right: 20px;
position: relative;
}
.signature::before {
content: '~';
margin-right: 10px;
font-size: 24px;
}
/* Снежинки */
.snowflakes {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 1;
}
.snowflake {
position: absolute;
background: white;
border-radius: 50%;
animation: snowFall 15s linear infinite;
opacity: 0.7;
top: -10px;
}
@keyframes snowFall {
0% {
transform: translateY(0) translateX(0) rotate(0deg);
opacity: 0.8;
}
100% {
transform: translateY(500px) translateX(100px) rotate(360deg);
opacity: 0;
}
}
/* Создаем снежинки */
.snowflake:nth-child(1) { left: 10%; width: 4px; height: 4px; animation-duration: 12s; animation-delay: 0s; }
.snowflake:nth-child(2) { left: 20%; width: 6px; height: 6px; animation-duration: 10s; animation-delay: 1s; }
.snowflake:nth-child(3) { left: 30%; width: 5px; height: 5px; animation-duration: 14s; animation-delay: 2s; }
.snowflake:nth-child(4) { left: 40%; width: 7px; height: 7px; animation-duration: 9s; animation-delay: 3s; }
.snowflake:nth-child(5) { left: 50%; width: 4px; height: 4px; animation-duration: 13s; animation-delay: 4s; }
.snowflake:nth-child(6) { left: 60%; width: 6px; height: 6px; animation-duration: 11s; animation-delay: 5s; }
.snowflake:nth-child(7) { left: 70%; width: 5px; height: 5px; animation-duration: 15s; animation-delay: 6s; }
.snowflake:nth-child(8) { left: 80%; width: 8px; height: 8px; animation-duration: 8s; animation-delay: 7s; }
.snowflake:nth-child(9) { left: 90%; width: 4px; height: 4px; animation-duration: 12s; animation-delay: 8s; }
/* Адаптивность */
@media (max-width: 850px) {
.holiday-card-2024 {
width: 95%;
padding: 10px;
}
.photo-frame {
width: 250px;
height: 300px;
}
.holiday-title {
font-size: 2.2rem;
margin:10px 0 0px;
}
.greeting-text {
padding: 20px;
font-size: 16px;
}
.cover-icon {
font-size: 40px;
}
.cover-text {
font-size: 16px;
}
}
@media (max-width: 600px) {
.photo-display {
gap: 20px;
}
.photo-frame {
width: 200px;
height: 250px;
}
.holiday-title {
font-size: 1.8rem;
}
.cover-icon {
font-size: 35px;
}
.cover-text {
font-size: 14px;
}
}
@media (max-width: 480px) {
.photo-frame {
width: 150px;
height: 200px;
}
.holiday-title {
font-size: 1.5rem;
margin: 10px 0 10px;
}
.greeting-text {
font-size: 14px;
padding: 15px;
}
.cover-icon {
font-size: 30px;
margin-bottom: 10px;
}
.cover-text {
font-size: 12px;
}
}
</style>
<div class="holiday-card-2024">
<div class="garland">
<div class="wire"></div>
<!-- Добавьте столько лампочек, сколько нужно -->
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<!-- Еще 10 лампочек -->
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
<div class="light"></div>
</div>
<!-- Снежинки -->
<div class="snowflakes">
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
<div class="snowflake"></div>
</div>
<!-- Заголовок -->
<h1 class="holiday-title">Счастливого Рождества!</h1>
<!-- Фотографии -->
<div class="photo-display">
<!-- Фото 1 -->
<div class="photo-frame">
<div class="frame-cover" onclick="this.classList.toggle('active')">
<div class="cover-icon">✨</div>
<div class="cover-text">Нажми, чтобы увидеть<br>рождественское чудо</div>
</div>
<div class="photo-content">
<img src="https://upforme.ru/uploads/001b/ee/60/4/49762.png"
alt="Рождественский ужин" class="photo">
<div class="photo-caption">Игристое шампанское</div>
</div>
</div>
<!-- Фото 2 -->
<div class="photo-frame">
<div class="frame-cover" onclick="this.classList.toggle('active')">
<div class="cover-icon">🎁</div>
<div class="cover-text">Нажми, чтобы открыть<br>рождественский подарок</div>
</div>
<div class="photo-content">
<img src="https://upforme.ru/uploads/001b/ee/60/4/195143.png"
alt="Рождественские подарки" class="photo">
<div class="photo-caption">Волшебное рождество</div>
</div>
</div>
</div>
</div>[/html]
Поделиться142025-12-28 14:27:03
та самая компания неудержимых
к приключениям готовы
[html]<style>
/* Основной контейнер */
.instagram-tag-photo {
position: relative;
display: inline-block;
max-width: 800px;
margin: 20px auto;
font-family: 'Arial', sans-serif;
}
/* Рамка для фото */
.photo-frame {
position: relative;
border: 15px solid #fff;
border-radius: 10px;
box-shadow:
0 15px 35px rgba(0, 0, 0, 0.2),
0 0 0 1px rgba(0, 0, 0, 0.1);
overflow: hidden;
background: #fff;
}
/* Основное фото */
.main-photo {
display: block;
width: 100%;
height: auto;
cursor: crosshair;
transition: transform 0.3s ease;
}
.main-photo:hover {
transform: scale(1.01);
}
/* Декоративная скрепка PNG */
.sticker-pin {
position: absolute;
top: -15px;
right: 20px;
width: 60px;
height: 60px;
z-index: 20;
filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));
transform: rotate(-180deg);
transition: transform 0.3s ease;
}
.sticker-pin:hover {
transform: rotate(15deg) scale(1.1);
}
/* Точка-индикатор на фото */
.tag-dot {
position: absolute;
width: 80px;
height: 80px;
border: 1px solid #ffffff83;
border-radius: 20%;
cursor: pointer;
z-index: 1;
transition: all 0.3s ease;
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { box-shadow: 0 0 0 0 #72f3fc5e; }
70% { box-shadow: 0 0 0 10px transparent; }
100% { box-shadow: 0 0 0 0 transparent; }
z-index: 1;
}
.tag-dot:hover {
transform: scale(1.2);
background: #ffffff63;
animation: none;
border: 3px solid #ffffff83;
}
/* Плашка с именем */
.tag-label {
position: absolute;
background: #000000cb;
color: white;
padding: 5px 15px;
border-radius: 5px;
font-size: 12px;
font-weight: 500;
white-space: nowrap;
opacity: 0;
visibility: hidden;
transform: translateY(10px);
transition: all 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55);
z-index: 99;
}
/* Стрелочка у плашки */
.tag-label::after {
content: '';
position: absolute;
top: -74%;
left: 50%;
margin-left: -10px;
border-width: 9px;
border-style: solid;
border-color: transparent transparent #000000cb transparent;
}
/* Показ плашки при наведении */
.tag-dot:hover .tag-label {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
/* Подпись под фото */
.photo-caption {
margin-top: 15px;
text-align: center;
color: #666;
font-size: 14px;
font-style: italic;
padding: 10px;
border-top: 1px dashed #ddd;
}
</style>
<div class="instagram-tag-photo">
<!-- Декоративная скрепка -->
<img src="https://cdn-icons-png.flaticon.com/512/2493/2493501.png" class="sticker-pin">
<!-- Рамка с фото -->
<div class="photo-frame">
<!-- Основное изображение -->
<img src="https://upforme.ru/uploads/001b/ee/60/4/789356.png"
alt="Групповое фото" class="main-photo">
<!-- Точки и плашки для персонажей -->
<!-- Персонаж 3 -->
<div class="tag-dot" style="top: 52%; left: 45%;">
<div class="tag-label" style="top: 115%; left: 50%; transform: translateX(-50%);">
Лили Веспера
</div>
</div>
<!-- Персонаж 2 -->
<div class="tag-dot" style="top: 41%; left: 36%;">
<div class="tag-label" style="top: 115%; left: 50%; transform: translateX(-50%);">
Кейси Мур
</div>
</div>
<!-- Персонаж 1 -->
<div class="tag-dot" style="top: 20%; left: 32%;">
<div class="tag-label" style="top: 115%; left: 50%; transform: translateX(-50%);">
Нил Холт
</div>
</div>
<!-- Персонаж 4 -->
<div class="tag-dot" style="top: 38%; left: 53%;">
<div class="tag-label" style="top: 115%; left: 50%; transform: translateX(-50%);">
Кай Уиллсон
</div>
</div>
<!-- Персонаж 5 -->
<div class="tag-dot" style="top: 35%; left: 63%;">
<div class="tag-label" style="top: 115%; left: 50%; transform: translateX(-50%);">
Том Вуд
</div>
</div>
</div>
</div>[/html]
Поделиться152025-12-28 21:41:06
Код:[html]<style> /* Основной контейнер */ .character-crafter { position: relative; width: 800px; max-width: 100%; height: 600px; /* Фиксированная высота */ margin: 20px auto; font-family: 'Arial', sans-serif; background: transparent; overflow: hidden; /* Скрываем выходящее за границы */ } /* Подложка - фон с сеткой */ .craft-background { position: relative; /* Меняем на relative */ width: 100%; height: 100%; z-index: 1; pointer-events: none; } /* Основная область крафта */ .crafting-area { position: absolute; /* Теперь эта обертка absolute */ top: 0; left: 0; width: 100%; height: 100%; z-index: 2; padding: 40px; } /* Все внутренние блоки остаются absolute */ .craft-grid-3x3, .result-cell, .inventory-row { position: absolute; /* остальные стили */ } /* Блок 1: Крафтовая сетка 3x3 */ .craft-grid-3x3 { position: absolute; top: 120px; /* Настройте под свою подложку */ left: 120px; /* Настройте под свою подложку */ width: 270px; /* 3 ячейки по 90px */ height: 270px; display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(3, 1fr); gap: 0; z-index: 3; } /* Блок 2: Итоговая ячейка */ .result-cell { position: absolute; top: 170px; /* Настройте под свою подложку */ left: 480px; /* Настройте под свою подложку */ width: 90px; height: 90px; z-index: 3; } /* Блок 3: Инвентарь 1x9 */ .inventory-row { position: absolute; bottom: 100px; /* Настройте под свою подложку */ left: 120px; /* Настройте под свою подложку */ width: 810px; /* 9 ячеек по 90px */ height: 90px; display: grid; grid-template-columns: repeat(9, 1fr); grid-template-rows: 1fr; gap: 0; z-index: 3; } /* Общий стиль для всех ячеек */ .craft-cell { position: relative; width: 100%; height: 100%; border: none; background: transparent; cursor: pointer; transition: all 0.2s ease; display: flex; align-items: center; justify-content: center; padding: 5px; } .craft-cell:hover { background: rgba(255, 255, 255, 0.1); transform: scale(1.05); z-index: 10; } /* Стиль для изображения внутри ячейки */ .cell-image { max-width: 100%; max-height: 100%; object-fit: contain; display: block; opacity: 0; transition: opacity 0.3s ease; } .cell-image.loaded { opacity: 1; } /* Контейнер для загрузки изображений */ .image-input-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: transparent; } /* Скрытый инпут для загрузки */ .image-input { position: absolute; width: 100%; height: 100%; opacity: 0; cursor: pointer; z-index: 5; } /* Плюсик для пустой ячейки */ .empty-cell-indicator { width: 30px; height: 30px; border: 2px dashed rgba(255, 255, 255, 0.3); border-radius: 4px; display: flex; align-items: center; justify-content: center; color: rgba(255, 255, 255, 0.5); font-size: 20px; font-weight: bold; transition: all 0.3s ease; } .craft-cell:hover .empty-cell-indicator { border-color: rgba(255, 255, 255, 0.7); color: rgba(255, 255, 255, 0.9); transform: scale(1.2); } /* Кнопка очистки ячейки */ .clear-cell-btn { position: absolute; top: -8px; right: -8px; width: 20px; height: 20px; background: rgba(255, 59, 48, 0.9); color: white; border: none; border-radius: 50%; font-size: 12px; font-weight: bold; cursor: pointer; opacity: 0; transform: scale(0.8); transition: all 0.2s ease; z-index: 6; display: flex; align-items: center; justify-content: center; line-height: 1; } .craft-cell:hover .clear-cell-btn, .clear-cell-btn:hover { opacity: 1; transform: scale(1); } .clear-cell-btn:hover { background: rgb(255, 59, 48); transform: scale(1.1); } /* Инструкция */ .instructions { margin-top: 20px; padding: 15px; background: rgba(0, 0, 0, 0.7); border-radius: 8px; color: white; font-size: 14px; text-align: center; border: 1px solid rgba(255, 255, 255, 0.2); } .instructions h3 { margin: 0 0 10px 0; color: #4CAF50; } /* Адаптивность */ @media (max-width: 950px) { .character-crafter { width: 95%; } .craft-grid-3x3, .result-cell, .inventory-row { transform: scale(0.9); transform-origin: top left; } .crafting-area { padding: 20px; } } @media (max-width: 700px) { .craft-grid-3x3, .result-cell, .inventory-row { transform: scale(0.7); } } @media (max-width: 500px) { .craft-grid-3x3, .result-cell, .inventory-row { transform: scale(0.6); } } </style> <div class="character-crafter"> <!-- Подложка-фон --> <div class="craft-background"> <!-- Вставьте ваше фоновое изображение с сеткой --> <img src="https://cdn.promodj.com/afs/6affb743b0bce0ba29ac568bd270b27a12%3Aresize%3A1400x1400xxjpegxffffffxnoupscale%3Asame%3A480b7b.jpg" alt="Фон для крафта"> </div> <!-- Область крафта --> <div class="crafting-area"> <!-- Блок 1: Крафтовая сетка 3x3 --> <div class="craft-grid-3x3" id="craftGrid"> <!-- 9 ячеек будут созданы скриптом --> </div> <!-- Блок 2: Итоговая ячейка --> <div class="result-cell"> <div class="craft-cell" data-cell-type="result" data-cell-id="result"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/png, image/jpeg" data-cell-id="result"> <div class="empty-cell-indicator">+</div> </div> <img class="cell-image" data-cell-id="result" alt="Результат"> <button class="clear-cell-btn" data-cell-id="result">×</button> </div> </div> <!-- Блок 3: Инвентарь 1x9 --> <div class="inventory-row" id="inventoryRow"> <!-- 9 ячеек будут созданы скриптом --> </div> </div> <!-- Инструкция --> <div class="instructions"> <h3>🎮 Как скрафтить персонажа:</h3> <p>1. Нажмите на любую ячейку и загрузите PNG изображение</p> <p>2. Расставьте части в сетке крафта 3×3 как хотите</p> <p>3. Результат появится в правой ячейке (загрузите готового персонажа)</p> <p>4. Используйте нижний ряд как инвентарь для запасных частей</p> <p>5. Нажмите × в углу ячейки, чтобы удалить изображение</p> </div> </div> <script> // Создаем ячейки для сетки 3x3 const craftGrid = document.getElementById('craftGrid'); for (let i = 0; i < 9; i++) { const cellId = `craft-${i}`; const cellHTML = ` <div class="craft-cell" data-cell-type="craft" data-cell-id="${cellId}"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/png, image/jpeg" data-cell-id="${cellId}"> <div class="empty-cell-indicator">+</div> </div> <img class="cell-image" data-cell-id="${cellId}" alt="Элемент крафта"> <button class="clear-cell-btn" data-cell-id="${cellId}">×</button> </div> `; craftGrid.innerHTML += cellHTML; } // Создаем ячейки для инвентаря const inventoryRow = document.getElementById('inventoryRow'); for (let i = 0; i < 9; i++) { const cellId = `inventory-${i}`; const cellHTML = ` <div class="craft-cell" data-cell-type="inventory" data-cell-id="${cellId}"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/png, image/jpeg" data-cell-id="${cellId}"> <div class="empty-cell-indicator">+</div> </div> <img class="cell-image" data-cell-id="${cellId}" alt="Элемент инвентаря"> <button class="clear-cell-btn" data-cell-id="${cellId}">×</button> </div> `; inventoryRow.innerHTML += cellHTML; } // Обработчик загрузки изображений document.addEventListener('change', function(e) { if (e.target.classList.contains('image-input')) { const file = e.target.files[0]; const cellId = e.target.dataset.cellId; if (file && file.type.match('image.*')) { const reader = new FileReader(); reader.onload = function(e) { const img = document.querySelector(`.cell-image[data-cell-id="${cellId}"]`); img.src = e.target.result; img.classList.add('loaded'); // Скрываем плюсик const indicator = document.querySelector(`.craft-cell[data-cell-id="${cellId}"] .empty-cell-indicator`); indicator.style.opacity = '0'; } reader.readAsDataURL(file); } } }); // Обработчик очистки ячейки document.addEventListener('click', function(e) { if (e.target.classList.contains('clear-cell-btn')) { const cellId = e.target.dataset.cellId; const img = document.querySelector(`.cell-image[data-cell-id="${cellId}"]`); const input = document.querySelector(`.image-input[data-cell-id="${cellId}"]`); const indicator = document.querySelector(`.craft-cell[data-cell-id="${cellId}"] .empty-cell-indicator`); // Очищаем изображение img.src = ''; img.classList.remove('loaded'); // Сбрасываем input input.value = ''; // Показываем плюсик indicator.style.opacity = '1'; e.stopPropagation(); } }); // Предотвращаем всплытие клика по кнопке очистки document.addEventListener('click', function(e) { if (e.target.classList.contains('clear-cell-btn')) { e.preventDefault(); } }); </script>[/html]
Поделиться162025-12-28 22:22:58
[html]<style>
/* Основной контейнер */
.character-crafter {
position: relative;
width: 800px;
max-width: 100%;
margin: 20px auto;
font-family: 'Arial', sans-serif;
background: transparent;
min-height: 600px;
height: auto;
}
/* Подложка - фон с сеткой */
.craft-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 600px;
z-index: 1;
pointer-events: none;
}
.craft-background img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* Основная область крафта */
.crafting-area {
position: relative;
z-index: 2;
padding: 40px;
height: 600px;
}
/* Блок 1: Крафтовая сетка 3x3 */
.craft-grid-3x3 {
position: absolute;
top: 120px;
left: 120px;
width: 240px;
height: 240px;
display: grid;
grid-template-columns: repeat(3, 80px);
grid-template-rows: repeat(3, 80px);
gap: 0;
z-index: 3;
}
/* Блок 2: Итоговая ячейка */
.result-cell {
position: absolute;
top: 170px;
left: 480px;
width: 80px;
height: 80px;
z-index: 3;
}
/* Блок 3: Инвентарь 1x9 */
.inventory-row {
position: absolute;
bottom: 100px;
left: 120px;
width: 720px;
height: 80px;
display: grid;
grid-template-columns: repeat(9, 80px);
grid-template-rows: 80px;
gap: 0;
z-index: 3;
}
/* Общий стиль для всех ячеек */
.craft-cell {
position: relative;
width: 80px;
height: 80px;
border: none;
background: transparent;
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
justify-content: center;
padding: 2px;
overflow: hidden;
}
.craft-cell:hover {
background: rgba(255, 255, 255, 0.1);
transform: scale(1.05);
z-index: 10;
}
/* Контейнер для изображения */
.cell-image-container {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
/* Изображение */
.cell-image {
max-width: 100%;
max-height: 100%;
object-fit: contain;
display: block;
opacity: 0;
transition: opacity 0.3s ease;
}
.cell-image.loaded {
opacity: 1;
}
/* Контейнер для загрузки */
.image-input-container {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background: transparent;
}
/* Скрытый инпут */
.image-input {
position: absolute;
width: 100%;
height: 100%;
opacity: 0;
cursor: pointer;
z-index: 5;
}
/* Плюсик для пустой ячейки */
.empty-cell-indicator {
width: 30px;
height: 30px;
border: 2px dashed rgba(255, 255, 255, 0.3);
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
color: rgba(255, 255, 255, 0.5);
font-size: 20px;
font-weight: bold;
transition: all 0.3s ease;
}
.craft-cell:hover .empty-cell-indicator {
border-color: rgba(255, 255, 255, 0.7);
color: rgba(255, 255, 255, 0.9);
transform: scale(1.2);
}
/* Кнопка очистки */
.clear-cell-btn {
position: absolute;
top: -8px;
right: -8px;
width: 20px;
height: 20px;
background: rgba(255, 59, 48, 0.9);
color: white;
border: none;
border-radius: 50%;
font-size: 12px;
font-weight: bold;
cursor: pointer;
opacity: 0;
transform: scale(0.8);
transition: all 0.2s ease;
z-index: 6;
display: flex;
align-items: center;
justify-content: center;
line-height: 1;
}
.craft-cell:hover .clear-cell-btn,
.clear-cell-btn:hover {
opacity: 1;
transform: scale(1);
}
.clear-cell-btn:hover {
background: rgb(255, 59, 48);
transform: scale(1.1);
}
/* Инструкция */
.instructions {
margin-top: 20px;
padding: 15px;
background: rgba(0, 0, 0, 0.7);
border-radius: 8px;
color: white;
font-size: 14px;
text-align: center;
border: 1px solid rgba(255, 255, 255, 0.2);
}
.instructions h3 {
margin: 0 0 10px 0;
color: #4CAF50;
}
/* Загрузка по ссылке */
.url-upload-section {
margin-top: 20px;
padding: 15px;
background: rgba(0, 0, 0, 0.7);
border-radius: 8px;
color: white;
border: 1px solid rgba(255, 255, 255, 0.2);
}
.url-upload-section h3 {
margin: 0 0 10px 0;
color: #2196F3;
font-size: 16px;
}
.url-input-group {
display: flex;
gap: 10px;
margin-bottom: 10px;
}
.url-input {
flex: 1;
padding: 10px;
border: 1px solid #444;
border-radius: 4px;
background: rgba(255, 255, 255, 0.1);
color: white;
font-size: 14px;
}
.url-input::placeholder {
color: rgba(255, 255, 255, 0.5);
}
.url-load-btn {
padding: 10px 20px;
background: #2196F3;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-weight: bold;
transition: background 0.3s;
}
.url-load-btn:hover {
background: #1976D2;
}
.url-hint {
font-size: 12px;
color: rgba(255, 255, 255, 0.6);
margin: 0;
}
/* Активная ячейка */
.craft-cell.active {
box-shadow: 0 0 0 3px #4CAF50;
}
/* Уведомление */
.craft-notification {
position: fixed;
top: 20px;
right: 20px;
padding: 12px 24px;
border-radius: 4px;
color: white;
z-index: 10000;
box-shadow: 0 4px 12px rgba(0,0,0,0.3);
font-family: Arial, sans-serif;
font-size: 14px;
display: none;
}
.notification-success {
background: #4CAF50;
display: block;
}
.notification-error {
background: #f44336;
display: block;
}
/* Адаптивность */
@media (max-width: 850px) {
.character-crafter {
width: 95%;
}
.craft-grid-3x3,
.result-cell,
.inventory-row {
transform: scale(0.9);
transform-origin: top left;
}
.crafting-area {
padding: 20px;
}
}
</style>
<div class="character-crafter">
<!-- Подложка-фон -->
<div class="craft-background">
<img src="https://i.imgur.com/placeholder-craft-bg.png" alt="Фон для крафта">
</div>
<!-- Область крафта -->
<div class="crafting-area">
<!-- Блок 1: Крафтовая сетка 3x3 - ВСЕ ЯЧЕЙКИ ВРУЧНУЮ -->
<div class="craft-grid-3x3">
<!-- Ряд 1 -->
<div class="craft-cell" data-cell-type="craft" data-cell-id="craft-0">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="craft-0">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="craft-0" alt="Элемент крафта">
</div>
<button class="clear-cell-btn" data-cell-id="craft-0">×</button>
</div>
<div class="craft-cell" data-cell-type="craft" data-cell-id="craft-1">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="craft-1">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="craft-1" alt="Элемент крафта">
</div>
<button class="clear-cell-btn" data-cell-id="craft-1">×</button>
</div>
<div class="craft-cell" data-cell-type="craft" data-cell-id="craft-2">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="craft-2">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="craft-2" alt="Элемент крафта">
</div>
<button class="clear-cell-btn" data-cell-id="craft-2">×</button>
</div>
<!-- Ряд 2 -->
<div class="craft-cell" data-cell-type="craft" data-cell-id="craft-3">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="craft-3">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="craft-3" alt="Элемент крафта">
</div>
<button class="clear-cell-btn" data-cell-id="craft-3">×</button>
</div>
<div class="craft-cell" data-cell-type="craft" data-cell-id="craft-4">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="craft-4">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="craft-4" alt="Элемент крафта">
</div>
<button class="clear-cell-btn" data-cell-id="craft-4">×</button>
</div>
<div class="craft-cell" data-cell-type="craft" data-cell-id="craft-5">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="craft-5">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="craft-5" alt="Элемент крафта">
</div>
<button class="clear-cell-btn" data-cell-id="craft-5">×</button>
</div>
<!-- Ряд 3 -->
<div class="craft-cell" data-cell-type="craft" data-cell-id="craft-6">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="craft-6">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="craft-6" alt="Элемент крафта">
</div>
<button class="clear-cell-btn" data-cell-id="craft-6">×</button>
</div>
<div class="craft-cell" data-cell-type="craft" data-cell-id="craft-7">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="craft-7">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="craft-7" alt="Элемент крафта">
</div>
<button class="clear-cell-btn" data-cell-id="craft-7">×</button>
</div>
<div class="craft-cell" data-cell-type="craft" data-cell-id="craft-8">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="craft-8">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="craft-8" alt="Элемент крафта">
</div>
<button class="clear-cell-btn" data-cell-id="craft-8">×</button>
</div>
</div>
<!-- Блок 2: Итоговая ячейка -->
<div class="result-cell">
<div class="craft-cell" data-cell-type="result" data-cell-id="result">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="result">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="result" alt="Результат">
</div>
<button class="clear-cell-btn" data-cell-id="result">×</button>
</div>
</div>
<!-- Блок 3: Инвентарь 1x9 - ВСЕ ЯЧЕЙКИ ВРУЧНУЮ -->
<div class="inventory-row">
<div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-0">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="inventory-0">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="inventory-0" alt="Инвентарь">
</div>
<button class="clear-cell-btn" data-cell-id="inventory-0">×</button>
</div>
<div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-1">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="inventory-1">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="inventory-1" alt="Инвентарь">
</div>
<button class="clear-cell-btn" data-cell-id="inventory-1">×</button>
</div>
<div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-2">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="inventory-2">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="inventory-2" alt="Инвентарь">
</div>
<button class="clear-cell-btn" data-cell-id="inventory-2">×</button>
</div>
<div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-3">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="inventory-3">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="inventory-3" alt="Инвентарь">
</div>
<button class="clear-cell-btn" data-cell-id="inventory-3">×</button>
</div>
<div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-4">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="inventory-4">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="inventory-4" alt="Инвентарь">
</div>
<button class="clear-cell-btn" data-cell-id="inventory-4">×</button>
</div>
<div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-5">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="inventory-5">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="inventory-5" alt="Инвентарь">
</div>
<button class="clear-cell-btn" data-cell-id="inventory-5">×</button>
</div>
<div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-6">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="inventory-6">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="inventory-6" alt="Инвентарь">
</div>
<button class="clear-cell-btn" data-cell-id="inventory-6">×</button>
</div>
<div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-7">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="inventory-7">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="inventory-7" alt="Инвентарь">
</div>
<button class="clear-cell-btn" data-cell-id="inventory-7">×</button>
</div>
<div class="craft-cell" data-cell-type="inventory" data-cell-id="inventory-8">
<div class="image-input-container">
<input type="file" class="image-input" accept="image/*" data-cell-id="inventory-8">
<div class="empty-cell-indicator">+</div>
</div>
<div class="cell-image-container">
<img class="cell-image" data-cell-id="inventory-8" alt="Инвентарь">
</div>
<button class="clear-cell-btn" data-cell-id="inventory-8">×</button>
</div>
</div>
</div>
<!-- Инструкция -->
<div class="instructions">
<h3>🎮 Как скрафтить персонажа:</h3>
<p>1. Кликните на любую ячейку (она станет активной)</p>
<p>2. Загрузите PNG/JPEG изображение с компьютера или вставьте ссылку</p>
<p>3. Используйте сетку 3×3 для сборки, правую ячейку для результата</p>
<p>4. Нижний ряд - инвентарь для дополнительных деталей</p>
<p>5. Нажмите × в углу ячейки, чтобы удалить изображение</p>
</div>
<!-- Загрузка по ссылке -->
<div class="url-upload-section">
<h3>🌐 Загрузка по ссылке</h3>
<div class="url-input-group">
<input type="text" class="url-input" placeholder="Вставьте ссылку на PNG/JPEG изображение">
<button class="url-load-btn">Загрузить в активную ячейку</button>
</div>
<p class="url-hint">Сначала кликните на ячейку выше, затем вставьте ссылку</p>
</div>
<!-- Уведомление -->
<div class="craft-notification" id="craftNotification"></div>
</div>
<script>
// Простой скрипт для управления
let activeCellId = null;
// Функция для показа уведомления
function showNotification(message, type) {
const notification = document.getElementById('craftNotification');
notification.textContent = message;
notification.className = 'craft-notification';
notification.classList.add(`notification-${type}`);
setTimeout(() => {
notification.style.display = 'block';
}, 10);
setTimeout(() => {
notification.style.display = 'none';
}, 3000);
}
// Делаем ячейку активной при клике
document.addEventListener('click', function(e) {
// Клик по ячейке
const cell = e.target.closest('.craft-cell');
if (cell) {
// Убираем активность со всех ячеек
document.querySelectorAll('.craft-cell').forEach(c => {
c.classList.remove('active');
});
// Делаем эту ячейку активной
cell.classList.add('active');
activeCellId = cell.dataset.cellId;
console.log('Активная ячейка:', activeCellId);
}
// Клик по кнопке очистки
if (e.target.classList.contains('clear-cell-btn')) {
const cellId = e.target.dataset.cellId;
const img = document.querySelector(`.cell-image[data-cell-id="${cellId}"]`);
const input = document.querySelector(`.image-input[data-cell-id="${cellId}"]`);
const indicator = document.querySelector(`.craft-cell[data-cell-id="${cellId}"] .empty-cell-indicator`);
if (img && input && indicator) {
img.src = '';
img.classList.remove('loaded');
input.value = '';
indicator.style.opacity = '1';
showNotification('🗑️ Изображение удалено', 'success');
e.stopPropagation();
}
}
// Клик по кнопке загрузки по ссылке
if (e.target.classList.contains('url-load-btn')) {
if (!activeCellId) {
showNotification('⚠️ Сначала выберите ячейку!', 'error');
return;
}
const urlInput = document.querySelector('.url-input');
const url = urlInput.value.trim();
if (!url) {
showNotification('⚠️ Введите ссылку!', 'error');
return;
}
const img = document.querySelector(`.cell-image[data-cell-id="${activeCellId}"]`);
const indicator = document.querySelector(`.craft-cell[data-cell-id="${activeCellId}"] .empty-cell-indicator`);
if (img && indicator) {
// Проверяем, что это изображение
const testImg = new Image();
testImg.crossOrigin = 'anonymous';
testImg.onload = function() {
img.src = url;
img.classList.add('loaded');
indicator.style.opacity = '0';
urlInput.value = '';
showNotification('✅ Изображение загружено!', 'success');
};
testImg.onerror = function() {
showNotification('❌ Не удалось загрузить изображение', 'error');
};
testImg.src = url;
}
}
});
// Загрузка изображений с компьютера
document.addEventListener('change', function(e) {
if (e.target.classList.contains('image-input')) {
const file = e.target.files[0];
const cellId = e.target.dataset.cellId;
if (file && file.type.match('image.*')) {
const reader = new FileReader();
reader.onload = function(e) {
const img = document.querySelector(`.cell-image[data-cell-id="${cellId}"]`);
const indicator = document.querySelector(`.craft-cell[data-cell-id="${cellId}"] .empty-cell-indicator`);
if (img && indicator) {
img.src = e.target.result;
img.classList.add('loaded');
indicator.style.opacity = '0';
// Делаем эту ячейку активной
const cell = document.querySelector(`.craft-cell[data-cell-id="${cellId}"]`);
if (cell) {
document.querySelectorAll('.craft-cell').forEach(c => {
c.classList.remove('active');
});
cell.classList.add('active');
activeCellId = cellId;
}
showNotification('✅ Изображение загружено!', 'success');
}
};
reader.readAsDataURL(file);
}
}
});
// Вставка по Ctrl+V
document.addEventListener('paste', function(e) {
if (!activeCellId) return;
const pastedText = e.clipboardData.getData('text');
if (pastedText && (pastedText.startsWith('http') || pastedText.startsWith('data:image'))) {
e.preventDefault();
const img = document.querySelector(`.cell-image[data-cell-id="${activeCellId}"]`);
const indicator = document.querySelector(`.craft-cell[data-cell-id="${activeCellId}"] .empty-cell-indicator`);
if (img && indicator) {
// Проверяем изображение
const testImg = new Image();
testImg.crossOrigin = 'anonymous';
testImg.onload = function() {
img.src = pastedText;
img.classList.add('loaded');
indicator.style.opacity = '0';
showNotification('✅ Изображение вставлено!', 'success');
};
testImg.onerror = function() {
showNotification('❌ Неверная ссылка на изображение', 'error');
};
testImg.src = pastedText;
}
}
});
console.log('Система крафта готова! Все ячейки созданы.');
</script>[/html]
Поделиться172025-12-29 12:26:18
Код:[html]<style> /* Основной контейнер */ .character-crafter { position: relative; width: 800px; max-width: 100%; margin: 0px auto; font-family: 'Arial', sans-serif; background: transparent; min-height: 600px; height: auto; } /* Подложка - фон с сеткой */ .craft-background { position: absolute; top: 0; left: 0; width: 100%; height: 600px; z-index: 1; pointer-events: none; } .craft-background img { width: 100%; height: 100%; object-fit: cover; display: block; } /* Основная область крафта */ .crafting-area { position: relative; z-index: 2; padding: 1px; height: 600px; } /* Блок 1: Крафтовая сетка 3x3 */ .craft-grid-3x3 {background: #1fd125; position: absolute; top: 120px; left: 80px; width: 300px; height: 300px; display: grid; grid-template-columns: repeat(3, 90px); grid-template-rows: repeat(3, 90px); gap: 10px; z-index: 3; } /* Блок 2: Итоговая ячейка */ .result-cell { position: absolute; top: 170px; left: 480px; width: 80px; height: 80px; z-index: 3; } /* Блок 3: Инвентарь 1x9 */ .inventory-row { position: absolute; bottom: 100px; left: 60px; width: 720px; height: 80px; display: grid; grid-template-columns: repeat(9, 80px); grid-template-rows: 80px; gap: 0; z-index: 3; } /* Общий стиль для всех ячеек */ .craft-cell { position: relative; background: #d18a1f; border: none; /* background: transparent;*/ cursor: pointer; transition: all 0.2s ease; display: flex; align-items: center; justify-content: center; padding: 1px; overflow: hidden; } .block1 { width: 90px; height: 90px; background: #a21fd1; } .block2 { width: 150px; height: 150px; background: #d11f55; } .block3 { width: 60px; height: 60px; background: #1fa8d1; margin: 15px; } .craft-cell:hover { background: rgba(255, 255, 255, 0.1); transform: scale(1.05); z-index: 10; } /* Контейнер для изображения */ .cell-image-container { width: 100%; /* Меняем на 100% */ height: 100%; /* Меняем на 100% */ display: flex; align-items: center; justify-content: center; overflow: hidden; position: relative; border-radius: 4px; /* Опционально: скругленные углы */ } /* Изображение - ОБРЕЗКА КВАДРАТОМ */ .cell-image { width: 100%; /* Занимает всю ширину */ height: 100%; /* Занимает всю высоту */ object-fit: cover; /* Ключевое изменение! Обрезает, сохраняя пропорции */ display: block; opacity: 0; transition: opacity 0.3s ease; position: absolute; top: 0; left: 0; } .cell-image.loaded { opacity: 1; } /* Контейнер для загрузки */ .image-input-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: transparent; } /* Скрытый инпут */ .image-input { position: absolute; width: 100%; height: 100%; opacity: 0; cursor: pointer; z-index: 5; } /* Плюсик для пустой ячейки */ .empty-cell-indicator { width: 30px; height: 30px; border: 2px dashed rgba(255, 255, 255, 0.3); border-radius: 4px; display: flex; align-items: center; justify-content: center; color: rgba(255, 255, 255, 0.5); font-size: 20px; font-weight: bold; transition: all 0.3s ease; } .craft-cell:hover .empty-cell-indicator { border-color: rgba(255, 255, 255, 0.7); color: rgba(255, 255, 255, 0.9); transform: scale(1.2); } /* Кнопка очистки */ .clear-cell-btn { position: absolute; top: -8px; right: -8px; width: 20px; height: 20px; background: rgba(255, 59, 48, 0.9); color: white; border: none; border-radius: 50%; font-size: 12px; font-weight: bold; cursor: pointer; opacity: 0; transform: scale(0.8); transition: all 0.2s ease; z-index: 6; display: flex; align-items: center; justify-content: center; line-height: 1; } .craft-cell:hover .clear-cell-btn, .clear-cell-btn:hover { opacity: 1; transform: scale(1); } .clear-cell-btn:hover { background: rgb(255, 59, 48); transform: scale(1.1); } /* Загрузка по ссылке */ .url-upload-section { margin-top: 0px; padding: 0px; background: rgba(0, 0, 0, 0.7); border-radius: 8px; color: white; border: 1px solid rgba(255, 255, 255, 0.2); } .url-upload-section h3 { margin: 0 0 0px 0; color: #2196F3; font-size: 16px; } .url-input-group { display: flex; gap: 10px; margin-bottom: 0px; } .url-input { flex: 1; padding: 0px; border: 1px solid #444; border-radius: 4px; background: rgba(255, 255, 255, 0.1); color: white; font-size: 14px; } .url-input::placeholder { color: rgba(255, 255, 255, 0.5); } .url-load-btn { padding: 1px 1px; background: #2196F3; color: white; border: none; border-radius: 4px; cursor: pointer; font-weight: bold; transition: background 0.3s; } .url-load-btn:hover { background: #1976D2; } .url-hint { font-size: 12px; color: rgba(255, 255, 255, 0.6); margin: 0; } /* Активная ячейка */ .craft-cell.active { box-shadow: 0 0 0 3px #4CAF50; } /* Уведомление */ .craft-notification { position: fixed; top: 20px; right: 20px; padding: 1px 1px; border-radius: 4px; color: white; z-index: 10000; box-shadow: 0 4px 12px rgba(0,0,0,0.3); font-family: Arial, sans-serif; font-size: 14px; display: none; } .notification-success { background: #4CAF50; display: block; } .notification-error { background: #f44336; display: block; } </style> <div class="character-crafter"> <!-- Подложка-фон --> <div class="craft-background"> <img src="https://cdn.promodj.com/afs/6affb743b0bce0ba29ac568bd270b27a12%3Aresize%3A1400x1400xxjpegxffffffxnoupscale%3Asame%3A480b7b.jpg" alt="Фон для крафта"> </div> <!-- Область крафта --> <div class="crafting-area"> <!-- Блок 1: Крафтовая сетка 3x3 - ВСЕ ЯЧЕЙКИ ВРУЧНУЮ --> <div class="craft-grid-3x3"> <!-- Ряд 1 --> <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-0"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="craft-0"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="craft-0" alt="Элемент крафта"> </div> <button class="clear-cell-btn" data-cell-id="craft-0">×</button> </div> <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-1"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="craft-1"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="craft-1" alt="Элемент крафта"> </div> <button class="clear-cell-btn" data-cell-id="craft-1">×</button> </div> <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-2"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="craft-2"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="craft-2" alt="Элемент крафта"> </div> <button class="clear-cell-btn" data-cell-id="craft-2">×</button> </div> <!-- Ряд 2 --> <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-3"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="craft-3"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="craft-3" alt="Элемент крафта"> </div> <button class="clear-cell-btn" data-cell-id="craft-3">×</button> </div> <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-4"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="craft-4"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="craft-4" alt="Элемент крафта"> </div> <button class="clear-cell-btn" data-cell-id="craft-4">×</button> </div> <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-5"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="craft-5"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="craft-5" alt="Элемент крафта"> </div> <button class="clear-cell-btn" data-cell-id="craft-5">×</button> </div> <!-- Ряд 3 --> <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-6"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="craft-6"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="craft-6" alt="Элемент крафта"> </div> <button class="clear-cell-btn" data-cell-id="craft-6">×</button> </div> <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-7"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="craft-7"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="craft-7" alt="Элемент крафта"> </div> <button class="clear-cell-btn" data-cell-id="craft-7">×</button> </div> <div class="craft-cell block1" data-cell-type="craft" data-cell-id="craft-8"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="craft-8"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="craft-8" alt="Элемент крафта"> </div> <button class="clear-cell-btn" data-cell-id="craft-8">×</button> </div> </div> <!-- Блок 2: Итоговая ячейка --> <div class="result-cell"> <div class="craft-cell block2" data-cell-type="result" data-cell-id="result"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="result"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="result" alt="Результат"> </div> <button class="clear-cell-btn" data-cell-id="result">×</button> </div> </div> <!-- Блок 3: Инвентарь 1x9 - ВСЕ ЯЧЕЙКИ ВРУЧНУЮ --> <div class="inventory-row"> <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-0"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-0"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="inventory-0" alt="Инвентарь"> </div> <button class="clear-cell-btn" data-cell-id="inventory-0">×</button> </div> <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-1"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-1"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="inventory-1" alt="Инвентарь"> </div> <button class="clear-cell-btn" data-cell-id="inventory-1">×</button> </div> <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-2"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-2"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="inventory-2" alt="Инвентарь"> </div> <button class="clear-cell-btn" data-cell-id="inventory-2">×</button> </div> <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-3"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-3"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="inventory-3" alt="Инвентарь"> </div> <button class="clear-cell-btn" data-cell-id="inventory-3">×</button> </div> <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-4"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-4"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="inventory-4" alt="Инвентарь"> </div> <button class="clear-cell-btn" data-cell-id="inventory-4">×</button> </div> <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-5"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-5"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="inventory-5" alt="Инвентарь"> </div> <button class="clear-cell-btn" data-cell-id="inventory-5">×</button> </div> <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-6"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-6"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="inventory-6" alt="Инвентарь"> </div> <button class="clear-cell-btn" data-cell-id="inventory-6">×</button> </div> <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-7"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-7"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="inventory-7" alt="Инвентарь"> </div> <button class="clear-cell-btn" data-cell-id="inventory-7">×</button> </div> <div class="craft-cell block3" data-cell-type="inventory" data-cell-id="inventory-8"> <div class="image-input-container"> <input type="file" class="image-input" accept="image/*" data-cell-id="inventory-8"> <div class="empty-cell-indicator">+</div> </div> <div class="cell-image-container"> <img class="cell-image" data-cell-id="inventory-8" alt="Инвентарь"> </div> <button class="clear-cell-btn" data-cell-id="inventory-8">×</button> </div> </div> </div> <script> // Простой скрипт для управления let activeCellId = null; // Функция для показа уведомления function showNotification(message, type) { const notification = document.getElementById('craftNotification'); notification.textContent = message; notification.className = 'craft-notification'; notification.classList.add(`notification-${type}`); setTimeout(() => { notification.style.display = 'block'; }, 10); setTimeout(() => { notification.style.display = 'none'; }, 3000); } // Делаем ячейку активной при клике document.addEventListener('click', function(e) { // Клик по ячейке const cell = e.target.closest('.craft-cell'); if (cell) { // Убираем активность со всех ячеек document.querySelectorAll('.craft-cell').forEach(c => { c.classList.remove('active'); }); // Делаем эту ячейку активной cell.classList.add('active'); activeCellId = cell.dataset.cellId; console.log('Активная ячейка:', activeCellId); } // Клик по кнопке очистки if (e.target.classList.contains('clear-cell-btn')) { const cellId = e.target.dataset.cellId; const img = document.querySelector(`.cell-image[data-cell-id="${cellId}"]`); const input = document.querySelector(`.image-input[data-cell-id="${cellId}"]`); const indicator = document.querySelector(`.craft-cell[data-cell-id="${cellId}"] .empty-cell-indicator`); if (img && input && indicator) { img.src = ''; img.classList.remove('loaded'); input.value = ''; indicator.style.opacity = '1'; showNotification('🗑️ Изображение удалено', 'success'); e.stopPropagation(); } } // Клик по кнопке загрузки по ссылке if (e.target.classList.contains('url-load-btn')) { if (!activeCellId) { showNotification('⚠️ Сначала выберите ячейку!', 'error'); return; } const urlInput = document.querySelector('.url-input'); const url = urlInput.value.trim(); if (!url) { showNotification('⚠️ Введите ссылку!', 'error'); return; } const img = document.querySelector(`.cell-image[data-cell-id="${activeCellId}"]`); const indicator = document.querySelector(`.craft-cell[data-cell-id="${activeCellId}"] .empty-cell-indicator`); if (img && indicator) { // Проверяем, что это изображение const testImg = new Image(); testImg.crossOrigin = 'anonymous'; testImg.onload = function() { img.src = url; img.classList.add('loaded'); indicator.style.opacity = '0'; urlInput.value = ''; showNotification('✅ Изображение загружено!', 'success'); }; testImg.onerror = function() { showNotification('❌ Не удалось загрузить изображение', 'error'); }; testImg.src = url; } } }); // Загрузка изображений с компьютера document.addEventListener('change', function(e) { if (e.target.classList.contains('image-input')) { const file = e.target.files[0]; const cellId = e.target.dataset.cellId; if (file && file.type.match('image.*')) { const reader = new FileReader(); reader.onload = function(e) { const img = document.querySelector(`.cell-image[data-cell-id="${cellId}"]`); const indicator = document.querySelector(`.craft-cell[data-cell-id="${cellId}"] .empty-cell-indicator`); if (img && indicator) { img.src = e.target.result; img.classList.add('loaded'); indicator.style.opacity = '0'; // Делаем эту ячейку активной const cell = document.querySelector(`.craft-cell[data-cell-id="${cellId}"]`); if (cell) { document.querySelectorAll('.craft-cell').forEach(c => { c.classList.remove('active'); }); cell.classList.add('active'); activeCellId = cellId; } showNotification('✅ Изображение загружено!', 'success'); } }; reader.readAsDataURL(file); } } }); // Вставка по Ctrl+V document.addEventListener('paste', function(e) { if (!activeCellId) return; const pastedText = e.clipboardData.getData('text'); if (pastedText && (pastedText.startsWith('http') || pastedText.startsWith('data:image'))) { e.preventDefault(); const img = document.querySelector(`.cell-image[data-cell-id="${activeCellId}"]`); const indicator = document.querySelector(`.craft-cell[data-cell-id="${activeCellId}"] .empty-cell-indicator`); if (img && indicator) { // Проверяем изображение const testImg = new Image(); testImg.crossOrigin = 'anonymous'; testImg.onload = function() { img.src = pastedText; img.classList.add('loaded'); indicator.style.opacity = '0'; showNotification('✅ Изображение вставлено!', 'success'); }; testImg.onerror = function() { showNotification('❌ Неверная ссылка на изображение', 'error'); }; testImg.src = pastedText; } } }); console.log('Система крафта готова! Все ячейки созданы.'); </script>[/html]
Поделиться182026-02-14 00:58:23
рабочий код гирлянды с фотками
[html]<div style="position: relative; background: linear-gradient(180deg, #2c1320 0%, #4a1942 50%, #6b2d5c 100%); padding: 30px 20px 50px 20px; border-radius: 15px; min-height: 420px; overflow: hidden; font-family: Georgia, serif;">
<!-- Звёздочки на фоне -->
<div class="vlt2-star" style="top: 8%; left: 10%;">✦</div>
<div class="vlt2-star" style="top: 15%; right: 15%;">✧</div>
<div class="vlt2-star" style="top: 25%; left: 25%;">✦</div>
<div class="vlt2-star" style="top: 12%; right: 35%;">✧</div>
<div class="vlt2-star" style="top: 30%; right: 8%;">✦</div>
<!-- Заголовок -->
<div style="text-align: center; color: #ffb6c1; font-size: 26px; margin-bottom: 10px; text-shadow: 0 0 20px rgba(255,105,180,0.6);">
💌 Be My Valentine 💌
</div>
<!-- Верёвка -->
<div style="position: relative; width: 100%; height: 8px; margin: 20px 0;">
<div style="position: absolute; top: 50%; left: 5%; right: 5%; height: 3px; background: linear-gradient(90deg, transparent, #8b6914, #d4a84b, #8b6914, transparent); border-radius: 2px; box-shadow: 0 2px 4px rgba(0,0,0,0.3);"></div>
<!-- Узелки -->
<div style="position: absolute; top: 50%; left: 5%; width: 8px; height: 8px; background: #8b6914; border-radius: 50%; transform: translate(-50%, -50%);"></div>
<div style="position: absolute; top: 50%; right: 5%; width: 8px; height: 8px; background: #8b6914; border-radius: 50%; transform: translate(50%, -50%);"></div>
</div>
<!-- Контейнер для фоток на прищепках -->
<div style="display: flex; justify-content: center; align-items: flex-start; gap: 15px; flex-wrap: wrap; margin-top: -5px;">
<!-- Фото 1 -->
<div class="vlt2-photo vlt2-photo1">
<div class="vlt2-clip">
<div style="width: 8px; height: 20px; background: linear-gradient(90deg, #ff6b9d, #ff8fab); border-radius: 2px 2px 0 0;"></div>
<div style="width: 14px; height: 6px; background: linear-gradient(90deg, #ff6b9d, #ff8fab); border-radius: 0 0 3px 3px;"></div>
</div>
<div class="vlt2-frame">
<img src="ФОТО_1" style="width: 130px; height: 160px; object-fit: cover; display: block;">
<div class="vlt2-caption">Момент 1 💕</div>
</div>
</div>
<!-- Фото 2 (центральное, побольше) -->
<div class="vlt2-photo vlt2-photo2">
<div class="vlt2-clip">
<div style="width: 10px; height: 24px; background: linear-gradient(90deg, #ff4d79, #ff6b9d); border-radius: 2px 2px 0 0;"></div>
<div style="width: 16px; height: 7px; background: linear-gradient(90deg, #ff4d79, #ff6b9d); border-radius: 0 0 3px 3px;"></div>
</div>
<div class="vlt2-frame vlt2-frame-big">
<img src="ФОТО_2" style="width: 150px; height: 185px; object-fit: cover; display: block;">
<div class="vlt2-caption">Любимое 💖</div>
</div>
</div>
<!-- Фото 3 -->
<div class="vlt2-photo vlt2-photo3">
<div class="vlt2-clip">
<div style="width: 8px; height: 20px; background: linear-gradient(90deg, #ff85a2, #ffadc6); border-radius: 2px 2px 0 0;"></div>
<div style="width: 14px; height: 6px; background: linear-gradient(90deg, #ff85a2, #ffadc6); border-radius: 0 0 3px 3px;"></div>
</div>
<div class="vlt2-frame">
<img src="ФОТО_3" style="width: 130px; height: 160px; object-fit: cover; display: block;">
<div class="vlt2-caption">Момент 3 💗</div>
</div>
</div>
</div>
<!-- Подпись снизу -->
<div style="text-align: center; margin-top: 25px; color: #ffccd5; font-size: 14px; font-style: italic; letter-spacing: 1px;">
✨ С любовью, для тебя ✨
</div>
<!-- Летающие сердечки (фоновая анимация) -->
<div class="vlt2-floating-hearts">
<span class="vlt2-fh" style="left: 5%; animation-delay: 0s;">💕</span>
<span class="vlt2-fh" style="left: 20%; animation-delay: 2s;">💖</span>
<span class="vlt2-fh" style="left: 40%; animation-delay: 4s;">💗</span>
<span class="vlt2-fh" style="left: 60%; animation-delay: 1s;">💝</span>
<span class="vlt2-fh" style="left: 80%; animation-delay: 3s;">💓</span>
<span class="vlt2-fh" style="left: 92%; animation-delay: 5s;">💞</span>
</div>
</div>
<style>
.vlt2-star {
position: absolute;
color: rgba(255, 255, 200, 0.6);
font-size: 12px;
animation: vlt2-twinkle 2s ease-in-out infinite;
}
.vlt2-star:nth-child(2) { animation-delay: 0.5s; }
.vlt2-star:nth-child(3) { animation-delay: 1s; }
.vlt2-star:nth-child(4) { animation-delay: 1.5s; }
.vlt2-star:nth-child(5) { animation-delay: 0.8s; }
@keyframes vlt2-twinkle {
0%, 100% { opacity: 0.4; transform: scale(1); }
50% { opacity: 1; transform: scale(1.3); }
}
.vlt2-photo {
display: flex;
flex-direction: column;
align-items: center;
transform-origin: top center;
cursor: pointer;
transition: transform 0.3s ease;
}
.vlt2-photo1 { animation: vlt2-swing1 3s ease-in-out infinite; }
.vlt2-photo2 { animation: vlt2-swing2 3.5s ease-in-out infinite; }
.vlt2-photo3 { animation: vlt2-swing3 2.8s ease-in-out infinite; }
@keyframes vlt2-swing1 {
0%, 100% { transform: rotate(-3deg); }
50% { transform: rotate(3deg); }
}
@keyframes vlt2-swing2 {
0%, 100% { transform: rotate(2deg); }
50% { transform: rotate(-2deg); }
}
@keyframes vlt2-swing3 {
0%, 100% { transform: rotate(4deg); }
50% { transform: rotate(-4deg); }
}
.vlt2-photo:hover {
animation-play-state: paused;
transform: scale(1.1) rotate(0deg) !important;
z-index: 10;
}
.vlt2-clip {
display: flex;
flex-direction: column;
align-items: center;
filter: drop-shadow(0 2px 3px rgba(0,0,0,0.3));
z-index: 5;
}
.vlt2-frame {
background: white;
padding: 8px 8px 25px 8px;
box-shadow: 0 8px 25px rgba(0,0,0,0.4);
margin-top: -3px;
}
.vlt2-frame-big {
padding: 10px 10px 28px 10px;
}
.vlt2-caption {
text-align: center;
margin-top: 6px;
color: #666;
font-size: 11px;
font-style: italic;
}
.vlt2-floating-hearts {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
overflow: hidden;
}
.vlt2-fh {
position: absolute;
bottom: -30px;
font-size: 18px;
opacity: 0;
animation: vlt2-rise 8s ease-in infinite;
}
@keyframes vlt2-rise {
0% {
opacity: 0;
bottom: -30px;
transform: translateX(0) rotate(0deg);
}
10% { opacity: 0.8; }
90% { opacity: 0.8; }
100% {
opacity: 0;
bottom: 110%;
transform: translateX(20px) rotate(15deg);
}
}
</style>[/html]























