Как правильно добавить в данном примере сайдбар и main по бэм?

Ссылка скопирована
14 января 2026 1 ответ

Пример страницы:
Галерея с фильтрацией

Как правильно добавить в данном примере сайдбар и main по бэм?

Шапка и футер также будут использоваться. Возможен ли такой вариант?

<header class="header"></header> <div class="page-wrapper">   <div class="d-flex container-fluid">     <aside class="sidebar">       // класс filter или filters?       <div class="filter">         <div class="filter__item"></div>       </div>     </aside>     <main class="main">       // тут должна быть галерея (возможно такой дизайн в будущем будет поторяться) или миниатюры?        // Возможно использовать обычную сетку grid или лучше на js реализовать?       <div class="gallery">         <a href="#" class="gallery__item">           <img src="" class="gallery__image">           <div class="gallery__thumbnail-info">             <div class="gallery__thumbnail-group">               <div class="gallery__thumbnail-icon"></div>               <div class="gallery__thumbnail-icon"></div>             </div>             <div class="gallery__thumbnail-group">               <div class="gallery__thumbnail-name"></div>             </div>           </div>       </a>   </div>   </main> </div> </div> <footer class="footer"></footer>

<header class="header"></header> <div class="page-wrapper"> <div class="d-flex container-fluid"> <aside class="sidebar"> // класс filter или filters? <div class="filter"> <div class="filter__item"></div> </div> </aside> <main class="main"> // тут должна быть галерея (возможно такой дизайн в будущем будет поторяться) или миниатюры? // Возможно использовать обычную сетку grid или лучше на js реализовать? <div class="gallery"> <a href="#" class="gallery__item"> <img src="" class="gallery__image"> <div class="gallery__thumbnail-info"> <div class="gallery__thumbnail-group"> <div class="gallery__thumbnail-icon"></div> <div class="gallery__thumbnail-icon"></div> </div> <div class="gallery__thumbnail-group"> <div class="gallery__thumbnail-name"></div> </div> </div> </a> </div> </main> </div> </div> <footer class="footer"></footer>

Дополнительно:

Как правильно по бэм назвать сайдбар и main?

Так и назвать: sidebar или aside и main или main-block

// класс filter или filters?

По-русски это фильтр или фильтры? А по-английски?

Кстати, фильтр, это не очень aside.

  • Ankhena, доброго времени суток)
    А вот как вы бы сделали?

    По-русски это фильтр или фильтры? А по-английски?

    Ну по-английски filters)
    А если на какой-то странице будет один фильтр?

    Кстати, фильтр, это не очень aside.

    Получается без aside?

    В целом правильно у меня сделано?)

  • Genri_Rus,

    В целом правильно у меня сделано?)

    Заморачиваться с БЭМ, но забить на семантику? Сложно оценивать это с точки зрения правильности.

    Зачем нужен БЭМ или любая другая методология? Чтобы было быстро понятно и удобно.

  • Ankhena, а что неправильно в семантике?
    Вы имеете ввиду про тег aside?
  • Genri_Rus, спека
  • Ankhena, а могли бы показать ваше ведение на этот счет?
    P.S. Мог бы отметить ваше решение.
  • Genri_Rus, по вашему скрину мало что можно сказать.
    Но начните подбирать теги по смыслу. Можно называть вслух. Например: это список фото. Используем ul.
    Обертка фотки или картинка + её описание? В первом случае берем div, во втором figure и figcaption

    https://doka.guide/html/

    В своё время, я просто примерно раз в месяц перечитывала справочник тегов и свойств. Помню - не помню. И помню ли разные нюансы.

  • Ankhena, мне нужно что-то похожее как тут: ссылка
    Мне главное понять структуру, допустим есть сайдбар и контент.
    Можно же wrapper перед сайдбаром и main добавлять?
  • Genri_Rus,

    Можно же wrapper перед сайдбаром и main добавлять?

    Можно же div перед aside и main добавлять?
    Правила вложенности тегов регламентируются спекой.
    div используется там, где нет подходящих по смыслу тегов. Я выше дала ссылку на спеку, где это написано.

  • Ankhena, а могли бы мини-вариант показать вашей реализации только с html?)
    Возможно у вас все будет гораздо проще чем у меня))
  • Genri_Rus, еще раз: я без понятия кто такие у вас gallery__thumbnail-icon. Почему у картинки две иконки? Почему иконки это дивы? Почему они называются превьюшками?
    На фрипике это кнопки. Ну а кнопки это теги button.
    Если это какие-то метки для пользователя, то должен быть текст. Сами иконки фоном или псевдиками.
    Если это кнопки, то текст тоже должен быть. Хотя бы в aria-label.

    Где конец у ссылки неизвестно.

    Зачем заголовку обертка? Заголовки это теги h1-h6. Если это подпись к картинке, то это figcaption.
    Опять же gallery__thumbnail-name как-то связан с теми двумя иконками? Иконки две, но заголовок у них один?

    Про список уже сказала.

    Про то что фильтр не aside тоже сказала. Тут фильтр скорее выступает в роли навигации и, вероятно, формирует урл (так обычно бывает). Поэтому нельзя сказать, что он не имеет отношения к происходящему.

    Выше я написала тактику: называйте вещи своими именами.

    Чтобы писать разметку нужен конкретный макет из которого можно определить что чем является. У вас он есть, а у меня нет. На основании вашего кода я не могу сделать однозначного вывода, что было в макете. Только весьма приблизительно.

  • Ankhena, при наведении на картинку должны появиться иконки в виде кнопок как на фрипике.

    Про то что фильтр не aside тоже сказала. Тут фильтр скорее выступает в роли навигации и, вероятно, формирует урл (так обычно бывает). Поэтому нельзя сказать, что он не имеет отношения к происходящему.

    Там будет ajax фильтрация с чекбоксами в виде кнопок.

    Чтобы писать разметку нужен конкретный макет из которого можно определить что чем является.

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

  • Genri_Rus,

    при наведении на картинку должны появиться иконки как на фрипике.

    На фрипике это кнопки, а не иконки.

    Ну пусть так

    <ul class="gallery">   <li class="gallery__item picture">     <a class="picture__link">       <img class="picture__img" src="" alt="">     </a>     <div class="picture__more-info">       <h2 class="picture__title">Название фото</h2>       <p class="picture__description">Текст</p>       <ul class="picture__action-list">         <li>           <button class="picture__action">             <span class="visually-hidden">В избранное</span>           </button>         </li>         <li>           <button class="picture__action">             <span class="visually-hidden">Сохранить</span>           </button>         </li>       </ul>     </div>       </li> </ul>

    <ul class="gallery"> <li class="gallery__item picture"> <a class="picture__link"> <img class="picture__img" src="" alt=""> </a> <div class="picture__more-info"> <h2 class="picture__title">Название фото</h2> <p class="picture__description">Текст</p> <ul class="picture__action-list"> <li> <button class="picture__action"> <span class="visually-hidden">В избранное</span> </button> </li> <li> <button class="picture__action"> <span class="visually-hidden">Сохранить</span> </button> </li> </ul> </div> </li> </ul>

    Можно раздробить еще на блоки. Или наоборот, не выделять picture в блок.

  • Ankhena, спасибо большое, очень хороший пример!
    А вот с фильтрами как быть?
    Там тоже ul нужно использовать?
    И там кнопки в виде чекбоксов (кнопки как на фрипике), может есть готовые примеры компонентов с фильтрацией по бэм?
  • Genri_Rus,

    А вот с фильтрами как быть?

    Ну так и быть
    Фильтр - filters или form form--filters
    Филдсет - form__group, form__fieldset, form__item.
    legend - __title, __legend
    список параметров внутри филдсета - __list
    один параметр __characteristic, __parameter
    инпут - __input, __field
    label - __label

    Короче, словарь в руки и вперед.

  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Виктор Sys Ответ

    Для добавления сайдбара и основного контента (main) по методологии БЭМ (Блок-Элемент-Модификатор) в HTML и CSS, вам следует следовать определенным шаблонам и правилам.

    Прежде всего, создайте блоки для сайдбара и основного контента. Назовем их sidebar и main соответственно.

    HTML:

    <div class="sidebar">
        <div class="sidebar__item">Item 1</div>
        <div class="sidebar__item">Item 2</div>
    </div>
     
    <div class="main">
        <div class="main__content">Main Content</div>
    </div>

    <div class="sidebar"> <div class="sidebar__item">Item 1</div> <div class="sidebar__item">Item 2</div> </div> <div class="main"> <div class="main__content">Main Content</div> </div>

    CSS:

    .sidebar {
        width: 25%;
        float: left;
    }
     
    .main {
        width: 75%;
        float: right;
    }
     
    .sidebar__item {
        padding: 10px;
        background-color: #f2f2f2;
    }
     
    .main__content {
        padding: 20px;
    }

    .sidebar { width: 25%; float: left; } .main { width: 75%; float: right; } .sidebar__item { padding: 10px; background-color: #f2f2f2; } .main__content { padding: 20px; }

    В данном примере мы создали два блока - sidebar и main, каждый из которых имеет свои элементы. Sidebar занимает 25% ширины экрана и выравнивается слева, в то время как main занимает 75% ширины и выравнивается справа.

    Элементы внутри сайдбара и основного контента стилизованы соответственно через элементы блоков (sidebar__item и main__content).

    Помните, что важно следовать конвенциям БЭМ и давать понятные имена классам, чтобы ваш код был читаемым и поддерживаемым.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно