Jump to content

Оцените верстку


Alisa1711
 Share

Recommended Posts

Здравствуйте. Постараюсь коротко. Это мой второй проект, просто тренировочный макет. Нет адаптива, нет css-рюшек, вроде плавных переходов, нет js и даже нет  половины состояний для элементов (но это потому, что их не было в макете). Html и css. Их и прошу оценить. Понимаю, что нормальным людям лень оценивать, поэтому у меня есть несколько более или менее конкретных вопросов. Надеюсь, не слишком странных:

  1. Меня беспокоит организация маргинов и паддингов. По-моему, она "некрасивая". Есть такое понятие "красивая организация отступов"?
  2. Мне кажется, что я нашла не лучшее решение для огромных тортов на фоне. Дивы с абсолютным позиционированием, из-за чего пришлось прописать body  overflow-x: hidden
  3. Стали бы вы делать плиточную раскладку категорий тортов grid'ами или это "микроскопом гвозди"? 
  4. Правильно ли я понимаю, что если мне захочется оживить слайдеры, то придется немного менять разметку и стили?
  5. Как вы относитесь к br в верстке? (-:  Например, в блоке выбора размера торта:
    <label class="cake-size" for="two-kg">
      <input class="hidden" type="radio" form="order-form" name="cake-size" id="two-kg">
      <span class="mass medium">2 кг</span>
      <span>23-24 см<br>(10–12 персон)</span>
    </label>
  6. Практикуется ли именование классов по БЭМ на лендингах? (-:

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

Ссылка на страницу и на гит

P.P.S. как склеить коммиты теперь? )

 

Link to comment
Share on other sites

9 часов назад, Alisa1711 сказал:

P.P.S. как склеить коммиты теперь?

Коммиты последовательные, а не параллельные. Значит что последующий содержит предыдущие изменения. «Склеивать» не требуется, так как в последнем есть все изменения.

Link to comment
Share on other sites

В 11.05.2018 в 23:22, Alisa1711 сказал:

Мне кажется, что я нашла не лучшее решение для огромных тортов на фоне. Дивы с абсолютным позиционированием, из-за чего пришлось прописать body  overflow-x: hidden

Да действительно не лучшее решение... скрытие прокрутки горизонтальное это плохой тон, особенно в вашем случае, т.к. это фикс лейаут, а если кто-то откроет страничку в размере меньшего вашего контейнера, то попросту не увидит край сайта.

Большой торт вам было бы проще добавить фоном в section и там позиционировать через background-position , и тем самым вам не нужен блок с этим тортом и соответственно убрать overflow-x hidden

 

 

В 11.05.2018 в 23:22, Alisa1711 сказал:

Стали бы вы делать плиточную раскладку категорий тортов grid'ами или это "микроскопом гвозди"? 


Можно сделать и гридами, и флексами, и float блоками, разница в простоте подхода и поддержкой браузера если есть такие требования... Можно и гриды, как для практики, через годик, можно будет уже полным ходом их использовать без зазрения совести))))

 

 

В 11.05.2018 в 23:22, Alisa1711 сказал:

Как вы относитесь к br в верстке? (-:  Например, в блоке выбора размера торта:

нормально, если у вас строчный элемент, где нужен переход на новую строчку, почему бы и нет. Вполне нормально юзать бр...
Но не делайте ими отступы между элементами или секциями, для этого есть марижины или паддинги

 

В 11.05.2018 в 23:22, Alisa1711 сказал:

Правильно ли я понимаю, что если мне захочется оживить слайдеры, то придется немного менять разметку и стили?

Возможно, все зависит от текущей верстки, наследования и требования плагина, если вы будете использовать его...
Но это не значит что вам придется его переделывать с нуля))))

 

В 11.05.2018 в 23:22, Alisa1711 сказал:

Меня беспокоит организация маргинов и паддингов. По-моему, она "некрасивая". Есть такое понятие "красивая организация отступов"?

Главное поменьше юзать отрицательные значения в маржины...
 

Link to comment
Share on other sites

В 11.05.2018 в 00:22, Alisa1711 сказал:

Меня беспокоит организация маргинов и паддингов. По-моему, она "некрасивая". Есть такое понятие "красивая организация отступов"?

Со временем этому научитесь.  

 

В 11.05.2018 в 00:22, Alisa1711 сказал:

Мне кажется, что я нашла не лучшее решение для огромных тортов на фоне. Дивы с абсолютным позиционированием, из-за чего пришлось прописать body  overflow-x: hidden

Если поменять bg на intro wrapper например 6удет норм, и тогда лишний див сможете убрать.

 

В 11.05.2018 в 00:22, Alisa1711 сказал:

Стали бы вы делать плиточную раскладку категорий тортов grid'ами или это "микроскопом гвозди"? 

Я так понимаю это макет академии , а у них уже давно на flex'ах все курсы. Там же еще мобильная версия и планшетная, еще и контент прыгает местами, так что в этом случае весь макет думаю под flexbox заточен.
Grid'ы рано юзать еще. 
 

В 11.05.2018 в 00:22, Alisa1711 сказал:

Как вы относитесь к br в верстке? (-:  Например, в блоке выбора размера торта:

Я бы тоже так сделал еще и контакты внизу с br к примеру. 

Link to comment
Share on other sites

Спасибо за ответы. 

В 18.05.2018 в 10:53, vladmih сказал:

Главное поменьше юзать отрицательные значения в маржины...

А почему? В принципе они валидны и иногда могут помочь решить проблему. Например, в обсуждаемом макете отрицательные маргины могли бы решить проблему "заезжания" фон в интро секции "Наши торты". Или их юзанье может как-то аукнуться?

 

P.S. Вопрос не в тему, а на странице с точки зрения семантики всегда должен быть <header>? Например, в приложенной картинке можно сделать header'ом все до списка. А можно и вместе со списком . А можно двумя секциями intro  и features, например?  Т.е. на странице будет только main и footer. Кстати, если все, что до списка header, то без отрицательных маргинов не понятно как сделать фон, ибо весь последующий контент будет в main.

арбитраж.jpg

Link to comment
Share on other sites

В 21.05.2018 в 20:48, Alisa1711 сказал:

Спасибо за ответы. 

А почему? В принципе они валидны и иногда могут помочь решить проблему. Например, в обсуждаемом макете отрицательные маргины могли бы решить проблему "заезжания" фон в интро секции "Наши торты". Или их юзанье может как-то аукнуться?

 

P.S. Вопрос не в тему, а на странице с точки зрения семантики всегда должен быть <header>? Например, в приложенной картинке можно сделать header'ом все до списка. А можно и вместе со списком . А можно двумя секциями intro  и features, например?  Т.е. на странице будет только main и footer. Кстати, если все, что до списка header, то без отрицательных маргинов не понятно как сделать фон, ибо весь последующий контент будет в main.

арбитраж.jpg

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

- Насчет семантики -  это же просто смысловые разделы. Каждый разработчик видит по своему структуру страницы, поэтому каждый делает так как посчитает правильным. Как Вам больше душе угодно так и делайте. 
Короче говоря особо не зацикливайтесь на этом.... 

 

Edited by Alexej
Link to comment
Share on other sites

В 21.05.2018 в 19:48, Alisa1711 сказал:

А почему? В принципе они валидны и иногда могут помочь решить проблему. Например, в обсуждаемом макете отрицательные маргины могли бы решить проблему "заезжания" фон в интро секции "Наши торты". Или их юзанье может как-то аукнуться?

Я не имею ввиду что их не использовать совсем...
Например часто бывает, начинающие разработчики, не разобравшись откуда ростут отступы, начинают поджимать контент с отрицательным маржином, потом что-то убирается, и этот маржин приходится править...

Вы должны предполагать, что после вас, возможно кому-то придется с этим, работать, а если там ад, то хочется просто удавиться, о того как народ отрицительными маржинами блок поднимает, или бывает даже позиционированием относительным...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By zeiger2
      Здравствуйте! У меня стоит задача, что при наведении на блок li строка должна поменять цвет, в том числе и картинка. Я меняю картинку с помощью 
      background-image: none;     background: url(../img/check_icon_red.png) left no-repeat;   Но теперь картинка позицианируется не там где должна, её можно поставить на место только вручную, через -100px. Нужно поставить ровно туда, где она была. Должна быть в одном ряду с другими
    • By Mix9
      есть див с 5 img, при уменьшении экрана див выходит за него. Я добавил overflow: auto для этого div в надежде на то, что я смогу прокручивать фотки с помощью скроллбара, однако даже с ним почему-то я не вижу часть фоток которые вышли за границу. Что с этим можно сделать? класс video повторяется 5 раз, я тут оставил только 1 
      .content{ width: 90%; background-color: #333; } .video{ margin: 0px 4px 0px 4px; width: 310; display: flex; flex-direction:column; } .video_button_text{ margin-top: 10px; display: flex; flex-direction: row; font-size: 20px; color: white; } .video_text_div{ display: inline-block; width: 250px; } .video_text{ text-align: justify-all; margin: 0px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .slidan_videos{ margin: 0px 10px 0px 20px; overflow: auto; width: auto; margin-bottom: 50px; display: flex; flex-direction: row; justify-content: space-around; } <div class="content"> <div class = slidan_videos> <div class = video> <div> <a href = 'ссылка'><img class="img" src=""картинка"></a> </div> <div class = video_button_text> <div class = avatarka_div> <a href="ссылка" target="_blank"><img class = avatarka src="картинка"></a> </div> <div class = video_text_div> <p class = video_text><a href="ссылка">текст</a></p> </div> </div> </div>
    • By Марко
      Добрый день. Начинающий программист, столкнулся с проблемой. Селектор .class не работает должным образом. Несмотря на правильное, я надеюсь, описание, на web-странице не отображается ни одно изображение. С чем может быть связано? Заранее спасибо за помощь. 



    • By Kaido
      Использую готовый плагин для модальных окон(от MaxGraph). Проблема в том, что когда у меня открыто два модальных окна, для примера Форма + Политика конфендициальности, и мне нужно закрыть политику вместе с ней закрывается и другое модальное окно. В JS я не сильно разбираюсь(собственно из за этого и использую готовый плагин), можете помочь кто работал с этим плагином? Я примерно понимаю как он работает, но реализовать чтобы закрывалось только одно не получается.
       
        <div class="content"> <button class="modal-btn" data-path="first" data-animation="fadeInUp" data-speed="1500">Открыть окно 1</button> </div> <div class="modal"> <div class="modal__wrapp" data-target="first"> <div class="modal__content"> <button class="modal__close">Закрыть</button> модальное окно <button data-path="policy">Политика</button> </div> </div> <div class="modal__wrapp" data-target="policy"> <div class="modal__content"> <button class="modal__close">Закрыть</button> политика </div> </div> </div> .modal { --transition-time: 0.3s; position: fixed; left: 0; top: 0; right: 0; bottom: 0; z-index: 1000; cursor: pointer; overflow-y: auto; overflow-x: hidden; text-align: center; opacity: 0; visibility: hidden; transition: opacity var(--transition-time), visibility var(--transition-time); } .modal__wrapp { display: none; cursor: default; width: fit-content; height: fit-content; } .modal__content{ position: absolute; left: 500px; width: 500px; height: 500px; display: flex; color: white; flex-direction: column; text-align: left; background-color: #000; } .modal__content button{ width: 200px; height: 50px; margin: 50px 0; } .modal.is-open { opacity: 1; visibility: visible; transition: opacity var(--transition-time), visibility var(--transition-time); } .modal__wrapp.modal-open { display: flex; } .disable-scroll { position: relative; overflow: hidden; height: 100vh; position: fixed; left: 0; top: 0; width: 100%; } .fade { opacity: 0; transition: opacity var(--transition-time); } .fade.animate-open { opacity: 1; transition: opacity var(--transition-time); } .fadeInUp { opacity: 0; transform: translateY(vw(-100)); transition: opacity var(--transition-time), transform var(--transition-time); } .fadeInUp.animate-open { opacity: 1; transform: translateY(0); transition: opacity var(--transition-time), transform var(--transition-time); } .modal__wrapp[data-target="policy"] .modal__content{ left: 1050px; background-color: #000; opacity: .5; } class Modal { constructor(options) { let defaultOptions = { isOpen: () => {}, isClose: () => {}, } this.options = Object.assign(defaultOptions, options); this.modal = document.querySelector('.modal'); this.speed = false; this.animation = false; this.isOpen = false; this.modalContainer = false; this.previousActiveElement = false; this.fixBlocks = document.querySelectorAll('.fix-block'); this.focusElements = [ 'a[href]', 'input', 'button', 'select', 'textarea', '[tabindex]' ]; this.events(); } events() { if (this.modal) { document.addEventListener('click', function(e){ const clickedElement = e.target.closest('[data-path]'); if (clickedElement) { let target = clickedElement.dataset.path; let animation = clickedElement.dataset.animation; if (clickedElement.classList.contains('modal-close')) { this.close(); } let speed = clickedElement.dataset.speed; this.animation = animation ? animation : 'fade'; this.speed = speed ? parseInt(speed) : 300; this.modalContainer = document.querySelector(`[data-target="${target}"]`); this.open(); return; } if (e.target.closest('.modal__close')) { this.close(); return; } }.bind(this)); window.addEventListener('keydown', function(e) { if (e.keyCode == 27) { if (this.isOpen) { this.close(); } } if (e.keyCode == 9 && this.isOpen) { this.focusCatch(e); return; } }.bind(this)); this.modal.addEventListener('click', function(e) { if (!e.target.classList.contains('modal__wrapp') && !e.target.closest('.modal__wrapp') && this.isOpen) { this.close(); } }.bind(this)); } } open() { this.previousActiveElement = document.activeElement; this.modal.style.setProperty('--transition-time', `${this.speed / 1000}s`); this.modal.classList.add('is-open'); this.disableScroll(); this.modalContainer.classList.add('modal-open'); this.modalContainer.classList.add(this.animation); setTimeout(() => { this.options.isOpen(this); this.modalContainer.classList.add('animate-open'); this.isOpen = true; this.focusTrap(); }, this.speed); } close() { if (this.modalContainer) { this.modalContainer.classList.remove('animate-open'); this.modalContainer.classList.remove(this.animation); this.modal.classList.remove('is-open'); this.modalContainer.classList.remove('modal-open'); this.enableScroll(); this.options.isClose(this); this.isOpen = false; this.focusTrap(); } } focusCatch(e) { const focusable = this.modalContainer.querySelectorAll(this.focusElements); const focusArray = Array.prototype.slice.call(focusable); const focusedIndex = focusArray.indexOf(document.activeElement); if (e.shiftKey && focusedIndex === 0) { focusArray[focusArray.length - 1].focus(); e.preventDefault(); } if (!e.shiftKey && focusedIndex === focusArray.length - 1) { focusArray[0].focus(); e.preventDefault(); } } focusTrap() { const focusable = this.modalContainer.querySelectorAll(this.focusElements); if (this.isOpen) { focusable[0].focus(); } else { this.previousActiveElement.focus(); } } disableScroll() { let pagePosition = window.scrollY; this.lockPadding(); document.body.classList.add('disable-scroll'); document.body.dataset.position = pagePosition; document.body.style.top = -pagePosition + 'px'; } enableScroll() { let pagePosition = parseInt(document.body.dataset.position, 10); this.unlockPadding(); document.body.style.top = 'auto'; document.body.classList.remove('disable-scroll'); window.scroll({ top: pagePosition, left: 0 }); document.body.removeAttribute('data-position'); } lockPadding() { let paddingOffset = window.innerWidth - document.body.offsetWidth + 'px'; this.fixBlocks.forEach((el) => { el.style.paddingRight = paddingOffset; }); document.body.style.paddingRight = paddingOffset; } unlockPadding() { this.fixBlocks.forEach((el) => { el.style.paddingRight = '0px'; }); document.body.style.paddingRight = '0px'; } } const modal = new Modal({ isOpen: (modal) => { console.log(modal); console.log('opened'); }, isClose: () => { console.log('closed'); }, });  
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy