Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Управляйте маятником, чтобы построить самую высокую (и устойчивую) башню из падающих сверху постов. Следите за временем на каждый бросок по полоске справа: если она закончится, пост упадет мимо башни.

Башня

Аркады, Строительство, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Frontend + Web-программирование

С этим тегом используют

IT Программирование Javascript IT юмор Веб-разработка Web Программист HTML Все
92 поста сначала свежее
Krikotik
4 года назад

Ниоткуда появляется gulpfile.dev.js⁠⁠

Доброго времени суток, возникла проблема-призрак, которая появилась просто ниоткуда.

В общем, спокойно живет себе моя сборка GULP, но при сохранении изменений в файле gulpfile.js, в папке dist появляется файл gulpfile.dev.js. Он повторяет логику кода обычного gulpfile, но переписывает его на другом синтаксисе. Если честно, я даже толком не нашел информации, что такое ".dev", а уж решить эту проблему мне совсем не мудрено.

Еще одна проблема - в app/scss появляется папка dist при билде проекта, но только с файлом style.css (ОТКУДА ОН ТАМ БЕРЕТСЯ?!!!)
Очень надеюсь на вашу помощь, вот ссылка кода файла gulpfile.js https://codepen.io/TimurTverdokhleb/pen/oNxWNEK?editors=0010 .

А также, прикрепляю фото файловой структуры проекта (пометил стрелочками нужное). ОГРОМНОЕ СПАСИБО!!!!

Ниоткуда появляется gulpfile.dev.js Javascript, Web, Web-программирование, Frontend, Gulp, Программирование
Показать полностью 1
[моё] Javascript Web Web-программирование Frontend Gulp Программирование
26
DELETED
4 года назад

Аккордеон на грязном jQuery⁠⁠

Учебный пример! Не использовать нигде!

HTML

Добавим только триггер и содержимое:

<button class="js-accordion">
 Click me?
</button>
<div class="content">
 Lorem, ipsum dolor sit amet consectetur adipisicing elit. Hic iure eaque id repudiandae autem doloremque asperiores dolorum ullam molestias! Quidem sint quis quam quisquam at rem repellat! Magni, doloribus eaque!
</div>

CSS

Скрываем содержимое по умолчанию:

.content {
 display: none;
}

jQuery

// При клике на кнопку
$('.js-accordion').on('click', function() {
 // раскрываем следующий элемент
 $(this).next().slideToggle();
});

В итоге вся магия в методе .slideToggle(). Можете еще почитать о .next() и .on(), хотя пожалуй не стоит. Лучше посетите мой codepen :)

Показать полностью
[моё] Frontend Javascript Jquery Web IT Программирование Web-программирование Верстка Текст
5
5
DELETED
4 года назад

Аккордеон на чистом JS⁠⁠

Давайте разберемся как сделать аккордеон на ванильном JavaScript.


HTML

<dl>
 <dt class="question js-accordion">
  <button class="question__trigger" type="button">First Question?
 </button>
 </dt>
 <dd class="answer">
  <div>
   Lorem ipsum dolor sit amet consectetur adipisicing elit. Id, itaque quisquam? Quia cum alias in, beatae soluta dicta fuga corrupti magni? Alias minus nostrum qui at corporis, magni optio ipsam!
  </div>
 </dd>
 <dt class="question js-accordion">
  <button class="question__trigger" type="button">Second Question?</button>
 </dt>
 <dd class="answer">
  <div class="answer__content">
   Lorem ipsum dolor sit amet consectetur adipisicing elit. Id, itaque quisquam? Quia cum alias in, beatae soluta dicta fuga corrupti magni? Alias minus nostrum qui at corporis, magni optio ipsam!
  </div>
 </dd>
</dl>
Что сразу бросается в глаза, так это теги dl, dt, dd. Почему нельзя просто везде использовать div?

В принципе, можно, но аккордеон — это хороший пример списка из терминов и определений, для чего эти теги и предназначены.


Разберем по частям:

<dt class="question js-accordion">
 <button class="question__trigger" type="button">First Question?
 </button>
</dt>

В dt помещаем вопрос, но для чего оборачивать его в кнопку? Опять семантика: когда пользователь кликает на элемент — что-то должно произойти, для этого необходимо использовать button.

Вторая причина — доступность через клавиатуру: на аккордеон можно попасть через tab и раскрыть через пробел.

<dd class="answer">
 <div>
  Lorem ipsum dolor sit amet consectetur adipisicing elit. Id, itaque quisquam? Quia cum alias in, beatae soluta dicta fuga corrupti magni? Alias minus nostrum qui at corporis, magni optio ipsam!
 </div>
</dd>

В dd кладем ответ, обернутый в дополнительный div?

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

.answer {
 overflow: hidden;
 height: 0;
 transition: height 0.5s;
}

В неактивном состоянии тег answer имеет нулевую высоту, поэтому мы помещаем в него дополнительный div, размер которого мы и будем измерять.

Как только аккордеон будет раскрыт — мы присвоим answer ранее измеренную высоту.

JavaScript

Найдем все аккордеоны на странице и инициализируем их:

const elements = [...document.querySelectorAll('.js-accordion')];
elements.forEach(accordion);

Воспользуемся замыканием:

function accordion(element) {
 // объект, в котором будем хранить всю необходимую информацию
 const instance = {};
 function init() {
  // найдем вопрос и ответ
  findElements(instance, element);
  // измерим высоту ответа
  measureHeight(instance);
  // добавим логику нажатия на кнопку
  subscribe(instance);
 }
 init();
}

findElements

function findElements(object, element) {
 const instance = object;
 // element - это "вопрос", по которому происходит нажатие
 instance.element = element;
 // target - это "ответ", который должен "раскрываться"
 instance.target = element.nextElementSibling;
}
Если вспомнить разметку — ответ всегда идет следом за вопросом, поэтому мы и используем свойство nextElementSibling.


measureHeight

function measureHeight(object) {
 const instance = object;
 // вычисляем высоту ответа
 instance.height = object.target.firstElementChild.clientHeight;
}
В то время, как target имеет нулевую высоту, у его потомка размер остался тем же. Этот самый размер мы и сохраняем.subscribe

Аккордеон на чистом JS Аккордеон, Javascript, Frontend, Web, IT, HTML, Программирование, Web-программирование, Гифка, Длиннопост

У answer высота — 0, а у answer__content — нет

subscribe

function subscribe(instance) {
 instance.element.addEventListener('click', (event) => {
  // отменяем "действие по умолчанию"
  event.preventDefault();
  // меняем состояние аккордеона
  changeElementStatus(instance);
 });
 // если размер окна поменяется - измерим высоту ответа заново
 window.addEventListener('resize', () => measureHeight(instance));
}

changeElementStatus

function changeElementStatus(instance) {
 if (instance.isActive) {
  hideElement(instance);
 } else {
  showElement(instance);
 }
}
Если аккордеон активен — сворачиваем его, иначе — раскрываем.


hideElement и showElement

function hideElement(object) {
 const instance = object;
 const { target } = instance;
 // обнуляем высоту ответа
 target.style.height = null;
 // делаем статус неактивным
 instance.isActive = false;
}
function showElement(object) {
 const instance = object;
 const { target, height } = instance;
 // задаем ответу сохраненную в measureHeight высоту
 target.style.height = `${height}px`;
 // делаем статус активным
 instance.isActive = true;
}

Аккордеон на чистом JS Аккордеон, Javascript, Frontend, Web, IT, HTML, Программирование, Web-программирование, Гифка, Длиннопост

Как всегда — демо на codepen.

Показать полностью 2
[моё] Аккордеон Javascript Frontend Web IT HTML Программирование Web-программирование Гифка Длиннопост
9
IPdoor
4 года назад

И ТУТ ОНИ⁠⁠

И ТУТ ОНИ
[моё] Javascript Программирование IT Frontend IT юмор Юмор Web Web-программирование
0
11
DELETED
4 года назад

Анимированный пузырь / SVG⁠⁠

Сегодня научимся создавать вот такие вещи без javascript и canvas:

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Рисуем пузырь

— Заходим на figma.com и создаем новый файл;

— Выбираем Pen или жмем клавишу P.

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Рисуем прямоугольник — жмем Done.

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Удалим обводку и заполним прямоугольник веселым цветом.

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Давайте наконец сделаем из квадрата то, что нам нужно.

Жмем кнопку Edit Object.

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Теперь Bend Tool

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Жмем на сторону квадрата. Должны появится вот такие точки:

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Тянем одну из них вверх:

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Как видим — фигура искривляется. На этом мои глубокие познания в figma и векторной графике кончаются. Поэтому просто проделываем подобный трюк для всех четырех точек.

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Отлично, пузырь готов. Он будет нашей «стартовой» позицией.

Скопируем его и поставим рядом.

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Снова жмем Edit Object — Bend Tool и немного меняем пузырь справа.

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

То что получилось — это состояние фигуры, к которой будет стремится изначальная:
start → finish → start → finish → ∞
Скачаем, то что получилось:

— Выделяем вектора;

— Выбираем svg как расширение;

— Жмем Export.

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Скачиваем и распаковываем архив


Объедим два SVG в один анимированный

Откроем скачанные svg и создадим один новый:

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Скопирую содержимое start в result:

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

В result.svg сделаю тег <path /> парным — <path></path>:

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Удалю атрибуты width и height чтобы не мешались.

Во viewBox установлю максимально возможные значения высоты и ширины:

— в start.svg ширина = 363, а в finish.svg = 364. Беру 364;

— в start.svg высота = 302, а в finish.svg = 311. Беру 311.

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Ключевой момент: анимировать будем с помощью тега animate.

Обратите внимание на поддержку браузеров!
Вкладываем его внутрь path:

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Коротко по атрибутам:

— repeatCount — сколько раз произойдет анимация. Устанавливаем indefinite чтобы задать бесконечное число итераций;

— attributeName — имя атрибута, который будем анимировать. В нашем примере это d, где хранятся координаты фигуры;

— dur — длительность анимации.


Добавим еще один — values. Скопипастим в него значение атрибута d из текущего тега path:

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Добавим в него же значение атрибута d из файла finish.svg:

Анимированный пузырь / SVG Svg, Animated, Frontend, IT, Web, Анимация, Верстка, Web-программирование, Гифка, Длиннопост

Третьей строку копипастим из первой дабы замкнуть анимацию:

<animate repeatCount="indefinite" attributeName="d" dur="10s"
values="M314 46.0001C253 0 137 -28 52.9999 46.0001C-31.0001 120 -1.0002 202 52.9999 248C107 294 247 340 314 248C381 156 375 92.0001 314 46.0001Z;
M302.348 71.5969C209 -48 69.1956 6.19389 41.3478 71.5969C13.5 137 -35.5 223 41.3478 273.597C118.196 324.194 233.195 322.694 302.348 273.597C371.5 224.5 395.695 191.194 302.348 71.5969Z;
M314 46.0001C253 0 137 -28 52.9999 46.0001C-31.0001 120 -1.0002 202 52.9999 248C107 294 247 340 314 248C381 156 375 92.0001 314 46.0001Z;"></animate>

Результат:

Как выглядит вы можете посмотреть в самом начале статьи.

Сюда же я скину сам svg:
<svg viewBox="0 0 364 311" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M314 46.0001C253 0 137 -28 52.9999 46.0001C-31.0001 120 -1.0002 202 52.9999 248C107 294 247 340 314 248C381 156 375 92.0001 314 46.0001Z" fill="#FFCC00">
<animate repeatCount="indefinite" attributeName="d" dur="10s"
values="M314 46.0001C253 0 137 -28 52.9999 46.0001C-31.0001 120 -1.0002 202 52.9999 248C107 294 247 340 314 248C381 156 375 92.0001 314 46.0001Z;
M302.348 71.5969C209 -48 69.1956 6.19389 41.3478 71.5969C13.5 137 -35.5 223 41.3478 273.597C118.196 324.194 233.195 322.694 302.348 273.597C371.5 224.5 395.695 191.194 302.348 71.5969Z;
M314 46.0001C253 0 137 -28 52.9999 46.0001C-31.0001 120 -1.0002 202 52.9999 248C107 294 247 340 314 248C381 156 375 92.0001 314 46.0001Z;"></animate>
</path>
</svg>

И codepen, где можно наглядней с ним ознакомится.

Показать полностью 18
[моё] Svg Animated Frontend IT Web Анимация Верстка Web-программирование Гифка Длиннопост
9
4
TheGodRA
5 лет назад
Web-технологии

Что такое frontend?⁠⁠

Всем привет. Начал изучать программирование и тут встал вопрос, frontend или backend? Понятие backend и что от него требуется я сразу понял. А вот понять frontend я не могу. Я понимаю это то, что мы видим с вами - картинки, буквы, кнопки итд. Но вот вопрос, если я начну изучать front-end, то нужно ли мне так же быть креативным в творчестве, дизайне, а также изучать иллюстрации и Фотошоп? Или фронтенд это чисто кто видит сайт под уже готовый шаблон сайта? Объясните мне пожалуйста. Просто не могу понять куда идти, тк творчески я не сильно развит, по мне как лучше это циферки. Всем спасибо за ответ

Web Web-программирование Frontend Backend Программирование Текст
27
0
DELETED
5 лет назад

Задаем соотношение сторон изображению / HTML&CSS⁠⁠

I. Через фоновое изображение

- Создаем div;

- Задаем ему нулевую высоту;

- Задаем ему фоновое изображение;

- Обнуляем размер фонового изображения;

- Создаем псевдоэлемент before;

- Наследуем фон от родителя;

- Делим высоту на ширину и умножаем результат на сто чтобы получить значение для padding-top;

- В результате получаем следующие стили:

.image {
 background-size: 0 0;
}

.image:before {
 content: '';
 display: block;
 padding-top: 56.25%;
 background-image: inherit;
 background-repeat: no-repeat;
 background-size: cover;
}
Пример на codepen.


II. Через свойство object-fit.

Если поддержка браузеров вас устраивает и вы знаете значение одной из сторон картинки, то вы можете использовать свойство:

object-fit: cover;

Если ширина картинки равна 500px, а соотношение сторон должно быть 4:3, то все что остается сделать это:

(3 / 4) * 500 = 375

В итоге стили будут выглядеть примерно так:

img {
 width: 500px;
 height: 375px;
 object-fit: cover;
}

Если вам интересно то, о чем я пишу - можете заглянуть ко мне в группу вк или телеграм канал.

Показать полностью
[моё] HTML CSS Верстка Frontend Картинки Web-программирование Пропорции Web Текст
0
10
DELETED
5 лет назад

Увеличить зону кликабельности ссылки — HTML/CSS⁠⁠

Допустим у нас есть страница с превью новостей:

Увеличить зону кликабельности ссылки — HTML/CSS Frontend, Web-программирование, Ссылка, Верстка, Теги, HTML, CSS, Фронтендеры

Необходимо сделать ссылкой не только подзаголовок, но и картинку.

Способа три: плохой, злой, хороший.


Плохой

Просто обернуть и заголовок, и картинку в ссылку:

<div>
 <a href="#"><img src="image.jpg"></a>
 <h2><a href="#">text</a></h2>
</div>

Злой

Обернуть все в одну ссылку:

<a href="#">
 <img src="image.jpg">
 <h2>text</h2>
</a>

Хороший

Разместить ссылку в заголовке. Расширить область ссылки на всю карточку с помощь псевдоэлемента :before:

<div>
 <img src="image.jpg">
 <h2><a href="#">text</a></h2>
</div>

<style type="text/css">
div {
 position: relative;
}

a:before {
 content: '';
 position: absolute;
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;
}
</style>

Конечно я утрирую и вы можете использовать любой из этих трех вариантов, но мой совет использовать последний :)

Показать полностью
[моё] Frontend Web-программирование Ссылка Верстка Теги HTML CSS Фронтендеры
32
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии