2016-10-24 36 views
0

我有一個帶有輸入和textarea元素的表單。我使用bootstrap和我自己的site.css。 site.css位於標記中的boostrap.css之前。我在網站的CSS,看起來像這樣的CSS規則:來自不同樣式表文件的CSS選擇器優先級

.formcontainer input, textarea { 
    background-color: lightgray; 
} 

表單元素也有形式控制類從應用到他們的引導。問題在於輸入元素會優先考慮我網站css中的規則並正確應用背景顏色。但是,對於textarea元素,引導類優先於來自我的site.css的規則。所有表單元素都被包裝在同一個div容器中,並且應用了相同的分解。我無法理解爲什麼元素獲得不同規則的優先順序。

這裏就是輸入得到的背景顏色標記的一個例子,但textarea的不:

<div id="formpart2" class="formcontainer"> 
    <div class="form-group"> 
     <label class="control-label visible-ie8 visible-ie9">Email</label> 
     <div class="input-group"> 
      <input type="text" class="form-control invalid" fieldrequired> 
     </div> 
    </div> 
    <div class="form-group"> 
     <label class="control-label visible-ie8 visible-ie9">Contact Instructions</label> 
     <div class="input-group"> 
      <textarea type="text" class="form-control" rows="10" cols="15" fieldrequired></textarea> 
     </div> 
    </div> 
</div> 
+0

我用Bootstrap遇到過這樣的一些事情。它來自CSS屬性'!important'。這可以添加到級聯列表中的樣式,並且不會被覆蓋,因爲它可以順利進行。 Bootstrap有一些標記爲重要的東西,因此優先考慮。嘗試添加你自己的!重要的。這是一個小提琴的例子。 https://jsfiddle.net/0fqsm8jq/ – Dean

+0

@Dean你***不要使用'!important'。你的建議是真的,我的意思是*真*,壞。在'!important'的使用是合法的情況下,情況確實存在。我敢打賭,你從未遇到過其中之一。推薦使用'!important'來解決css加載問題,這是你可能給OP的最糟糕的建議。 – connexo

+0

@HisDivineShadow您可能希望使用此選擇器來代替'.formcontainer input,.formcontainer textarea {...}'。否則,你的規則會針對任何'input'元素,它是類'.formcontainer'類的後代和元素,並且最重要的是任何textarea(沒有在此需要某個類的父類)。還要注意,這使得textarea的規則不太具體。 – connexo

回答

1

在引導,你可能會發現,開始像這樣的規則:

.formcontainer input, 
.formcontainer textarea { 
    /* whatever */ 
} 

在您嘗試覆蓋,你忘了textarea的背景:

.formcontainer input, 
textarea { 
    background-color: lightgray; 
} 

這使得你的textarea規則不如Bootstraps的規則特殊,所以即使你以正確的順序加載css文件,你的textarea風格也不會覆蓋Bootstrap的textarea風格(假設你在.formcontainer的上下文中)。

我強烈建議你多瞭解一下CSS specificity非常有用如果你想使用CSS,

+0

Bootstrap定義了** form-control **類,它覆蓋了我的規則,因爲我沒有正確格式化規則選擇器(它需要採用第一個規則定義的格式)。再次感謝。 – HisDivineShadow

2

的的site.css是在標記的boostrap.css之前。

這是你的問題。 CSS的工作方式,稍後出現的規則(無論是在一張表中還是在多張表中)都會覆蓋出現在他們面前的規則。切換您的標記,使您的自定義樣式最後 - 即,包括bootstrap.css之前site.css

(另外,請記住,textarea是一個非常通用的選擇你的意思.formcontainer textarea?)

+0

這並不能解釋爲什麼它會爲輸入元素選擇我的(即site.css)規則,但不適用於textarea元素。另外,正如你從我的規則中看到的,我正在使用'.formcontainer textarea'。 – HisDivineShadow

+0

我想我現在看到(因爲@connexo評論)你對textarea選擇器的評論。 – HisDivineShadow

2

css引擎總是優先於.class#id而不是tag-name。您的風格的問題是,您正在使用標籤名稱textarea,其類別爲form-control。所以,css引擎將優先於tag-name優先.form-control。請參閱以下示例。

無法工作

.formcontainer input, 
 
textarea { 
 
    background-color: lightgray; 
 
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> 
 
<div id="formpart2" class="formcontainer"> 
 
    <div class="form-group"> 
 
    <label class="control-label visible-ie8 visible-ie9">Email</label> 
 
    <div class="input-group"> 
 
     <input type="text" class="form-control invalid" fieldrequired> 
 
    </div> 
 
    </div> 
 
    <div class="form-group"> 
 
    <label class="control-label visible-ie8 visible-ie9">Contact Instructions</label> 
 
    <div class="input-group"> 
 
     <textarea type="text" class="form-control" rows="10" cols="15" fieldrequired></textarea> 
 
    </div> 
 
    </div> 
 
</div>

工作原理

input.form-control, 
 
textarea.form-control { 
 
    background-color: lightgray; 
 
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> 
 
<div id="formpart2" class="formcontainer"> 
 
    <div class="form-group"> 
 
    <label class="control-label visible-ie8 visible-ie9">Email</label> 
 
    <div class="input-group"> 
 
     <input type="text" class="form-control invalid" fieldrequired> 
 
    </div> 
 
    </div> 
 
    <div class="form-group"> 
 
    <label class="control-label visible-ie8 visible-ie9">Contact Instructions</label> 
 
    <div class="input-group"> 
 
     <textarea type="text" class="form-control" rows="10" cols="15" fieldrequired></textarea> 
 
    </div> 
 
    </div> 
 
</div>

希望這有助於!

+0

感謝Pranesh,這也是一個很好的答案,並提供了一個很好的替代解決方案。 – HisDivineShadow

+0

@HisDivineShadow不客氣:) –