Bootstrap работает с предопределенными классами, вы должны использовать эти классы по назначению.
На моем текущем шаблоне, у меня есть 11 пар атрибут-значение, так что я бы сэкономить 20 ((11-1) * 2) классы, если я мог бы указать это на родителей или элемента шаблона. Это улучшит краткость (и, на мой взгляд, разборчивость ) и уменьшит место для ошибок.
Bootstrap 4 построен с Sass, поэтому вы можете скомпилировать свою версию, которая лучше подходит для вашей ситуации. Из documentation:
Чтобы использовать наш Gruntfile и запустить нашу документацию локально, вам понадобится копия исходных файлов Bootstrap в, Node и Грант. Выполните следующие шаги, и вы должны быть готовы к скале:
- Загрузите и установите узел, который мы используем для управления нашими зависимостями.
- Установите инструменты командной строки Grunt, grunt-cli, с установкой npm -g grunt-cli.
- Перейдите в каталог root/bootstrap и запустите npm install для установки наших локальных зависимостей, перечисленных в package.json.
- Установите Ruby, установите Bundler с комплектом установки gem и, наконец, запустите установку пакета. Это установит все зависимости Ruby, такие как Jekyll и плагины.
По завершении работы вы сможете запускать различные команды Grunt из командной строки.
Для вашей ситуации вы можете использовать Sass @extend
или миксеры Bootstrap.
Sass @extend
См http://sass-lang.com/documentation/file.SASS_REFERENCE.html#extend.
Sass код:
.attribute-value-container {
@extend .container;
> div {
@extend .row;
> div:first-child {
@extend .col-sm-4;
}
> div:last-child {
@extend .col-sm-8;
}
}
}
Теперь вы можете использовать HTML только с 1 attribute-value-container
класс:
<div class="attribute-value-container">
<div>
<div>
Attribute 1
</div>
<div>
Value 1
</div>
</div>
<!-- Multiple additional rows of attribute-value pairs -->
</div>
В приведенном выше вас HTML код меньше, но ваш CSS становится больше. Расширение добавляет селектор в скомпилированный CSS-код.
Составленный CSS код для .row
с будет выглядеть, как показано ниже в настоящее время:
.row, .attribute-value-container > div {
margin-left: -0.9375rem;
margin-right: -0.9375rem; }
.row::after, .attribute-value-container > div::after {
content: "";
display: table;
clear: both; }
В качестве альтернативы вы можете использовать сетку Примеси Bootstrap, см также http://v4-alpha.getbootstrap.com/layout/grid/#sass-mixins:
Sass код:
.attribute-value-container {
@include make-container();
> div {
@include make-row();
@include media-breakpoint-up(sm) {
> div {
@include make-col();
}
> div:first-child {
@include make-col-span(4);
}
> div:last-child {
@include make-col-span(8);
}
}
}
}
Вышеприведенное компилируется в код CSS следующим образом:
.attribute-value-container {
margin-left: auto;
margin-right: auto;
padding-left: 0.9375rem;
padding-right: 0.9375rem; }
.attribute-value-container::after {
content: "";
display: table;
clear: both; }
.attribute-value-container > div {
margin-left: -0.9375rem;
margin-right: -0.9375rem; }
.attribute-value-container > div::after {
content: "";
display: table;
clear: both; }
.attribute-value-container > div > div {
position: relative;
float: left;
min-height: 1px;
padding-left: 0.9375rem;
padding-right: 0.9375rem; }
@media (min-width: 544px) {
.attribute-value-container > div > div:first-child {
width: 33.33333%; }
.attribute-value-container > div > div:last-child {
width: 66.66667%; } }
Вы можете применить вышеуказанный CSS-код к тому же HTML, что и для первого решения.
Использование Примеси, как описаны выше, также делает ваш код CSS больше, но вы можете скомпилировать без предопределенных классов сетки для ситуаций, вы только используете Примесь для сеток:
Sass:
$enable-grid-classes: false;
@import "bootstrap.scss";
благодарит вас @haxtbh , это полезно. Тем не менее, было бы здорово использовать классы Bootstrap, поскольку они обеспечивают гибкие макеты. Я понимаю, что это может быть сделано и с помощью специального CSS, но было бы здорово, чтобы он был доступен «из коробки». – bjornte
Вы не получите это из коробки, потому что это не так, как его следует использовать. Я действительно не вижу причин, по которым вы не кладете классы по каждой строке, как предполагалось. Нет пользы от использования класса для родителя. – haxtbh
В моем текущем шаблоне у меня есть 11 пар атрибут-значение, поэтому я бы сэкономил 20 ((11-1) * 2) классов, если бы мог указать это на родительском или шаблонном элементе. Это улучшит краткость (и, на мой взгляд, разборчивость) и уменьшит количество ошибок. – bjornte