feat(static): Added static files for index.html
This commit is contained in:
1 parent
db88e750e2
commit
ed135ecafe
4 files changed
+355
No files matched your search
@@ -0,0 +1,270 @@
|
||||
:root {
|
||||
--bg-dark: #0d1117;
|
||||
--bg-card: #161b22;
|
||||
--primary: #f9802d;
|
||||
--primary-light: #ff9a52;
|
||||
--text-primary: #ffffff;
|
||||
--text-secondary: #c9d1d9;
|
||||
--text-muted: #8b949e;
|
||||
--border-color: #30363d;
|
||||
--transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Inter', sans-serif;
|
||||
background-color: var(--bg-dark);
|
||||
color: var(--text-primary);
|
||||
line-height: 1.6;
|
||||
padding: 20px;
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--primary);
|
||||
text-decoration: none;
|
||||
transition: var(--transition);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--primary-light);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.container {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 30px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.container {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
/* Шапка */
|
||||
.header {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 30px;
|
||||
padding: 30px;
|
||||
background-color: var(--bg-card);
|
||||
border-radius: 12px;
|
||||
border: 1px solid var(--border-color);
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.photo-section {
|
||||
flex: 0 0 200px;
|
||||
}
|
||||
|
||||
.photo-slider {
|
||||
position: relative;
|
||||
width: 200px;
|
||||
height: 250px;
|
||||
overflow: hidden;
|
||||
border-radius: 8px;
|
||||
border: 2px solid var(--primary);
|
||||
}
|
||||
|
||||
.slider-image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
transition: opacity 1s ease-in-out;
|
||||
}
|
||||
|
||||
.slider-image.active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.slider-controls {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: 10px;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.slider-dot {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 50%;
|
||||
background-color: var(--text-muted);
|
||||
cursor: pointer;
|
||||
transition: var(--transition);
|
||||
}
|
||||
|
||||
.slider-dot.active {
|
||||
background-color: var(--primary);
|
||||
transform: scale(1.2);
|
||||
}
|
||||
|
||||
.info-section {
|
||||
flex: 1;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 5px;
|
||||
color: var(--text-primary);
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 1.2rem;
|
||||
color: var(--primary);
|
||||
margin-bottom: 15px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.contacts {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||
gap: 15px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.contact-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.contact-icon {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
background-color: rgba(249, 128, 45, 0.1);
|
||||
border-radius: 6px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
/* Карточки */
|
||||
.card {
|
||||
background-color: var(--bg-card);
|
||||
border-radius: 12px;
|
||||
padding: 25px;
|
||||
border: 1px solid var(--border-color);
|
||||
margin-bottom: 20px;
|
||||
transition: var(--transition);
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
border-color: var(--primary);
|
||||
box-shadow: 0 0 15px rgba(249, 128, 45, 0.1);
|
||||
}
|
||||
|
||||
.card-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
margin-bottom: 20px;
|
||||
color: var(--primary);
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.card-title i {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
/* Навыки */
|
||||
.skill-item {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.skill-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.skill-bar {
|
||||
height: 10px;
|
||||
background-color: #30363d;
|
||||
border-radius: 5px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.skill-level {
|
||||
height: 100%;
|
||||
background-color: var(--primary);
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
/* Список */
|
||||
.list {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.list li {
|
||||
padding: 8px 0;
|
||||
position: relative;
|
||||
padding-left: 25px;
|
||||
}
|
||||
|
||||
.list li:before {
|
||||
content: "•";
|
||||
color: var(--primary);
|
||||
position: absolute;
|
||||
left: 0;
|
||||
font-size: 1.5rem;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.two-column-list {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.two-column-list {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
/* Футер */
|
||||
.footer {
|
||||
text-align: center;
|
||||
margin-top: 40px;
|
||||
padding: 20px;
|
||||
color: var(--text-muted);
|
||||
border-top: 1px solid var(--border-color);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.repo-link {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
background-color: rgba(249, 128, 45, 0.1);
|
||||
padding: 10px 20px;
|
||||
border-radius: 6px;
|
||||
margin-top: 15px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.repo-link:hover {
|
||||
background-color: rgba(249, 128, 45, 0.2);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.section-divider {
|
||||
height: 1px;
|
||||
background-color: var(--border-color);
|
||||
margin: 25px 0;
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 79 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,85 @@
|
||||
// Устанавливаем текущую дату
|
||||
const currentDate = new Date();
|
||||
const options = { year: 'numeric', month: 'long', day: 'numeric' };
|
||||
document.getElementById('currentDate').textContent = currentDate.toLocaleDateString('ru-RU', options);
|
||||
|
||||
// Массив с путями к фотографиям (локальные файлы)
|
||||
const photos = [
|
||||
"/static/images/image1.jpg",
|
||||
"/static/images/image2.jpg"
|
||||
];
|
||||
|
||||
// Создаем слайдер
|
||||
const sliderContainer = document.getElementById('photoSlider');
|
||||
const sliderControls = document.getElementById('sliderControls');
|
||||
let currentSlide = 0;
|
||||
|
||||
// Создаем изображения и точки управления
|
||||
photos.forEach((photo, index) => {
|
||||
// Создаем изображение
|
||||
const img = document.createElement('img');
|
||||
img.src = photo;
|
||||
img.alt = `Фото Кирилла Ремизова ${index + 1}`;
|
||||
img.classList.add('slider-image');
|
||||
if (index === 0) img.classList.add('active');
|
||||
sliderContainer.appendChild(img);
|
||||
|
||||
// Создаем точку управления
|
||||
const dot = document.createElement('div');
|
||||
dot.classList.add('slider-dot');
|
||||
if (index === 0) dot.classList.add('active');
|
||||
dot.dataset.index = index;
|
||||
dot.addEventListener('click', () => {
|
||||
goToSlide(index);
|
||||
});
|
||||
sliderControls.appendChild(dot);
|
||||
});
|
||||
|
||||
// Функция переключения слайда
|
||||
function goToSlide(index) {
|
||||
// Скрываем текущий слайд
|
||||
document.querySelectorAll('.slider-image').forEach(img => {
|
||||
img.classList.remove('active');
|
||||
});
|
||||
|
||||
// Убираем активный класс у точек
|
||||
document.querySelectorAll('.slider-dot').forEach(dot => {
|
||||
dot.classList.remove('active');
|
||||
});
|
||||
|
||||
// Показываем выбранный слайд
|
||||
const slides = document.querySelectorAll('.slider-image');
|
||||
const dots = document.querySelectorAll('.slider-dot');
|
||||
if (slides[index]) slides[index].classList.add('active');
|
||||
if (dots[index]) dots[index].classList.add('active');
|
||||
currentSlide = index;
|
||||
}
|
||||
|
||||
// Автоматическое переключение слайдов каждые 30 секунд
|
||||
let slideInterval = setInterval(() => {
|
||||
currentSlide = (currentSlide + 1) % photos.length;
|
||||
goToSlide(currentSlide);
|
||||
}, 30000);
|
||||
|
||||
// Пауза при наведении на слайдер
|
||||
sliderContainer.addEventListener('mouseenter', () => {
|
||||
clearInterval(slideInterval);
|
||||
});
|
||||
|
||||
// Возобновление при уходе курсора
|
||||
sliderContainer.addEventListener('mouseleave', () => {
|
||||
slideInterval = setInterval(() => {
|
||||
currentSlide = (currentSlide + 1) % photos.length;
|
||||
goToSlide(currentSlide);
|
||||
}, 30000);
|
||||
});
|
||||
|
||||
// Добавляем небольшую анимацию при загрузке страницы
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
document.body.style.opacity = '0';
|
||||
document.body.style.transition = 'opacity 0.5s ease';
|
||||
|
||||
setTimeout(() => {
|
||||
document.body.style.opacity = '1';
|
||||
}, 100);
|
||||
});
|
||||
Reference in new issue
Block a user