ch
Feedback
Логово верстальщика

Логово верстальщика

前往频道在 Telegram

Логово верстальщиков: HTML, CSS, JavaScript, практики современной верстки, вайбкодинг и использование ИИ в разработке. Личный блог автора - @just_genych По вопросам рекламы или разработки: @g_abashkin

显示更多
8 240
订阅者
-824 小时
-177
+4330
帖子存档
🔎 Подборка зарубежных вакансий Frontend Engineer - JavaScript 🟢React, TypeScript, styled-components, HTML5, CSS3, JavaScript (ES6+), MobX 🟢до 4 000 $ | более 6 лет опыта Angular Developer 🟢Angular 2+, MS SQL, EF Core, OAuth 2.0, JWT, RESTful APIs, Swagger, HTML, CSS/SCSS, Bootstrap, Visual Studio, GitHub 🟢Уровень дохода не указан | 3–6 лет опыта Angular Developer 🟢Angular, TypeScript, CSS, HTML, Intershop, Java 🟢Уровень дохода не указан | более 6 лет опыта

🎭 Меняй роли: тестируй свой код как чужой Когда долго работаешь над фичей, замыливается взгляд. Ошибки могут быть очевидными, но ты их просто не замечаешь. 👉 Совет: перед финальной проверкой представь, что это код не твой, а твоего коллеги. Пройди его с позиции ревьюера. Такой подход помогает находить баги и улучшать логику.

🛡 Парольная защита статичной HTML-страницы на JS Как защитить веб-страницы паролем без серверной поддержки? Инструменты StatiCrypt и Portable Secret помогут зашифровать HTML с использованием AES-256. Статические страницы остаются безопасными даже на публичном хостинге. Читать...

👩‍💻 CSS в 2025: какие фишки теперь доступны? Что нового в CSS появилось в 2024 году и уже поддерживается во всех браузерах? Быстрый обзор свежих фишек, которые можно начинать использовать в 2025 году. Читать...

⚙️ В чем разница между == и === в JavaScript? В JavaScript операторы == и === используются для сравнения, но ведут себя по-разному. == выполняет нестрогое сравнение, при котором JavaScript может преобразовать типы данных для сопоставления значений. В отличие от него, === выполняет строгое сравнение, проверяя как значение, так и тип данных, без приведения типов. ➡️ Пример:
console.log(5 == '5');   // true, так как '5' преобразуется к числу
console.log(5 === '5');  // false, так как разные типы данных

console.log(null == undefined);  // true, при нестрогом сравнении они считаются равными
console.log(null === undefined); // false, строгий оператор учитывает типы данных
🗣️ Использование === рекомендуется для избегания ошибок, связанных с преобразованием типов. Это помогает сделать код более предсказуемым и читаемым.
🖥 Подробнее тут

👩‍💻 Flutter: Создание расширения «Получение ссылок для онлайн-кинотеатров» для Chrome Рассказываю, как сделал расширение для Chrome, которое помогает получать ссылки для скачивания через yt-dlp. Поддерживается сайт friday.ru. Плюс гайд, как написать своё расширение на Flutter. Читать...

📝 Подборка вакансий для сеньоров Frontend-разработчик React (middle+/senior) JavaScript, React, TypeScript, Node.js, CI/CD (GitLab), Unit-тестирование Уровень дохода не указан | от 3 лет FullStack разработчик React, TypeScript, JavaScript, HTML, CSS, Node.js, API, Git Уровень дохода не указан | от 3 лет Senior Frontend Developer VUE.js JavaScript, Vue.js, TypeScript, адаптивная верстка, дизайн мобильных приложений, Figma, Nuxt.js, веб-разработка от 3 000 до 4 000 $ | от 5 лет

👩‍💻 Playbook CSS scroll animation w/ subgrid Сцена с интересной реализацией анимированного скролла. Сделана на Svg, CSS и JavaScript. Открыть код...

👩‍💻 TS Extend: полезная утилитарная функция для расширения type Статья объясняет ограничения TypeScript 5.7 в работе с расширением типов, демонстрирует проблему интерсекции с одинаковыми свойствами и предлагает утилиту Extend для корректной обработки таких случаев. Читать...

👩‍💻 Уникальные значения из массива Напишите функцию, которая принимает массив и возвращает новый массив, содержащий только уникальные значения из исходного массива. Пример:
const numbers = [1, 2, 2, 3, 4, 4, 5];
const uniqueNumbers = getUniqueValues(numbers);
console.log(uniqueNumbers); // [1, 2, 3, 4, 5]
Решение задачи🔽
function getUniqueValues(arr) { return [...new Set(arr)]; } // Пример использования const numbers = [1, 2, 2, 3, 4, 4, 5]; const uniqueNumbers = getUniqueValues(numbers); console.log(uniqueNumbers); // [1, 2, 3, 4, 5]

⚙️ Vite 6.0: Новые возможности и будущее веб-разработки Новая мажорная версия Vite от 26 ноября 2024 года — первый релиз после анонса VoidZero. Рассмотрим ключевые изменения и будущие векторы развития инструмента для сборки приложений. Читать...

Бесплатный практический вебинар: Веб-разработчик: с нуля до мини-игры за 2 часа. ⏰ Когда: 20 февраля в 19:00 по мск. Погрузит
Бесплатный практический вебинар: Веб-разработчик: с нуля до мини-игры за 2 часа. Когда: 20 февраля в  19:00 по мск. Погрузитесь в решение реальной задачи и напишите небольшую игру на HTML, JS и CSS, которая работает прямо в браузере 🎮 Расскажем, что ждут работодатели от джунов, какие есть грейды во фронтенд-разработке и на какую зарплату рассчитывать в перспективе. Какие JS фреймворки учить: Vue, React, а может, Angular? Задайте вопросы опытному спикеру, сделайте первый шаг в направлении новой профессии. 🎁 Всем, кто зарегистрировался - гайд «Как заговорить на сленге IT-специалистов», а каждому участнику -  карта компетенций начинающего Frontend-разработчика и гайд «Как опубликовать страницу в интернете при помощи GitHub Pages»

📝 Подборка вакансий для мидлов Middle Frontend Developer React, JavaScript, TypeScript, Webpack, Git, Jira, Confluence Уровень дохода не указан | 1–3 года React Native Developer React Native, JavaScript, TypeScript, Redux, Git, CI/CD, GraphQL, REST API до 300 000 ₽ на руки | 3–6 лет Фронтенд-разработчик (Vue.js / React) JavaScript, TypeScript, Vue.js, React, Sass, Less, Git, Vite, Docker, CI/CD от 190 000 ₽ на руки | 3–6 лет

⚙️ Что такое теневые DOM-деревья (Shadow DOM) и как они работают? Shadow DOM — это ключевая часть технологии Web Components, которая позволяет создавать инкапсулированные области DOM с собственным стилем и поведением. Теневые DOM-деревья изолированы от остального документа, что предотвращает конфликты стилей и упрощает создание переиспользуемых компонентов. ➡️ Пример:
// Создание элемента с Shadow DOM
const host = document.createElement('div');
const shadowRoot = host.attachShadow({ mode: 'open' });

// Добавление стилей и контента
shadowRoot.innerHTML = `
  <style>
    p {
      color: blue;
    }
  </style>
  <p>Это текст внутри Shadow DOM</p>
`;

document.body.appendChild(host);
console.log(document.querySelector('p')); // null (элемент скрыт из глобального DOM)
🗣️ В этом примере текст внутри Shadow DOM изолирован. Стили из Shadow DOM не влияют на остальную страницу, и наоборот. Shadow DOM полезен для создания самодостаточных UI-компонентов.
🖥 Подробнее тут

👩‍💻 Новые возможности CSS за 2024 год Центрирование без боли, улучшенный тёмный режим, анимация скрытых элементов и даже решения математических задач — меньше сложностей, больше возможностей. Читать...

🔎 Подборка вакансий для джунов Junior Frontend-разработчик Vue 🟢JavaScript, Vue.js, Git, HTML5, ES6, TypeScript 🟢от 60 000 до 90 000 ₽ | Без опыта Junior PHP Backend Developer Yii2 🟢PHP7.4, MySQL, Yii2, jQuery, Git, JavaScript 🟢от 50 000 ₽ | 1–3 года Младший фронтенд разработчик (JS/Vue) 🟢JavaScript, Vue3, Vuex, chart.js, Bootstrap, Git, HTML5, CSS3, SVG 🟢от 60 000 до 80 000 ₽ | 1–3 года опыта

👩‍💻 Анимация загрузочного индикатора Создайте кнопку, при нажатии на которую появляется анимация загрузочного индикатора (спиннера) на 3 секунды. После завершения загрузки спиннер исчезает, а на кнопке отображается текст "Готово!". Решение задачи🔽
<button id="loadButton">Начать загрузку</button> <div id="spinner" class="spinner" style="display: none;"></div> button { padding: 10px 20px; font-size: 16px; cursor: pointer; } .spinner { margin-top: 10px; width: 30px; height: 30px; border: 4px solid #ccc; border-top: 4px solid #007bff; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } const button = document.getElementById('loadButton'); const spinner = document.getElementById('spinner'); button.addEventListener('click', () => { button.disabled = true; button.textContent = 'Загрузка...'; spinner.style.display = 'block'; setTimeout(() => { button.textContent = 'Готово!'; spinner.style.display = 'none'; button.disabled = false; }, 3000); });

👩‍💻 Как мы мигрируем с JQuery на React Обсуждаем миграцию с jQuery на React. В статье — реальный опыт, причины перехода, основные шаги и способы преодоления сложностей. Читать...