Skip to content

HW1#1

Open
matiko-ma wants to merge 1 commit intomainfrom
hw_1
Open

HW1#1
matiko-ma wants to merge 1 commit intomainfrom
hw_1

Conversation

@matiko-ma
Copy link
Copy Markdown
Owner

В качестве своего проекта я решила сделать конструктор резюме. Это довольно straightforward сервис: человек заполняет информацию о себе и на выходе получает красиво сверстанное резюме в PDF формате.

Макеты сделаны мной исходя из конкурентов, брендбука Вышки и моей фантазии. Ссылка на Figma.
Брендбук влияет, так как основная ЦА данного сервиса - это студенты Вышки.

В данной домашке я постаралась максимально полно реализовать верстку, но есть недочеты:

  • пока что нет адаптации под другие девайсы, так как мне просто не хватило времени.
  • я так и не разобралась, как стилизовать drop-down list. Это грустно.

Comment thread src/cv_1.html
</div>
</div>
<div class="ltl_block">
<form class="center" action="cv_2.html">
Copy link
Copy Markdown

@emworks emworks Nov 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Семантически верно будет обернуть тегом <form> не только кнопку сабмита, но и все остальные поля этой формы. Более того, от этого напрямую зависит работа нативной html-формы.

Сейчас получается так, что форма и её поля существуют отдельно друг от друга, и при отправке форма как будто бы пустая:

Снимок экрана 2025-11-01 в 22 23 03

А вот так выглядит набор полей формы, если они находятся внутри тега <form>:

Снимок экрана 2025-11-01 в 22 22 25

Конечно, можно и вручную собрать значения всех полей и отправить их запросом на сервер. Но если хочется использовать именно нативную html-форму, то нужно поддерживать семантику.

Вот здесь подробнее о FormData: https://learn.javascript.ru/formdata.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Во второй домашке я и правда собрала все поля вручную. Что будет лучше с семантической стороны: исправить кнопку на просто или все же сделать все формой?

Copy link
Copy Markdown

@emworks emworks Nov 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

С семантической стороны правильно будет сделать просто кнопку без формы, тем более, что функционал формы по сути не используется. Не использовать form для формы не будет ошибкой, в современных фреймворках часто так делается.

С практической (и с учебной, как мне кажется) стороны – лучше постараться максимально обойтись нативными средствами html и минимально использовать js. Поэтому я бы сразу обернул всё в форму. Тем более, при редактировании полей у формы тоже сработает событие change, через которое можно централизованно отслеживать изменения:

2025-11-02.20.07.59.mov

При этом, js кода потребуется меньше (не придётся вешать обработчик change на каждое поле), и читаться он будет проще.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Спасибо, учту!

Comment thread src/cv_1.html
<section class="blocking main">
<div class="input_line">
<h2 class="h2">Желаемая должность:</h2>
<input class="input" placeholder="PR-менеджер">
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

У полей формы должен быть атрибут "name", чтобы при отправке они попали в FormData:

Suggested change
<input class="input" placeholder="PR-менеджер">
<input class="input" name="job_title" placeholder="PR-менеджер">

Comment thread src/styles/main.css
margin-bottom: 15px;
}

.center{
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это по сути утилитные классы. Если хочется привести названия в порядок, можно взять пример наименования из какой-нибудь либы вроде https://tailwindcss.com/.

Например, класс с text-align: center обычно называется .text-center, для цвета часто используют что-то вроде .color-main, для фона – .bg-color-secondary и т.д.

Comment thread src/cv_1.html
</section>
<section class="blocking main">
<div class="input_line">
<h2 class="h2">Желаемая должность:</h2>
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Семантически это <label>, но скринридер этого не поймёт. Если хочется поддержать доступность, но не хочется использовать <label>, то можно добавить инпуту атрибут aria-label.

Comment thread src/index.html
</section>
<section class="blocking pics">
<div class="pics_1">
<img class="imgS" src="./img/img1.jpg" alt="Картинка 1">
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для скринридера важно корректное содержимое alt. Можно оставить alt пустым в некоторых случаях.

Suggested change
<img class="imgS" src="./img/img1.jpg" alt="Картинка 1">
<img class="imgS" src="./img/img1.jpg" alt="Подробное описание картинки 1">

См. подробнее https://doka.guide/html/alt/

Comment thread src/cv_2.html
<input class="input" id="name" placeholder="Константин">
</div>
<div class="input_block">
<label for="name" class="input_head">Фамилия</label>
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Небольшая опечатка, из-за которой при клике на этот label фокус будет выставлен на другое поле – name.

Suggested change
<label for="name" class="input_head">Фамилия</label>
<label for="surname" class="input_head">Фамилия</label>

Comment thread src/cv_4.html
<div class="input_line">
<div class="input_block">
<label for="exp_start" class="input_head">Начало работы</label>
<input type="month" class="input" id="exp_start" placeholder="мм.гггг">
Copy link
Copy Markdown

@emworks emworks Nov 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Для вёрстки использовать input[type=month] можно, но в дальнейшем при реализации функциональности нужно помнить о его поддержке в разных браузерах.

Например, в Firefox и Safari отобразится обычный текстовый инпут. Нюанс в том, что значение даты в таких инпутах будет храниться по-разному: input[type=month] всегда будет хранить дату в формате YYYY-MM, а текстовый инпут – то, что введёт пользователь. Вот иллюстрация обоих вариантов:

Снимок экрана 2025-11-01 в 23 26 04

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

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А как такое можно исправить? Изменить на input[type=date], он вроде во всех браузерах поддерживается? Или есть какие-то дополнительные библиотеки?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, можно переключиться на input[type=date] – там формат всегда будет yyyy-mm-dd.

Если оставить input month, то это тоже ок. Но я бы тогда в качестве минимальной защиты добавил валидацию поля через регулярное выражение. Для этого можно использовать атрибут pattern. В этом случае пользователь при попытке отправки формы с некорректной датой получит ошибку валидации:

Снимок экрана 2025-11-02 в 21 58 54

Также для единообразия я бы поменял placeholder на YYYY-MM, т.к. этот формат по умолчанию используется в input month. Тогда независимо от браузера дата будет отправлена в формате YYYY-MM. Если хочется мм.гггг, то так тоже можно, но тогда придётся нормализовать дату перед сохранением в localStorage/отправкой на сервер и при получении её оттуда и заполнении поля.

Дальше надо смотреть, в каком формате дата ожидается на бэкенде и преобразовывать её к нужному формату, писать код для этого на фронте/бэке, возможно, подключать библиотеки – но это уже out of scope для текущего задания :)

P.S. К слову о валидации – это тоже нативная функциональность html-формы, ещё один аргумент "за" то, чтобы использовать форму. Например, можно легко предотвратить переход к следующему шагу конструктора, если пользователь не заполнил все поля:

Снимок экрана 2025-11-02 в 21 36 37

Comment thread src/cv_3.html
<p>Высшее</p>
<p class="input_years">09.2019 — 06.2023</p>
</div>
<svg class="delete_svg" viewBox="0 0 20 19" width="20" xmlns="http://www.w3.org/2000/svg">
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мне кажется, лучше сразу использовать <button>, чтобы это были кнопки, доступные с клавиатуры.

@emworks
Copy link
Copy Markdown

emworks commented Nov 1, 2025

Комментарии по указанным недочётам.

- пока что нет адаптации под другие девайсы, так как мне просто не хватило времени.

Для поддержки базовой адаптивности можно начать с добавления нескольких правил в блоке @media:

  1. white-space: nowrap; – убрать перенос слов в пунктах меню, чтобы оно растянулось на максимальную длину
  2. overflow-y: auto; – сделать область меню прокручиваемой на маленьких экранах
  3. flex-direction: column; – расположились поля формы одно под другим
  4. подправить отступы (padding)

Результат:

Снимок экрана 2025-11-01 в 23 43 57

Пример правил, которые можно добавить в main.css:

@media (max-width: 600px) {
    .blocking_heading {
        padding: 0;
    }

    .blocking_heading h1 {
        padding: 50px 50px 0;
    }

    .blocking_heading nav {
        overflow-y: auto;
    }

    .blocking_heading .menu_btn {
        white-space: nowrap;
    }

    .blocking {
        padding: 0 50px;
    }

    .input_line {
        flex-direction: column;
    }
}

Можно добавить остальные нужные правила по аналогии.

- я так и не разобралась, как стилизовать drop-down list. Это грустно.

Уже хорошо стилизовано, но если хочется больше – то без JavaScript не обойтись. Причем, лучше сразу подключить скрипт/библиотеку (к примеру, select2), потому что поддержка доступности и разных устройств может оказаться весьма нетривиальной задачей, если писать такой скрипт самостоятельно.

@emworks
Copy link
Copy Markdown

emworks commented Nov 1, 2025

Общий комментарий – кода получилось много, по возможности лучше разбивать решение на шаги/подзадачи и создавать отдельные коммиты на каждом завершенном этапе. Это также помогает во время ревью проследить за мыслью автора и, возможно, что-нибудь подсказать :)

@emworks
Copy link
Copy Markdown

emworks commented Nov 1, 2025

Задание выполнено полностью. Комментарии, оставленные мной выше, являются скорее полезной информацией.

Оценка по итогам кросс-проверки: зачет (2б).


Чек-лист по требованиям к кросс-проверке и критериям задания:

  • Читаемость и понятность кода
  • Отсутствие ошибок
  • Модульность и переиспользуемость кода
  • Соответствие стандартам форматирования и кодирования
  • Соответствие требованиям задания
    • Есть ссылка на вёрстку и исходные макеты
    • Используются семантические теги
    • В стилях использованы CSS-переменные
    • Для задания стилей используются преимущественно классы
    • Классы поименованы в соответствие с бизнес-значением элемента
    • Есть позиционирование элементов с помощью display: flex / display: grid
    • Вёрстка соответствует выбранным макетам
    • * Вёрстка адаптирована под десктоп, планшет и мобильные устройства.
  • это задание было отмечено как дополнительное, поэтому посчитал его вне зачёта.

@matiko-ma
Copy link
Copy Markdown
Owner Author

Спасибо большое за такие подробные комментарии!
Касательно адаптации под другие девайсы, я сделала это в рамках второй домашки. Если интересно, можно посмотреть тут.

@annamotoshkina
Copy link
Copy Markdown

  1. На странице "Профессиональное фото": не для всех инпутов есть лейблы
  2. На странице "Профессиональное фото": Я не поняла по макету, где инпут для загрузки фото
  3. На странице "Профессиональное фото": "Больше советов и примеров фотографий можно найти по ссылке", а ссылки нет
  4. На странице "Профессиональное фото": Вместо input type="submit" лучше использовать кнопку
  5. На странице "Персональные данные": правильнее всю форму обернуть в form, а не только кнопку
  6. В css-переменные можно было вынести все значения, которые повторяются и, скорее всего, будут изменяться согласованно

Есть ссылка на вёрстку и исходные макеты [ok]
Используются семантические теги [mostly ok]
В стилях использованы CSS-переменные [mostly ok]
Для задания стилей используются преимущественно классы [ok]
Классы поименованы в соответствие с бизнес-значением элемента [ok]
Есть позиционирование элементов с помощью display: flex / display: grid [ok]
Вёрстка соответствует выбранным макетам [ok]
Итого: 9/10

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants