Применение стилей 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'), но это займет много времени, и было бы легко пропустить стили.
Edit: если это невозможно, есть ли бесплатный инструмент, который может извлечь все стили из файла, добавить префикс, а затем сохранить их снова?
7 ответов:
для Bootstrap 3, это проще, если вы используете
less:загрузите исходный код Bootstrap и сделайте такой:
.bootstrap { @import "/path-to-bootstrap-less.less"; @import "/path-to-bootstrap-responsive-less.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.css:npm install -g less lessc style.less style.css
окончательное решение было использовать Сасс (рекомендуется кем-то за пределами сайта), так как это позволяет вам вставлять элементы, а затем автоматически создавать окончательный CSS. Шаг за шагом процесс:
- объединить два файла начальной загрузки (
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.- запустить Сасс на
bootstrap-all.scssчтобы создать окончательный файл CSS.- выполнить Юи компрессора на окончательный файл для получения минимизированной версии.
- добавьте минимизированную версию к элементу head и оберните все, что я хочу, чтобы стили применялись в
<div class="bootstrap"></div>.
Я придумал решение CSS, если вы не можете использовать меньше/SASS из-за работы/других причин.
- я использовал этот сайт,http://www.css-prefix.com/, и скопировать / вставить bootstrap.минута.css туда же. Я установил префикс ='.прихлоп' и прокладка =' '. Это будет префикс всего .бутстрэп разве что не идеально.
- если вы делаете grep для '.bootstrap @media', вы обнаружите, что первый класс справа от открывающей скобки не имеет .загрузчик как родитель. Добавлять.бутстрэп ко всем этим происшествиям, около 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>
Я не был удовлетворен ни одним из этих ответов. Использование меньшего объема правил создавало всевозможные дефекты. 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"на верхнем уровне.
это жестко. Ты не можешь применить различные таблицы стилей css для различных частей одной и той же веб-страницы.
Я подозреваю, что единственный способ сделать это-сделать отдельный файл для вашего контента, чтобы взять стили начальной загрузки, и я-кадр его на страницу следующим образом:
<iframe src="/content-to-take-bootstrap-styles.html" ></iframe>затем в
content-to-take-bootstrap-styles.htmlссылка на таблицу стилей начальной загрузки в заголовке. Но тогда у вас есть все осложнения, например фреймы: элемент iframe не будет расти, чтобы вместить длина вашего контента.
У меня есть простое решение.
скопируйте содержимое css bootstrap к этому (http://css2sass.herokuapp.com/) онлайн-конвертер css в scss/sass.
добавить информацию о теге (например,
div.bootstrap{) до начала содержимого scss и закройте тег в конце.скопируйте все содержимое scss в этот конвертер scss to css (https://www.sassmeister.com/) и преобразовать его :)
вы можете использовать готовый к использованию изолированный css для Bootstrap 4.1 (скомпилированный с меньшим количеством) -
https://github.com/cryptoapi/Isolate-Bootstrap-4.1-CSS-Themes
у него есть изолированный css Для тем -
- bootstrapcustom.минута.css-по умолчанию bootstrap 4.1 изолированный стиль
- https://bootswatch.com/cerulean/ мрачно.минута.css-изолированный css
- https://bootswatch.com/darkly/ категорически.минута.css-изолированный css
- https://bootswatch.com/flatly/ литера.минута.css-изолированный css
- https://bootswatch.com/litera/ люкс.минута.css-изолированный css
- https://bootswatch.com/lux/ Минти.минута.css-изолированный css
- ...
чтобы использовать Bootstrap CSS, просто оберните HTML в div с классом bootstrapiso, например:
<div class="bootstrapiso"> <!-- Any HTML here will be styled with Bootstrap CSS --> </div>и используйте любой стиль css из папки css4. 1 Вот так:
<head> <link rel="stylesheet" href="css4.1/bootstrapcustom.min.css" crossorigin="anonymous"> ... </head>// https://github.com/cryptoapi/Isolate-Bootstrap-4.1-CSS-Themes
готово!
Comments