Параллакс галерея.
Крутая анимированная галерея с использованием параллакса и различных анимаций, написано с использованием swiper, автор использует динамические величины: vh, vw, чтобы все отображалось адекватно на разных расширениях, заголовок имеет градиентный цвет, а на фоне небольшие блики текущей картинки, что добавляет атмосферности для такой галереи, видео небольшое, но в нем много полезных моментов, которые могут пригодиться в других проектах, демо:
Крутая анимированная галерея с использованием параллакса и различных анимаций, написано с использованием swiper, автор использует динамические величины: vh, vw, чтобы все отображалось адекватно на разных расширениях, заголовок имеет градиентный цвет, а на фоне небольшие блики текущей картинки, что добавляет атмосферности для такой галереи, видео небольшое, но в нем много полезных моментов, которые могут пригодиться в других проектах, демо:
Min(), max() и clamp().
Динамика важна, как часто вам приходилось делать динамический адаптив? Иногда нам сложно манипулировать процентами или другими динамическими величинами в css. Чтобы задать некие рамки для динамических значений можно использовать функции min, max и clamp. У них уже достаточно неплохая поддержка, поэтому если вам не надо поддерживать старые браузеры, то можете смело пользоваться
Синтаксис очень простой: в функцию min через запятую передаём значения, из которых функция вернёт наименьшее, max соответственно — большее. Clamp тоже довольно полезная функция, которая создаёт уже диапазон значений
Приведу простой пример: у нас есть главный экран и фиксированная шапка, экран сделан фулскрином, но контент находиться не по центру экрана, а сдвинут с помощью padding на 30vh вниз. Если просто задать верхний отступ 30vh, то все будет отлично работать, но если высота устройства будет слишком маленькая, то контент будет налезать на шапку, удобным решением будет написать padding-top: max(30vh,100px) тогда если 30vh будет меньше 100px, то все будет отображаться корректно
Прикреплю статью с более подробным описанием работы этих css-функций, в частности и про работу clamp
Динамика важна, как часто вам приходилось делать динамический адаптив? Иногда нам сложно манипулировать процентами или другими динамическими величинами в css. Чтобы задать некие рамки для динамических значений можно использовать функции min, max и clamp. У них уже достаточно неплохая поддержка, поэтому если вам не надо поддерживать старые браузеры, то можете смело пользоваться
Синтаксис очень простой: в функцию min через запятую передаём значения, из которых функция вернёт наименьшее, max соответственно — большее. Clamp тоже довольно полезная функция, которая создаёт уже диапазон значений
Приведу простой пример: у нас есть главный экран и фиксированная шапка, экран сделан фулскрином, но контент находиться не по центру экрана, а сдвинут с помощью padding на 30vh вниз. Если просто задать верхний отступ 30vh, то все будет отлично работать, но если высота устройства будет слишком маленькая, то контент будет налезать на шапку, удобным решением будет написать padding-top: max(30vh,100px) тогда если 30vh будет меньше 100px, то все будет отображаться корректно
Прикреплю статью с более подробным описанием работы этих css-функций, в частности и про работу clamp
Smooth Scroll.
Небольшая библиотека для создания плавного скролла. Я часто использую её в своих проектах, если вам нужно создать кнопку для прокрутки к какому-то блоку или вверх страницы, то можете подключить эту библиотеку, инициализируете библиотеку через
Небольшая библиотека для создания плавного скролла. Я часто использую её в своих проектах, если вам нужно создать кнопку для прокрутки к какому-то блоку или вверх страницы, то можете подключить эту библиотеку, инициализируете библиотеку через
new SmoothScroll
туда передаете нужный вам селектор, например все ссылки a[href*="#"]
и объект со всеми настойками, по-умолчанию speed
, это количество миллисекунд, необходимое для прокрутки на 1000 пикселей, но если вам надо, чтобы прокрутка занимала одинаковое количество времени, то установите speedAsDuration
как true
, еще есть большое количество типов анимации и событий, подробнее:Marico.
Недавно сверстал небольшой многостраничник, сам макет был несложный, но я заметил, что моя верстка значительно улучшилась, и хотя до идеала еще далеко, сама верстка становится более надежной. Из примеров могу привести выпадающее меню, которое сделано с учетом тачскринов и корректно работает, позволяя получить доступ к выпадающему списку и самой ссылке меню. В адаптиве старался поменьше прибегать к изменению каких-то базовых стилей, вместо этого использовал адаптивное свойство и перестраивал где надо структуру, так удавалось меньше времени тратить на адаптив и сохранить нормальное восприятие сайта
Еще сделал небольшую svg анимацию при скрытии/показе пароля у иконки, но думаю это заслуживает отдельного поста, так как тема анимаций у svg ну очень уж обширная, и я даже не знаю и малой доли от всей этой темы, пока мне достаточно точечно что-то применять для выполнения нужных мне задач
Я думаю, что лучше изучать темы по мере их использования и не забивать голову лишней информацией, которая пригодиться в 1/100 случаев, тем более гугл никто не отменял, но это касается только дополнительных тем, все базовые знания должны быть в голове, иначе придется каждый раз гуглить отличия split от splice. А все второстепенные темы можно учить по мере их использования, так как если ты будешь редко их использовать, то, рано или поздно, забудешь их
Недавно сверстал небольшой многостраничник, сам макет был несложный, но я заметил, что моя верстка значительно улучшилась, и хотя до идеала еще далеко, сама верстка становится более надежной. Из примеров могу привести выпадающее меню, которое сделано с учетом тачскринов и корректно работает, позволяя получить доступ к выпадающему списку и самой ссылке меню. В адаптиве старался поменьше прибегать к изменению каких-то базовых стилей, вместо этого использовал адаптивное свойство и перестраивал где надо структуру, так удавалось меньше времени тратить на адаптив и сохранить нормальное восприятие сайта
Еще сделал небольшую svg анимацию при скрытии/показе пароля у иконки, но думаю это заслуживает отдельного поста, так как тема анимаций у svg ну очень уж обширная, и я даже не знаю и малой доли от всей этой темы, пока мне достаточно точечно что-то применять для выполнения нужных мне задач
Я думаю, что лучше изучать темы по мере их использования и не забивать голову лишней информацией, которая пригодиться в 1/100 случаев, тем более гугл никто не отменял, но это касается только дополнительных тем, все базовые знания должны быть в голове, иначе придется каждый раз гуглить отличия split от splice. А все второстепенные темы можно учить по мере их использования, так как если ты будешь редко их использовать, то, рано или поздно, забудешь их
Ошибка пути.
Всем привет, решил поделиться одним багом, а точнее рассказать про его решение. Однажды решил создать react проект с использованием TypeScript, все вроде бы прошло нормально, но при запуске самого приложение не хватало одного webpack модуля. Решил повторно его установить, но ничего не помогло. Решил загуглить, но единственное, что я нашел — это похожий вопрос без единого ответа. После долгих и мучительных поисков, оказалось, что проблема была не в самом "утерянном" модуле или, как может показаться, в неисправной установке, а в пути. Просто папка, в которую я пытался установить проект, содержала
В общем, если у вас появиться проблема, которую вы не можете решить, попробуйте посмотреть на неё с другой стороны, возможно, проблема кроется совсем в другом. Иногда пути решения могут показаться неочевидными, но не стоит сразу бежать и решать в лоб, стоит остановиться и взглянуть на задачу по-другому
Всем привет, решил поделиться одним багом, а точнее рассказать про его решение. Однажды решил создать react проект с использованием TypeScript, все вроде бы прошло нормально, но при запуске самого приложение не хватало одного webpack модуля. Решил повторно его установить, но ничего не помогло. Решил загуглить, но единственное, что я нашел — это похожий вопрос без единого ответа. После долгих и мучительных поисков, оказалось, что проблема была не в самом "утерянном" модуле или, как может показаться, в неисправной установке, а в пути. Просто папка, в которую я пытался установить проект, содержала
#
, что привело к неисправной работе webpackВ общем, если у вас появиться проблема, которую вы не можете решить, попробуйте посмотреть на неё с другой стороны, возможно, проблема кроется совсем в другом. Иногда пути решения могут показаться неочевидными, но не стоит сразу бежать и решать в лоб, стоит остановиться и взглянуть на задачу по-другому
Mustache.js.
Решил немного переделать попапы у себя на сайте, раньше они создавались отдельно для каждого элемента работ и затем, при загрузке новых блоков, их приходилось создавать уже для новых элементов. А еще повторно навешивать обработчик события на них, так как когда скрипт проходился по массиву элементов, то там было одно количество, а после загрузки на странице появились еще элементы, но скрипт уже отработал и не знает, что надо открыть попап по клике на подгрузившийся блок
Убрал обработчик с блоков и поставил его на body, чтобы потом просто отлавливать клик по элементу и по кнопке закрытия попапа сразу. Попапы для каждого блока тоже убрал. Теперь каждый раз по клике на блок работы создается новый попап, куда подставляются значения из объекта, который я создал для каждого блока и поместил в data атрибут, это позволило неплохо оптимизировать сайт и теперь вместо 20 блоков всего лишь 1
Блок попапа я поместил в тег
Решил немного переделать попапы у себя на сайте, раньше они создавались отдельно для каждого элемента работ и затем, при загрузке новых блоков, их приходилось создавать уже для новых элементов. А еще повторно навешивать обработчик события на них, так как когда скрипт проходился по массиву элементов, то там было одно количество, а после загрузки на странице появились еще элементы, но скрипт уже отработал и не знает, что надо открыть попап по клике на подгрузившийся блок
Убрал обработчик с блоков и поставил его на body, чтобы потом просто отлавливать клик по элементу и по кнопке закрытия попапа сразу. Попапы для каждого блока тоже убрал. Теперь каждый раз по клике на блок работы создается новый попап, куда подставляются значения из объекта, который я создал для каждого блока и поместил в data атрибут, это позволило неплохо оптимизировать сайт и теперь вместо 20 блоков всего лишь 1
Блок попапа я поместил в тег
template
, он не рендерится в DOM дереве и служит для взаимодействия с js, это нужно было для того, чтобы для разных языков были разные попапы. Я, конечно, мог поместить верстку попапа в js, но тогда менять текст кнопок для каждого языка было бы затруднительно, а подключать react по мелочи тоже не хотелось. Поэтому решил для более удобного взаимодействия с template использовать библиотеку Mustache.js, она позволяет легко вставлять данные в свой шаблон и удобно работать с объектами. Эта библиотека отлично подходит для того, чтобы быстро получить готовый html, основанный на каких либо данных, тоже самое можно было бы сделать и через нативный js, через тот же insertAdjacentHTML
, но мне было быстрее и удобнее использовать мustache, кому интересно почитать про библиотеку, оставлю статью нижеШахматы на React.
С первого взгляда идея очень крутая: реализация реальных шахмат на react с использованием typeScript и ООП, но на деле все оказалось намного сложнее, так как в шахматах есть много нюансов и довольно замудренных правил. Вышли отличные, но немного недоделанные шахматы с возможностью передвижения фигур, смены хода, подсчета сбитых фигур, таймер и превращение пешки, когда она доходит до конца с выбором фигуры
Основную часть шахмат взял с видео и добавил пару своих фич и функционала, результат можно посмотреть по ссылке:
С первого взгляда идея очень крутая: реализация реальных шахмат на react с использованием typeScript и ООП, но на деле все оказалось намного сложнее, так как в шахматах есть много нюансов и довольно замудренных правил. Вышли отличные, но немного недоделанные шахматы с возможностью передвижения фигур, смены хода, подсчета сбитых фигур, таймер и превращение пешки, когда она доходит до конца с выбором фигуры
Основную часть шахмат взял с видео и добавил пару своих фич и функционала, результат можно посмотреть по ссылке:
Chart.js.
Chart.js — это большая библиотека для создания графиков, гистограмм, радарных диаграмм и тд. Библиотека имеет большой функционал и огромные возможности кастомизации. Есть обширная документация, но, как по мне, в ней мало примеров кода, которые можно сразу скопировать и посмотреть наглядно. Поэтому когда я разбирался с данной библиотекой, то больше искал ответы на stackoverflow или на официальном ютуб канале Chart.js, ниже приведу ссылку на то, что получилось у меня сделать и небольшое видео про данную библиотеку
Chart.js — это большая библиотека для создания графиков, гистограмм, радарных диаграмм и тд. Библиотека имеет большой функционал и огромные возможности кастомизации. Есть обширная документация, но, как по мне, в ней мало примеров кода, которые можно сразу скопировать и посмотреть наглядно. Поэтому когда я разбирался с данной библиотекой, то больше искал ответы на stackoverflow или на официальном ютуб канале Chart.js, ниже приведу ссылку на то, что получилось у меня сделать и небольшое видео про данную библиотеку
LocalStorage и sessionStorage.
Хранилища текстовой информации в браузере. LocalStorage можно сравнить с cookies, но он не отправляется на сервер, а находиться в браузере, соотвественно там можно хранить больше информации(до 5мб). Эта возможность есть только у браузерного api, поэтому не получится обратиться к своему localStorage где-то на сервере
Основное отличия localStorage от sessionStorage можно понять с названия: sessionStorage активен пока активна текущая сессия(вкладка браузера), а localStorage сохраняет данные даже при закрытие браузера, поэтому чаще используют именно localStorage
Давайте попробуем создать переключатель темы на сайте:
1) Создадим ключ через
2) Затем при клике на кнопку будем получать текущее значение
Хранилища текстовой информации в браузере. LocalStorage можно сравнить с cookies, но он не отправляется на сервер, а находиться в браузере, соотвественно там можно хранить больше информации(до 5мб). Эта возможность есть только у браузерного api, поэтому не получится обратиться к своему localStorage где-то на сервере
Основное отличия localStorage от sessionStorage можно понять с названия: sessionStorage активен пока активна текущая сессия(вкладка браузера), а localStorage сохраняет данные даже при закрытие браузера, поэтому чаще используют именно localStorage
Давайте попробуем создать переключатель темы на сайте:
1) Создадим ключ через
localStorage.setItem("theme”, ”light”)
, если ещё не был создан2) Затем при клике на кнопку будем получать текущее значение
localStorage.getItem(“theme”)
и если оно равно строке “light”
, то обращаемся к localStorage.theme = “dark”
, если нет, то наоборот ставим значение light
Хотя localStorage хранит только строки, мы всегда можем передать туда json, только не забывайте при получение объекта из localStorage делать JSON.parse
. Также советую по посмотреть видео на эту тему:Sinauw.
Всем привет! Давно не выходили посты, постараюсь исправиться, думаю нас ждет еще много интересного, буду стараться обо всем рассказывать. На днях закончил верстку лендинга, где было очень много js, на главном экране можно выбрать подходящий курс из предложенных или написать свой, при этом они не могут повторяться + добавил удаление. Также пришлось повозиться с ховерами для карточек курсов, если устройство тачскрин, то показывается просто кнопка, а если есть курсор, то кнопка изначально скрыта и при наведении показывается. Есть плавный скролл к якорю по нажатию на ссылки меню. Еще сделал кастомный видео плеер, он не совсем идеальный, но в целом работает так, как мне надо. В последнем блоке добавил офигенную анимацию сменны оттенка, кому интересно, оставлю ссылку на видео, откуда взял код, анимация реально крутая и делает сайт намного дороже
В планах сделать какое-то fullstack приложение, с большим функционалом и крутым дизайном. Получилась отличная практика, думаю сверстать еще пару макетов, результат и код прикреплю к посту:
Всем привет! Давно не выходили посты, постараюсь исправиться, думаю нас ждет еще много интересного, буду стараться обо всем рассказывать. На днях закончил верстку лендинга, где было очень много js, на главном экране можно выбрать подходящий курс из предложенных или написать свой, при этом они не могут повторяться + добавил удаление. Также пришлось повозиться с ховерами для карточек курсов, если устройство тачскрин, то показывается просто кнопка, а если есть курсор, то кнопка изначально скрыта и при наведении показывается. Есть плавный скролл к якорю по нажатию на ссылки меню. Еще сделал кастомный видео плеер, он не совсем идеальный, но в целом работает так, как мне надо. В последнем блоке добавил офигенную анимацию сменны оттенка, кому интересно, оставлю ссылку на видео, откуда взял код, анимация реально крутая и делает сайт намного дороже
В планах сделать какое-то fullstack приложение, с большим функционалом и крутым дизайном. Получилась отличная практика, думаю сверстать еще пару макетов, результат и код прикреплю к посту:
Переезд в Бельгию.
Всем привет, мир меняется, и если вчера можно было говорить, что такая относительно спокойная, умеренная жизнь может продлиться еще десятки лет, то сегодня это уже кажется какой-то утопией. Сейчас у меня начался довольно непростой этап в жизни — переезд в Бельгию из-за войны в Украине, перспективы жить и учиться во время воздушных тревог, рискуя каждый день, далеко не то, что хочется делать в наши дни, поэтому мы решили уехать
Почему Бельгия? Просто у нас там есть знакомые, которые пол года назад уже туда приехали и неплохо освоились, а больше у нас вариантов и не было. Не знаю на сколько я тут задержусь, ориентировочно пока все не закончится, может вообще прийдется остаться навсегда. В любом случае, впереди долгий этап интеграции, изучения языка, знакомство с культурой. Да и плюсом будет опыт жизни в Европе
Пока страна нравиться, естественно, многое тут по-другому, но при этом очень много схожего, как-никак, живем на одной планете. Буду стараться выкладывать полезные материалы по программированию и делиться успехами в IT и не только
Всем привет, мир меняется, и если вчера можно было говорить, что такая относительно спокойная, умеренная жизнь может продлиться еще десятки лет, то сегодня это уже кажется какой-то утопией. Сейчас у меня начался довольно непростой этап в жизни — переезд в Бельгию из-за войны в Украине, перспективы жить и учиться во время воздушных тревог, рискуя каждый день, далеко не то, что хочется делать в наши дни, поэтому мы решили уехать
Почему Бельгия? Просто у нас там есть знакомые, которые пол года назад уже туда приехали и неплохо освоились, а больше у нас вариантов и не было. Не знаю на сколько я тут задержусь, ориентировочно пока все не закончится, может вообще прийдется остаться навсегда. В любом случае, впереди долгий этап интеграции, изучения языка, знакомство с культурой. Да и плюсом будет опыт жизни в Европе
Пока страна нравиться, естественно, многое тут по-другому, но при этом очень много схожего, как-никак, живем на одной планете. Буду стараться выкладывать полезные материалы по программированию и делиться успехами в IT и не только
ScrollReveal.
Библиотека для создания анимации при скролле. Если нужно быстро добавить простую анимацию на сайт, то можно использовать эту библиотеку, я использовал её в нескольких своих пет-проектах, у нее есть подробная документация, хотя сама библиотека не такая уж и большая, поэтому рассчитывать на какую-то супер сложную анимацию не приходиться. Если вы хотите создать более кастомную анимацию, то лучше написать с нуля, если же вы хотите сделать сайт более привлекательным для пользователя, добавив небольшие анимации при скролле на сайт и сделать это быстро, то вот отличный вариант. Прикреплю ссылку на пример анимации при помощи ScrollReveal, а также гайд по созданию кастомной анимации при скролле
PS: С последним днем лета:)
Библиотека для создания анимации при скролле. Если нужно быстро добавить простую анимацию на сайт, то можно использовать эту библиотеку, я использовал её в нескольких своих пет-проектах, у нее есть подробная документация, хотя сама библиотека не такая уж и большая, поэтому рассчитывать на какую-то супер сложную анимацию не приходиться. Если вы хотите создать более кастомную анимацию, то лучше написать с нуля, если же вы хотите сделать сайт более привлекательным для пользователя, добавив небольшие анимации при скролле на сайт и сделать это быстро, то вот отличный вариант. Прикреплю ссылку на пример анимации при помощи ScrollReveal, а также гайд по созданию кастомной анимации при скролле
PS: С последним днем лета:)