標籤:

CSS 中已設置的屬性怎麼去掉?

只能覆蓋,不能改源文件。

比如原來設置postion left=0,現在想改成right=0,有什麼辦法?

同時設置貌似left起作用。


對於默認不繼承(inherited 為 no)的屬性,你可以查文檔,看要覆蓋掉的屬性初始值(initial value)是什麼,然後設置為這個值。比如你這個例子中,left 屬性初始值為 auto,你就可以設置 left: auto; right: 0。CSS 中還有一個屬性值關鍵字 initial,可以把任意屬性設置為初始值(left: initial,這樣不需要去一個個查初始值是什麼了)。需要注意的是,IE 不支持這個屬性。

但如果你要覆蓋的屬性是一個默認繼承的屬性(inherited 為 yes),而其父元素中又至少有一個設置了該屬性(如果全都沒設置,那麼都從根元素繼承,此時根元素會取此屬性的初始值),那你可以使用 inherit 這個關鍵字,讓這個屬性「恢復」成從父元素繼承樣式。

CSS 中現在有一個叫做 unset 的關鍵字,它會對上面不同類型的屬性分別起到 initial 和 inherit 的效果。為啥要有這樣一個關鍵字呢?因為這會使得書寫更簡單,我不再需要在重置時去考慮這個屬性是哪種類型然後區分 initial 和 inherit 了。另外因為 CSS 增加了快速設置所有屬性的 all 屬性,這樣可以在不區分具體屬性時快速 reset 樣式,寫法也很簡單:all: unset。unset 的瀏覽器支持度比 all 稍好一些,具體的自己查資料吧。

問題又來了,上面的這些寫法,會把瀏覽器默認樣式也抹去,全部恢復成 CSS 規範定義的初始樣式,這往往也不是我們期望的。於是 CSS Cascading and Inheritance Level 4 中又增加了 revert 關鍵字,表示重置當前樣式來源(style origin)的樣式。也就是說我們如果寫在 HTML 中引入的代碼里,不會影響瀏覽器默認樣式。不過目前只有 Safari 實現了這個屬性值。


這個還是涉及到一些細節的,剛好今天寫了這麼一篇博文,無意中又看到一個這樣問題。想了解其中細節部分,可以閱讀博文:管理CSS層疊_CSS層疊, CSS3 教程_w3cplus


自己定義的CSS文件置於需要覆蓋的文件之後,同級書寫。數值使用auto,其他使用對應的CSS樣式(例如display)。

或者根據CSS優先順序,書寫更高優先順序的樣式。例如原本.primary {},你的 body .primary {}。

還有一種就是通過!important強制使用你的樣式。(不建議)

條條大路通羅馬,自己選一種就好。


只能覆蓋,不能改源文件。這個要求有點坑;

方案:

1、寫自己的樣式,不過要放在原樣式的後面;不管你是引入方式,還是 頁內方式;

2、用js,來設置樣式

注意:如果是定位,需要先吧之前的left、top 等 給重寫一下默認值,要不然 之前寫的和現在寫的都會唄解析


用伺服器端的程序給網頁元素的樣式賦值一個字元串,可以覆蓋掉前端網頁里定義的樣式。

比如你的網頁文件里有這麼個元素:

&runat="server" id="sample" style="position:absolute;left:123px;">內容&

以C#為例,你可以在後端程序里寫

sample.CssStyle.Value="position:absolute;right:123px;";

或者寫sample.CssStyle.Remove("left");sample.CssStyle.Add("right","123px");

前一種寫法會以新字元串覆蓋掉style裡面的所有內容;後一種寫法單獨指定刪除left,增加right。

參考:CssStyleCollection Class


還在學習的小白一個,今天也遇到了這個問題,前面大神已經講的很明白了,我說說自己理解的過程:同一元素的left和right是不能相互替代的同級別屬性,如果同時設置,會讓該元素無所適從,只能學習中國官場精髓,不動不錯,以之前設置的為準,如果要改變,需要把之前的定位位置(left/right)設置為auto,讓該元素的這個屬性另請高明,以後面的設置為準。


推薦閱讀:

關於table邊框,設置了border-collapse:collapse之後,各條邊框是怎麼合併的?
CSS大牛能達到什麼境界?
辭職無基礎自學3星期html和css,現在感覺,動手能力差,基礎掌握不好?求大神指導啊,衷心感謝!
CSS 中能否選取父元素?
如何理解 CSS 中的浮動布局方式?最主要的功能是什麼?如何正確地使用它?

TAG:CSS |