transform 的副作用

2021-10-09 03:30:44 字數 1012 閱讀 4755

transform 想必大家都很熟悉,可以通過其轉換(translate)、旋轉(rotate)、縮放(scale)、傾斜(skew)等屬性來對元素進行變換,不過這篇文章想**的不是這些內容,而是 transform 對元素布局、頁面渲染方面的影響。例如,你知道它會影響 fixed 元素的位置嗎?你有想過它會改變元素的層疊順序嗎?

在我們近期的乙個專案中,碰到過這個問題,fixed元素居然好端端的失效了 ,後來不斷的排查,最終發現了問題出在 css3 transform上的,只因為fixed元素的父層新增了 css3 transform屬性。

我們應該都知道,position:fixed可以讓元素不跟隨瀏覽器的滾動條滾動,而且這種跟隨效果連它的兄弟們position:relative/absolute都限制不了。但是,真是一物降一物,position:fixed固定效果卻被小小的transform給乾掉了,直接降級變成position:absolute的蛋疼表現。

關鍵就在於這個 fixed 元素被擁有 transform 的屬性的父 div 包裹著,所以它會相對於這個 transform 的父元素定位,而不是我們以為的根元素定位。

至於為什麼會這樣,就需要從 w3c 規範中去尋找原因了。我找到了這樣一段解釋,也就是說 transform 值不為 none 的元素會建立乙個 containing block(作者注:容器塊,盒元素定位和大小一般參考容器塊進行計算),然後該元素的 fixed 子元素會相對該元素進行定位。

原因搞明白了,那麼為什麼 w3c 委員會會這樣設計呢?我們可以從兩個方面來思考:

假如我們想讓 fixed 元素相對根元素進行絕對定位,我們往往會把它作為根元素的第一級子元素,從而也就不會存在它被 transform 父元素包裹的情況了。

那麼什麼情況下我們會把 fixed 元素放在 transform 父元素下呢?在我看來,只有我們希望它跟隨父元素一起 transform 時才會這樣做,要不然為什麼不把它放在根元素下呢?

巨集的副作用

巨集定義在實際使用中如果不稍加注意,如果表示式有 就可能導致返回的結果跟預期不符。下面是幾種常見的問題 define multi a,b a b multi 1 2,3 1 2 3 define add a,b a b int c add 1,2 3 1 2 3因此巨集的引數和返回值最好是用 擴起來...

卡波姆對面板的作用副作用 杏仁酸的副作用

杏仁酸的使用效果相對溫和,使用的時候可以從低濃度開始使用。但是在使用的時候,如果做不好防曬,可能會出現反黑的情況。而且杏仁酸使用之後,還會乾燥緊繃,所以在使用的時候,要做好日常的保濕。在使用杏仁酸之前,一定要先做好 測試,確定 不會出現敏感,然後再繼續使用。如果使用杏仁酸之後,出現了敏感情況,一定要...

C C 巨集 巨集的作用 副作用

基礎 巨集是預處理指令 巨集的本質是簡單的字串替換,預處理時進行巨集替換 可在定義巨集時要求它接收引數,巨集替換時會代入引數 巨集的名字不允許過載 巨集預處理 沒有能力處理遞迴呼叫。作用 看一段math.h中的巨集定義 if defined use math defines defined math...