При работе с фреймворком Bootstrap обычно сталкиваются с тремя основными проблемами:


  1. Как поместить контент внизу колонки?
  2. Как создать многорядную галерею колонок одинаковой высоты в одном .row?
  3. Как центрировать горизонтально несколько колонок, если их суммарная ширина меньше 12 единиц и оставшаяся ширина нечетна?

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


Решение третьей проблемы подсмотрено здесь.


Общий код


<style>
    [class*=col-] {position: relative}
    .row-conformity .to-bottom {position:absolute; bottom:0; left:0; right:0}
    .row-centered {text-align:center}   
    .row-centered [class*=col-] {display:inline-block; float:none; text-align:left; margin-right:-4px; vertical-align:top} 
</style>

<script src="assets/conformity/conformity.js"></script>
<script>
    $(document).ready(function () {
        $('.row-conformity > [class*=col-]').conformity();
        $(window).on('resize', function() {
            $('.row-conformity > [class*=col-]').conformity();
        });
    });
</script>


1. Как поместить контент внизу колонки?


<div class="row row-conformity">
    <div class="col-sm-3">
        Я<br>самая<br>высокая<br>колонка
    </div>
    <div class="col-sm-3">
        <div class="to-bottom">
            Я прижат книзу
        </div>
    </div>
</div>

2. Многорядная галерея колонок одинаковой высоты в одном .row


<div class="row row-conformity">
    <div class="col-sm-4">...</div>
    <div class="col-sm-4">...</div>
    <div class="col-sm-4">...</div>
    <div class="col-sm-4">...</div>
    <div class="col-sm-4">...</div>
    <div class="col-sm-4">...</div>
</div>

3. Горизонтальное центрирование нескольких колонок, если их суммарная ширина меньше 12 единиц и оставшаяся ширина нечетна


<div class="row row-centered">
    <div class="col-sm-3">...</div>
    <div class="col-sm-4">...</div>
</div>

Оба класса могут работать вместе


<div class="row row-conformity row-centered">
    ...
</div>
Поделиться с друзьями
-->

Комментарии (32)


  1. DaneSoul
    25.03.2017 22:21
    +2

    Краткость сестра таланта?


  1. Kenya
    26.03.2017 00:29
    +5

    Вот серьезно вообще?) «как решить проблему — скачайте плагин!»


  1. sashabeep
    26.03.2017 01:15

    Еще можно почитать, например, тут.
    Хочется чего-то production ready? посмотреть на Foundation, там флексовая сетка есть со всеми необходимыми автору плюшками. Выравнивание колонок по центру при нечетном количестве и эквализация по высоте есть и без флексов. По какому принципу эта статья вообще попала в RSS — непонятно


  1. Fractalzombie
    26.03.2017 04:11
    -8

    Та ещё и jQuery в 2017 году то.


    1. DaneSoul
      26.03.2017 05:24
      +7

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


      1. SerafimArts
        26.03.2017 08:07
        -2

        А что, если я скажу вам, что вообще всё, что есть в JQuery решается аналогичным способом на чистом JS + CSS и местами ванильный код даже лаконичнее?


        Жизнеспособность Jq обуславливается лишь тучей плагинчиков, написанных в бородатые годы.


        1. DaneSoul
          26.03.2017 08:21
          +10

          Так оно и раньше решалось, JQuery просто сделало для этого более удобный синтаксис и решило проблемы кросс-браузерности. А потом это все уже обросло плагинами и производными типа JQueryUI и стало полноценной экосистемой по сути.
          И в своей нише JQuery будет рулить еще долгие годы, хотя снизу ее будут подпирать чистый JS+CSS, а сверху Angular, React и т.п. — разные задачи, разные средства для решения.


        1. saggid
          26.03.2017 10:54
          +6

          Я уже много раз писал про это в разных местах: jQuery всё равно более удобен в некоторых случаях, чем нативный JS.


          Возьмите, скажем, ту же возможность повесить отслеживатель события на какой-то DOM элемент, который будет перехватывать какие-то конкретные события внутри него на нижележащих DOM элементах. Как такое дело на нативном JS написать быстро и просто?


          Простые и удобные методы для простой анимации, вроде toggle и fadeToggle


          Метод closest для быстрого нахождения ближайшего элемента в вышеидущем дереве.


          Всякие короткие методы для ajax запросов, вроде post и load. Просто делающие код более лаконичным.


          Метод html, который позволит вставить в ваш DOM элемент любой HTML код, и даже если внутри него будут теги <script> — все они будут корректно обработаны, тоже благодаря jQuery. А вы думали что оно само по себе в браузерах заработает через какой-нибудь element.innerHTML = newHtmlData? Не заработает.


          Методы serialize и serializeArray, позволяющие легко получить готовые для отправки POST запросом данные из вашей формы, или получить массив всех её данных.


          Возможно, есть ещё что-то, о чём я и сам до сих пор не знаю. В любом случае, на мой взгляд, jQuery ещё очень рано списывать со счетов. У него достаточно удобных и приятных возможностей, вместе с которыми разработка становится более приятной.


          1. franzose
            26.03.2017 11:50

            С событиями сложновато, да.


            Простые и удобные методы для простой анимации, вроде toggle и fadeToggle

            Что-то подобное можно реализовать с помощью CSS 3.


            Метод closest для быстрого нахождения ближайшего элемента в вышеидущем дереве.

            В современных браузеров он уже реализован, для остальных есть полифилл на MDN.


            Всякие короткие методы для ajax запросов, вроде post и load. Просто делающие код более лаконичным.

            Для этого есть библиотека axios.


            Метод html, который позволит вставить в ваш DOM элемент любой HTML код

            Тут знаний не хватает. А documentFragment так не работает?


            Методы serialize и serializeArray, позволяющие легко получить готовые для отправки POST запросом данные из вашей формы, или получить массив всех её данных.

            Для этого можно один раз найти вменяемую реализацию где-нибудь на StackOverflow и использовать потом везде. Например, serialize.


            1. saggid
              26.03.2017 11:53
              +6

              В этом ведь и дело: зачем париться с установкой другой ajax библиотеки и написанием своих реализаций того, что уже реализовано и протестировано?) Совсем не спорю насчёт CSS3, и я даже делаю так в большинстве случаев. Но иногда хочется сделать всё быстро и просто, и в эти моменты slideToggle и fadeToggle спасают)


              Спасибо за ваше сообщение в любом случае, особенно про closest: не знал про него)


              1. franzose
                26.03.2017 11:57

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

                Ну, например для того, чтобы отказаться от jQuery полностью в пользу чистого JS. Поддержка браузерами сейчас очень хорошая, а для особых случаев почти всегда можно полифилл найти)


                1. Caravus
                  26.03.2017 18:51
                  +4

                  А зачем отказываться от jQuery-то? Что он вам такого сделал, что вы готовы писать кучу кода вручную, лишь бы не пользоваться уже готовыми решениями?


            1. raveclassic
              26.03.2017 12:02
              +3

              Вот те на, называется, век живи, век учись. Спасибо за closest.


            1. saggid
              26.03.2017 12:04

              Тут знаний не хватает. А documentFragment так не работает?

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


              Я просто таким образом многие сайты написал, у меня есть свой маленький компонент ajax навигации по страницам сайта. И вот там как раз эта особенность jQuery и проявила себя: чтобы скрипты в новом html коде "исполнялись", приходится использовать метод из jQuery, ибо по-другому оно не работает. Интернет полон предложениями решения этой проблемы, вот, например. Ну а я просто решил использовать jQuery, ибо он из коробки эту проблему решает.


            1. pudovMaxim
              26.03.2017 13:59
              +6

              С *** сложновато, да.
              Что-то подобное можно
              для остальных есть полифилл
              Для этого есть библиотека
              Тут знаний не хватает. А **** не работает?
              Для этого можно один раз найти вменяемую реализацию где-нибудь на StackOverflow и использовать потом везде. Например, ***.


              Зачем? Есть уже jQuery. Он стандарт «де факто». Он понятен. Он распространен (+ CDN/кэш). Он лаконичен.
              А что делать с Вашими «это отсюда, это оттуда, здесь я сам накостылял, тут не работает»? Как потом коллегам в глаза смотреть? Нет, забывать корни не стоит и не стоит сравнивать знание js и jquery. Но и тиражировать велосипеды тоже не надо.


              1. franzose
                26.03.2017 14:04

                Нормально коллегам в глаза смотреть, если постепенно код рефакторить и не плодить костыли.


                1. pudovMaxim
                  26.03.2017 14:41
                  +5

                  А рефракторить Вы будете за свой счет? Или это будет opensource библиотека? Но тогда почему она, а не jquery(или какая-то другая)?
                  Я понимаю, что в каждой разработке можно найти фатальный недостаток, но нужны какие-то экономико-технические показатели для смены библиотеки.


                  1. franzose
                    26.03.2017 14:57

                    Что значит «за чей счёт»? Идеального кода не существует, поэтому есть необходимость его постепенно улучшать. И фатальные недостатки тут ни при чем, к тому же я говорил не о смене библиотеки, а об отказе от jQuery конкретно, что обусловит меньший размер итогового подключаемого на странице файла как минимум.


                    1. pudovMaxim
                      26.03.2017 15:34
                      +7

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

                      Какие другие библиотеки и на сколько они снизят нагрузку?
                      Я тоже люблю когда всё по-минимуму грузится, но зайдите на любой крупный сайт, юлмарт например, да тот же хабр, посмотрите сколько там картинок, взгляните сколько там маркетингового булшита джаваскрипта и вот вопрос: а что изменится в этом мире, если выбросить с подобного сайта jQuery?

                      Почему мы все должны сегодня же выкинуть jQuery?


            1. saggid
              28.03.2017 22:18
              +1

              Чисто для дополнительного расширения кругозора: нашёл тут сейчас набор рекомендаций о том, как обойтись без жиквери ))


              1. franzose
                29.03.2017 00:58
                +1

                Хм, это мой gist)


                1. saggid
                  29.03.2017 14:40

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


              1. vladalivan
                29.03.2017 12:52
                -1

                Нападки на jquery мне напомнили одну историю, непосредственно касающуюся данной статьи. В былые времена людей, которые для верстки пользовались table, побивали камнями во всех публичных местах. Потому что они выравнивали к низу вот таким образом:


                <table>
                    <tr>
                        <td style="vertical-align:bottom">
                            Прижато книзу
                        </td>
                        ...
                    </tr>
                </table>

                Теперь самый распространенный прием выравнивания к низу (не бутстраповский) такой:


                <div style="display:table; table-layout:fixed; height:100%; width:100%">
                    <div style="display:table-cell; height:100%; vertical-align:bottom">
                        Прижато книзу
                    </div>
                        ...
                </div>

                Те же яйца — только в профиль и более пасхальные!


        1. dom1n1k
          26.03.2017 14:56
          +4

          Не решается аналогично и тем более лаконичнее (ну за исключением некоторых самых элементарных случаев).
          Даже несмотря на большой прогресс браузеров последних лет, ванильная работа с домом все равно громоздка и неудобна. Во-первых, тупо длинее. Во-вторых, всплывает куча мелких нюансов, которые надо учитывать.
          Даже используя современный фреймворк, я все равно подключаю библиотеку для вспомогательных действий с домом, потому что иначе я начинаю медленно, но верно тонуть в лапше (правда, это не jQuery, а аналог полегче).
          И плагины написаны не только в бородатые годы, но и продолжают развиваться сейчас (та же карусель Slick живее всех живых).
          Плеваться от jQuery — это просто хипстерская мода.


      1. evilray
        26.03.2017 10:23

        А jquery, по вашему, не «мега-комбайн? :)


  1. sashamorozov
    26.03.2017 10:22
    +6

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


    1. vladalivan
      26.03.2017 10:22
      -5

      Годик придется еще подождать


      1. Odrin
        27.03.2017 10:04
        +2

        Подождать чего? caniuse.com


        1. vladalivan
          27.03.2017 11:59
          -1

          Не поймите, что я против flex. Просто, у нас еще есть клиенты, которые сидят даже на IE8


          1. Odrin
            27.03.2017 14:21

            Даже для таких анахронизмов есть polyfill. Суть в том, что flexbox — это стандарт, а Ваш плагин — just another js library.


  1. NeoCode
    26.03.2017 11:50
    +1

    А зачем это вообще надо, если обычные html и css вполне высокоуровневые удобные языки с очень широкими возможностями?


    1. JTG
      26.03.2017 14:04
      +2

      Ну поэтому и пишут статьи «7 методов создания колонок одинаковой высоты на удобном высокоуровневом HTML+CSS [путём эксплуатации широких возможностей через задницу]»