Jump to content
  • 0

Блочная верстка макета


Super_Saimon
 Share

Question

Добрый день! Я с чисто теоретическим вопросом касательно верстки сайта. Столкнулся с одним нюансом, который вызывает затруднения. Лучше начну сразу с нудного и длинного)) примера, так станет в разы понятней в чем суть моего вопроса. Допустим, имеем часть сайта, отвечающую за основной контент... назовем "main". У main есть container, отвечающий за центровку контента. И main делится, в свою очередь, на две части- main__left(блок под меню с возможной рекламой), и main__right (блок с основным контентом).  И вот почти добрался до сути. Далее в main__left я создаю блок для навигации и блок для рекламы, к примеру. А в main__right, допустим, еще две колонки. Так вот, вся моя верстка заключается в том, что  я стараюсь не плодить кучу вложенных блоков. То есть, на конкретном примере, main__right- я  добавлю еще "content__right", "content__left".  И в этих двух блоках буду прописывать и позиционирование относительно родителя, и относительно соседа. А когда смотрю примеры, то там чуть-ли под каждое свойство отдельный вложенный блок.То есть, позиционирование относительно родителя-один блок, позиционирование относительно соседа-делаем вложенный в предыдущем... Я вот не пойму что дает такая модель верстки. И если этот метод, если можно так сказать, "канонический", то где можно про это прочитать чтобы до такого "додуматься")). Я, просто, немало уже перечитал на этот счет(и таких популярных источников как htmlacademy, "Большая книга CSS" и т.д.). И вроде ж все понятно,  а как-то мыслить правильно, что-ли, не получается. Может кто сможет объяснить мне, непутевому, в чем суть, в чем соль? Извиняюсь за такой нелепый вопрос.

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

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

htmlacamedy конечно хороший ресурс, но у них там почти везде используются фиксированные размеры, но ведь вы так не верстаете.

Можно кстати ссылочку на примеры про которые вы говорите? Хотелось бы глянуть

Link to comment
Share on other sites

  • 0

 

14 минуты назад, npofopr сказал:

Я бы не заморачивался. 
Обычно с опытом мозги встают на место, как правильно и удобно делать :-) 

Вам наверно про методологии надо почитать?

Та, вроде, и перечитал немало уже по построению сетки, БЭМ-неймингу, блочной верстке. Все пытаюсь "постичь дзен" касательно этого нюанса)) А чисто на автоматизме не получается верстать как в учебных примерах. И конкретно из-за непонимания, а может и незнания какого-то нюанса... 

3 минуты назад, AlexZaw сказал:

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

htmlacamedy конечно хороший ресурс, но у них там почти везде используются фиксированные размеры, но ведь вы так не верстаете.

Можно кстати ссылочку на примеры про которые вы говорите? Хотелось бы глянуть

Та я в качестве ссылки могу сослаться толки на магнет-ссылки. Занимаюсь по видео урокам с той же html academy, loftschool. Да и в качестве "аксиомы", которую использую для именно того варианта построения, который у меня - правило из БЭМ-методологии по наименованию. А именно-не больше двух уровней вложенности. Может, я, конечно, глупостью занимаюсь... но стараюсь верстать именно в таком русле-что бы не создавать имена через "сто нижних подчеркиваний")) Да и для себя как-то удобнее - не так путаюсь. Один блок за все типы позиционирования, другой чисто за контент, к примеру. 

Link to comment
Share on other sites

  • 0

Академия и loftschool дают базовый уровень знаний, по крайней мере бесплатные уроки у лофтскула, у академии, даже в платных курсах, уровень не очень высокий, да там есть хороший урок по всем вариантам nth-*, но в основном те же базовые знания, поверьте, у меня там пройдены полностью все курсы, хорошо я хоть за них не платил :)

Лучше видео от Лаврика посмотрите, намного полезнее на мой взгляд.

А верстаете вы совершенно правильно, на мой взгляд, я все никак не могу заставить себя верстать по бэм :)

Link to comment
Share on other sites

  • 0

Ну, буду надеяться что вы правы)) Просто... когда видишь что везде данный нюанс отличается от моего исполнения, то закрадывается сомнения в правильности своих действий. Хотя, общаясь недавно с товарищем, который работаем full stack в  nix solutions, услышал его утверждение, что, по факту, единого такого "канонического" метода верстки нету. Ему доводилось видеть практически идентичные типы сайтов, сверстанные с отличиями в данном вопросе. Я так понял, что у каждого верстальщика свой почерк вырабатывается?  

33 минуты назад, AlexZaw сказал:

Академия и loftschool дают базовый уровень знаний, по крайней мере бесплатные уроки у лофтскула, у академии, даже в платных курсах, уровень не очень высокий, да там есть хороший урок по всем вариантам nth-*, но в основном те же базовые знания, поверьте, у меня там пройдены полностью все курсы, хорошо я хоть за них не платил :)

Лучше видео от Лаврика посмотрите, намного полезнее на мой взгляд.

А верстаете вы совершенно правильно, на мой взгляд, я все никак не могу заставить себя верстать по бэм :)

 

Link to comment
Share on other sites

  • 0
5 минут назад, Super_Saimon сказал:

Я так понял, что у каждого верстальщика свой почерк вырабатывается?  

Совершенно верно, кто-то верстает по бэм, кто то использует вложенные селекторы, кто то smacss, кто то другие стили.

Ваш друг прав, единого метода нет, это ведь не сборка высокоточных приборов :) Это почти искусство, всегда можно сказать - я художник, я так вижу :)

Link to comment
Share on other sites

  • 0

в программировании может очень сильно отличаться реализация одного и того же
единственно правильного решения как правило нет
везде есть свои нюансы:
где-то может требоваться лишняя оберточка
кому-то не нужна поддержка старых браузеров
кто-то делает адаптивность через @media, а кто-то просто делает мобильную версию сайта
кто-то не любит jquery или bootstrap, а кто-то пользуется joomla

Link to comment
Share on other sites

  • 0

Спасибо за разъяснения и потраченное время!  Будем дальше тогда "грызть гранит науки" в том же направлении... 

1 час назад, npofopr сказал:

Обычно с опытом мозги встают на место, как правильно и удобно делать

Надеюсь, что поскорее этот момент настанет))) 

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
Answer this question...

×   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'); }, });  
    • By stasN1
      Мне нужен такой результат :

      Не понимаю почему background не применяется вокруг иконок:

       
      Сам код:
      Html:
      css:

      Html:
      <section class="finish"> <div class="container"> <h2 class="finish_header">По окончании обучения Вы сможете!</h2> <div class="finish_divider"></div> <div class="finish_wrapper"> <finish_item> <div class="finish_round"> <img src="/icons/finish/1 (1).png" alt="" class="finish_icon"> </div> <div class="finish_descr">Создать свой сайт или блог</div> </finish_item> <finish_item> <div class="finish_round"> <img src="/icons/finish/2.png" alt="" class="finish_icon"> </div> <div class="finish_descr">Создать свой сайт или блог</div> </finish_item> <finish_item> <div class="finish_round"> <img src="/icons/finish/3.png" alt="" class="finish_icon"> </div> <div class="finish_descr">Обеспечить ему медленный, но верный рост в ТОП</div> </finish_item> <finish_item> <div class="finish_round"> <img src="/icons/finish/4.png" alt="" class="finish_icon"> </div> <div class="finish_descr">Достигнуть стабильного прироста посетителей</div> </finish_item> <finish_item> <div class="finish_round"> <img src="/icons/finish/5.png" alt="" class="finish_icon"> </div> <div class="finish_descr">Достигнуть стабильного прироста посетителей</div> </finish_item> </div> </div> </section>  
      Css:
      .finish .finish_wrapper { margin-top: 41px; display: flex; justify-content: space-between; } .finish .finish_wrapper .finish_item { width: 204px; } .finish .finish_wrapper .finish_item .finish_round { width: 115px; height: 115px; background-color: #b4e2ff; border-radius: 8px; } .finish_descr { font-family: Roboto; font-size: 17px; line-height: 20px; font-weight: 300; color: #efefef; Спасибо!
       

      Уже решил, спасибо!
      У меня CSS селектор вида:
      .finish .finish_wrapper .finish_item .finish_round

      А должен быть:
      .finish .finish_wrapper finish_item .finish_round
      Т.е. без точки перед finish_item, так как это не класс, а элемент
×
×
  • 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