feat: add Product-section, Team-section, Process-section and fix comm… - #2
oostap1985 wants to merge 3 commits into
Conversation
There was a problem hiding this comment.
Не очевидное название файла, надо более понятное
| @@ -0,0 +1,14 @@ | |||
| [ | |||
| { | |||
| "img": "open_source", | |||
There was a problem hiding this comment.
Разная нотация названия переменных. Лучше тогда уж везде kebab-case
| "img": "photo1", | ||
| "profession": "инженер программист, изобретатель", | ||
| "description": "Имеет профессиональный опыт более десяти лет. Работал фронтенд и бэкенд-разработчиком, а также занимался инфраструктурой и внедрением инженерных практик. Создатель open source фреймворка mlut, аналога Tailwind для вёрстки кастомных сайтов и креативов.", | ||
| "connection": "yes" |
There was a problem hiding this comment.
Это ведь boolean, зачем строка
| "name": "Олег Остапчук", | ||
| "img": "photo4", | ||
| "profession": "Разработчик", | ||
| "description": "Имеет профессиональный опыт более десяти лет. Работал фронтенд и бэкенд-разработчиком, а также занимался инфраструктурой и внедрением инженерных практик. Создатель open source фреймворка mlut, аналога Tailwind для вёрстки кастомных сайтов и креативов.", |
There was a problem hiding this comment.
Про себя тоже релевантный текст напиши, потом отредактируем
| @@ -0,0 +1,11 @@ | |||
| <div class="D-f Fld-c Gap2u"> | |||
| <div class="Bd1;s;$accent100 Bdrd2u Ov-h W242 md_W326 H144 md_H228"> | |||
There was a problem hiding this comment.
Mnh, вместо H и размеры лучше в u - pixel perfect не нужен
|
|
||
| <profile-card class="D-f Fld-c Ai-c Jc-sb Gap3u no-js W242 Mnh375 lg_W305 lg_Mnh390 xxl_W350"> | ||
| <div class="Ps D-f Fld-c Gap1u"> | ||
| <div class="Bdrd100p Ov-h Ojf Ojp-c -Sz100 lg_-Sz140"> |
There was a problem hiding this comment.
object-fit разве не на сам img вешается?
| const btnText = this.button.textContent; | ||
| const newText = btnText === 'Свернуть' ? 'Подробнее' : 'Свернуть'; | ||
| this.button.textContent = newText; | ||
| this.classList.toggle('no-js'); |
There was a problem hiding this comment.
Почему no-js снимается при переключении, а не при инициализации компонента?
There was a problem hiding this comment.
Я хотел реализовать удаление стилей при клике на кнопку. Если логически 'no-js' не подходит, написал кастомное состояние 'expanded'. Если не правильно, исправлю.
| %> | ||
|
|
||
| <%# Process-section %> | ||
| <process-scroll class="D-f Fld-c Gap2.5u W100p P5u;4u md_Gap10u md_P0;0;0;15u xl_P0;0;0;20u xxl_P0;0;0;25u"> |
There was a problem hiding this comment.
Почему здесь однотипный код не в цикле?
There was a problem hiding this comment.
Сейчас композиция заканчивается обрубком. Лучше, чтобы хотя бы хвост был, как перед концом пункта
There was a problem hiding this comment.
И на этом этапе не требовалось делать анимацию линий, только скролл. Такое надо на webgl, по идее, потому что на CSS может тормозить
There was a problem hiding this comment.
Полностью переделал эту секцию.
| @@ -1,38 +1,30 @@ | |||
| <% | |||
| const css = { | |||
| const stylesCss = { | |||
There was a problem hiding this comment.
Все еще не исправлено. Если словарь заканчивается на css - значит это словарь алиасов. А тут совершенно разные по смыслу значения лежат
There was a problem hiding this comment.
На мобильном в hero секции нет смысла декоратвное изображение показывать
There was a problem hiding this comment.
На квадратном мониторе, в секции "услуги" лучше 2 равные колоники, а то сейчас странно выглядит, что одна шире
| </ul> | ||
| </section> | ||
|
|
||
| <%# Product-section %> |
There was a problem hiding this comment.
На десктопе не соответствует макету
| "name": "first_step", | ||
| "title": "Анализ на начальном этапе", | ||
| "text": "Проводим аудит текущего положения дел по чеклисту продукта на ранней стадии", | ||
| "img": [ |
There was a problem hiding this comment.
Если анимация линий пока не планируется, то зачем их отдельными img делать?
| <div class="Bd1;s;$accent100 Bdrd2u Ov-h W61u H36u md_W77u md_H57u xxl_W104u xxl_H70u"> | ||
| <img src="/assets/img/product/<%= it.img %>.png" class="-Sz100p Ojf-f"/> | ||
| </div> | ||
| <a href="<%= it.url %>" target="_blank" class="D-f Ai-c Gap3u As-fs Fns4u xxl_Fns5u -All-sr C-$accent900 md_C-$brand_h C-$brand500_a -Ts"> |
There was a problem hiding this comment.
Зачем тут -All-sr? Он для списков, как правило или для нативных элементов, где много браузерных стилей
| @@ -0,0 +1,20 @@ | |||
| <% | |||
| const question = { | |||
There was a problem hiding this comment.
Если это словарь с алиасами, то имя должно быть стандартное (с ...css). Да и если 1 алиас, то лучше просто переменную, без словаря
| <div class="D-f Fld-c Ai-c Jc-fs Gap4u Flg1 W100p Fns4u Lnh-n Fnst-n C-$accent900"> | ||
| <span class="Fnw700 lg_Fns6u"><%= it.name %></span> | ||
| <span class="Txa-c xxl_Fns4.5u"><%= it.profession %></span> | ||
| <div class="Flg1 W100p :-expanded_H20u xxl_:-expanded_H18u :-expanded_Ovy-h :-expanded_-Gdl0d,$core100;5p,$accent900;100p :-expanded_Bgcl-t :-expanded_C-tp :-expanded_gradient-text"> |
There was a problem hiding this comment.
Зачем кастомный стейт, если можно контекст использовать?
There was a problem hiding this comment.
Убрал стейт. Сделал контекст (реализовал как "бургер" в header на мобильном), вместо кнопки теперь checkbox и два label. Кастомный компонент теперь не нужен, удалил.
| </div> | ||
| </div> | ||
| <div class="D-f Fld-c Ai-c Jc-fs Gap4u Flg1 W100p Fns4u Lnh-n Fnst-n C-$accent900"> | ||
| <span class="Fnw700 lg_Fns6u"><%= it.name %></span> |
| <% } %> | ||
| </ul> | ||
| </div> | ||
| <nav class=" lg_Od0"> |
There was a problem hiding this comment.
nav лучше только 1 делать на странице. Он вроде был у нас в хедере
|
|
||
| toggleCard() { | ||
| const btnText = this.button.textContent; | ||
| const newText = btnText === 'Свернуть' ? 'Подробнее' : 'Свернуть'; |
There was a problem hiding this comment.
Текстовые литералы в коде не оставляем. Лучше делать словарь с ними, в статическом свойстве, например
| this.prevBtn = this.querySelector('.prev'); | ||
| this.nextBtn = this.querySelector('.next'); | ||
|
|
||
| if (!this.track || !this.prevBtn || !this.nextBtn) { |
|
|
||
| _updateButtonsVisibility() { | ||
| const maxScrollLeft = this.track.scrollWidth - this.track.clientWidth; | ||
| // this.prevBtn.classList.toggle('O0', this.track.scrollLeft <= 0); |
| logo.style.visibility = 'hidden'; | ||
| }, 200); | ||
| if (entry.target === heroSection) { | ||
| visibility.hero = entry.isIntersecting; |
There was a problem hiding this comment.
А почему не использовать сразу просто 1 флаг anyVisible?
| --ml-gradient60: rgba(239, 67, 139, 0.20); | ||
| --ml-gradient65: rgba(239, 67, 139, 0.50); | ||
|
|
||
| scroll-padding-top: var(--ml-headerH); |
There was a problem hiding this comment.
Для всех ссылок - выглядит опасно
| } | ||
|
|
||
| scrollByCard(direction) { | ||
| const slide = this.track.querySelector('.scroll-slide'); |
| } | ||
|
|
||
| const gap = parseFloat(getComputedStyle(this.track).columnGap || 0); | ||
| const cardWidth = slide.getBoundingClientRect().width; |
There was a problem hiding this comment.
И это? Когда так берем размеры - страница пересчитывается
| }; | ||
| %> | ||
| <%# start-section %> | ||
| <section class="Ps W100p D-f Fld-c Ai-c P5u;0;10u md_P10u;0;15u xxl_P20u;0;20u"> |
There was a problem hiding this comment.
В section обязательно должен быть h-заголовок. Если по видимому контенту ничего не подходит, то надо делать скрытый
| active-css="Bgc-$brand100" | ||
| > | ||
| <div class="D-f Ai-c Jc-sb Gap2u W100p"> | ||
| <span class="<%= question.step %>"><%= it.title %></span> |
| blurV: 'Ps-a W12p H100p T0 Bgc-$decor140 Ft -Blr35' | ||
| }; | ||
| %> | ||
| <%# start-section %> |
There was a problem hiding this comment.
Некорректное название секции, пусть и это и коммент
|
|
||
|
|
||
| <% | ||
| const startStyles = { |
There was a problem hiding this comment.
Некорректный нейминг словарей с алиасами
| > | ||
| <div class="D-f Ai-c Jc-sb Gap2u W100p"> | ||
| <span class="<%= question.step %>"><%= it.title %></span> | ||
| <button class="btn arrow-btn Fls0"> |
There was a problem hiding this comment.
Надо сделать, чтобы для открытия/закрытия можно было нажимать на весь компонент, а не только на кнопку
|
|
||
| <!DOCTYPE html> | ||
| <html lang="en"> | ||
| <html lang="en" class="Scb-s -HeaderH10.5u md_-HeaderH23u"> |
There was a problem hiding this comment.
| <html lang="en" class="Scb-s -HeaderH10.5u md_-HeaderH23u"> | |
| <html lang="ru" class="Scb-s -HeaderH10.5u md_-HeaderH23u"> |
| <div class="<%= startStyles.blurG %> B-1p md_B-4p"></div> | ||
| <div class="D-n md_D <%= startStyles.blurV %> L0"></div> | ||
| <div class="D-n md_D <%= startStyles.blurV %> R0"></div> | ||
| <img src="assets/img/rocket2.svg" class="md_D-n Mt2u W100p H-a"/> |
There was a problem hiding this comment.
Правильная адаптивность изображений через <picture> делается
| </section> | ||
|
|
||
| <%# Process-section %> | ||
| <process-scroll class="D-f Fld-c Gap2.5u W100p P5u;4u md_Gap10u md_P0;0;0;15u xl_P0;0;0;20u xxl_P0;0;0;25u"> |
There was a problem hiding this comment.
Возможно специфика моего тачпада, но как будто через раз захватывает скролл, особенно если скролить наверх
| "link": "https://t.me/htmlacademy/7915" | ||
| }, | ||
| { | ||
| "img": "coding-on-mlut", |
There was a problem hiding this comment.
Это изображение в списке ломается, в плане соотношения сторон. object-fit: cover - есть?
Привет.
Это еще не конечный результат. Посмотри, пожалуйста, на анимацию в Process секции, это примерно то, что вы хотели?