[英]Applying CSS styles only to certain elements
我有一個現有的網站,其中包含許多舊頁面和表格,我正試圖逐漸過渡到 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'),但這會花費很長時間,而且很容易錯過樣式。
編輯:如果這樣的事情不可能,是否有免費工具可以從文件中提取所有樣式,添加前綴,然后再將它們保存回來?
對於 Bootstrap 3,使用less
會更容易:
下載 Bootstrap 源代碼並制作一個style.less
文件,如下所示:
.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.less
文件編譯為style.css
:
npm install -g less
lessc style.less style.css
最終的修復是使用SASS (由不在現場的人推薦),因為它允許您嵌套元素,然后自動生成最終的 CSS。 一步一步的過程是:
bootstrap.css
和bootstrap-responsive.css
)連接到bootstrap-all.css
中。bootstrap-all.scss
,內容div.bootstrap {
。bootstrap-all.css
附加到bootstrap-all.scss
。}
附加到bootstrap-all.scss
來關閉div.bootstrap
選擇器。bootstrap-all.scss
上運行 SASS 以生成最終的 CSS 文件。<div class="bootstrap"></div>
中。如果你因為工作/其他原因不能使用 LESS/SASS,我想出了一個 CSS 解決方案。
例子:
.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>
我有一個簡單的解決方案。
將 bootstrap css 內容復制到此 ( http://css2sass.herokuapp.com/ ) 在線 css 到 scss/sass 轉換器。
將您的標簽信息(例如div.bootstrap{
)添加到 scss 內容的開頭,並在末尾關閉標簽。
將整個 scss 內容復制到此 scss 到 css 轉換器 ( https://www.sassmeister.com/ ) 並轉換它:)
我對這些答案中的任何一個都不滿意。 使用 Less 來確定規則的范圍會產生各種缺陷。 例如,Clearfix 就一團糟。 像button.close
這樣的規則變成button.bootstrap close
而不是我真正想要的: .bootstrap button.close
。
我采取了不同的方法。 我正在使用PostCSS來處理隨 Bootstrap 提供的開箱即用的 CSS。 我正在使用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');
});
}
});
現在,我可以通過在頂層添加一個class="bootstrap"
來隔離所有 Bootstrap 樣式。
那是艱難的。 您不能為同一網頁的不同部分應用不同的 css 樣式表。
我懷疑這樣做的唯一方法是為您的內容制作一個單獨的文件以采用引導程序樣式,然后將其 i-frame 到頁面中,如下所示:
<iframe src="/content-to-take-bootstrap-styles.html" ></iframe>
然后在content-to-take-bootstrap-styles.html
中引用標題中的引導樣式表。 但是你會遇到 iframe 的所有復雜問題——例如:iframe 元素不會增長以適應你的內容的長度。
您可以為 Bootstrap 4.1(使用 LESS 編譯)使用現成的獨立 css -
https://github.com/cryptoapi/Isolate-Bootstrap-4.1-CSS-Themes
它有獨立的主題 CSS -
要使用 Bootstrap CSS,只需將 HTML 包裝在一個帶有類 bootstrapiso 的 div 中,如下所示:
<div class="bootstrapiso">
<!-- Any HTML here will be styled with Bootstrap CSS -->
</div>
並使用文件夾 css4.1 中的任何 css 樣式,如下所示:
<head>
<link rel="stylesheet" href="css4.1/bootstrapcustom.min.css" crossorigin="anonymous">
...
</head>
// https://github.com/cryptoapi/Isolate-Bootstrap-4.1-CSS-Themes
完畢!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.