Подтвердить что ты не робот

Применение стилей CSS только к определенным элементам

У меня есть существующий веб-сайт с большим количеством старых страниц и форм, выложенных таблицами, которые я пытаюсь постепенно переходить на CSS. Я хочу использовать таблицы стилей Twitter Bootstrap, особенно стили для форм, но только на разделах страниц, на которых я их явно просил. Например, я мог бы окружить всю форму в div так:

<div class="bootstrap">
 <!-- everything in here should have the Bootstrap CSS applied -->
 <form>
   <p><label for="text_input">Label</label><input type="text" id="text_input" /></p>
 </form>
</div>

Я хочу, чтобы все остальные формы оставались такими же, как сейчас, потому что я не смогу изменить их все одновременно. Есть ли простой способ сделать это? Я мог бы пройти через каждый стиль в Bootstrap CSS и добавить родительский селектор (например, "p" станет "div.bootstrap p" ), но это займет много времени, и было бы легко пропустить стили.

Изменить: если такая вещь невозможна, есть ли бесплатный инструмент, который может извлечь все стили из файла, добавить префикс и затем сохранить его снова?

4b9b3361

Ответ 1

Последнее исправление заключалось в использовании SASS (рекомендуется кем-то за пределами сайта), поскольку это позволяет вам вставлять элементы, а затем автоматически производят окончательный CSS. Шаг за шагом процесс:

  • Объединение двух файлов Bootstrap (bootstrap.css и bootstrap-responsive.css) в bootstrap-all.css.
  • Создайте новый файл SASS, bootstrap-all.scss, с содержимым div.bootstrap {.
  • Добавить bootstrap-all.css в bootstrap-all.scss.
  • Закройте селектор div.bootstrap, добавив } в bootstrap-all.scss.
  • Запустите SASS на bootstrap-all.scss, чтобы создать окончательный файл CSS.
  • Запустите YUI Compressor в конечном файле, чтобы создать свернутую версию.
  • Добавьте свернутую версию в элемент head и оберните все, к чему я хочу применить стили в <div class="bootstrap"></div>.

Ответ 2

Для Bootstrap 3 это проще, если вы используете less:

Загрузите исходный код Bootstrap и создайте файл style.less следующим образом:

.bootstrap {
    @import "/path-to-bootstrap-less.less";
    @import "/path-to-bootstrap-responsive-less.less";
}

Наконец, вы должны скомпилировать файл меньшего размера; существует много альтернатив

https://github.com/cloudhead/less.js/wiki/Command-Line-use-of-LESS https://github.com/cloudhead/less.js/wiki/GUI-compilers-that-use-LESS.js

Или используйте npm для установки less, затем скомпилируйте файл style.less в style.css:

npm install -g less
lessc style.less style.css

Ответ 3

Я придумал решение CSS, если вы не можете использовать LESS/SASS из-за работы/других причин.

  • Я использовал этот сайт http://www.css-prefix.com/ и копировал/вставлял bootstrap.min.css туда. Я устанавливаю префикс = '. Bootstrap' и spacer = ''. Он будет префикс всего с .bootstrap, за исключением не идеально.
  • Если вы делаете grep для '.bootstrap @media', вы обнаружите, что первый класс справа от открывающей скобки не имеет .bootstrap в качестве родителя. Добавьте .bootstrap ко всем этим встречам, около 68 для меня.
  • Затем замените все ".bootstrap @media" на "@media".
  • Заключительный шаг - заменить все ".bootstrap @" на "@" (должно быть около 5 вхождений).

Пример:

.bootstrap @media (min-width:768px){.lead{font-size:21px}}

необходимо заменить на

@media (min-width:768px){.bootstrap .lead{font-size:21px}}

Вид метода грубой силы, поэтому сначала попробуйте метод LESS/SASS.

<div>
  No Bootstrap
</div>
<div class="bootstrap">
  Yes Bootstrap
</div>

Ответ 4

Я не был удовлетворен ни одним из этих ответов. Использование Менее для охвата правил создало всевозможные дефекты. Clearfix, например, был испорчен. И правила вроде button.close стали button.bootstrap close вместо того, что я действительно хотел: .bootstrap button.close.

Я использовал другой подход. Я использую PostCSS для обработки готового CSS-кода, поставляемого с Bootstrap. Я использую плагин Scopify для охвата каждого правила с помощью .bootstrap.

В основном это происходит. Конечно, существуют правила html и body, которые становятся .bootstrap html и .bootstrap body, которые становятся нечувствительными. Не беспокойтесь... Я могу просто написать преобразование PostCSS, чтобы очистить их:

var elevateGlobalsPlugin = postcss.plugin('elevateGlobals', function(opts) {
    return function(css, result) {
        css.walkRules(function(rule) {
            rule.selector = rule.selector.replace('.bootstrap html', '.bootstrap');
            rule.selector = rule.selector.replace('.bootstrap body', '.bootstrap');
        });
    }
});

Теперь я могу выделить все стили Bootstrap, добавив class="bootstrap" на верхнем уровне.

Ответ 5

Это тяжело. Вы не можете применять различные стили CSS для разных частей одной и той же веб-страницы.

Я подозреваю, что единственный способ сделать это - сделать отдельный файл для вашего контента, чтобы взять стили бутстрапа, и i-frame его на страницу следующим образом:

<iframe src="/content-to-take-bootstrap-styles.html" ></iframe>

то в content-to-take-bootstrap-styles.html  ссылайтесь на лист стиля загрузки в заголовке. Но тогда у вас есть все сложности iframe - например: iframe-элемент не будет расти, чтобы соответствовать длине вашего контента.

Ответ 6

У меня есть простое решение.

  • Скопируйте содержимое бутстрапа css в это (http://css2sass.herokuapp.com/) в онлайн-css конвертер scss/sass.

    /li >
  • Добавьте информацию о теге (например, div.bootstrap{) в начало содержимого scss и закройте тег в конце.

  • Скопируйте весь текст scss в этот scss в css-конвертер (https://www.sassmeister.com/) и преобразуйте его:)