在Safari瀏覽器下(此Safari瀏覽器包括iOS的Safari,iPhone上的微信瀏覽器,以及Mac OS X系統的Safari瀏覽器),當咱們使用3D transform變換的時候,若是祖先元素沒有overflow:hidden/scroll/auto等限制,則會直接忽略自身和其餘元素的z-index
層疊順序設置,而直接使用真實世界的3D視角進行渲染。 例以下面的場景,圖中紅框裏面的模塊,使用 3D transform變換,進行旋轉動畫,可是在Safari瀏覽器下,忽略了二維碼遮罩層的z-index
,結果使用了真實世界的3D視角進行渲染。出現了重疊的bug: css
正常處理文字上下居中的手段是讓元素height和line-height相等,可是安卓環境下當字體大小<14px/0.7rem的時候會出現居中失效的狀況。html
判斷系統環境(安卓/IOS)分別做微調;前端
font-size、height、width所有放大爲2倍,利用transform進行縮放ios
height: 1rem; width: 2rem; font-size: 0.5rem; 變成: height: 2rem; width: 4rem; font-size: 1rem; transform: scale(0.5);
但因爲放大以後佔據空間,左右會留白,須要利用margin負值 margin: -0.35rem -0.45rem 0;
調整web
定義了一個動畫效果以下(sass代碼):瀏覽器
@keyframes official-featured_rotate { 10%,50%{ transform:rotateY(90deg); } 60%,100%{ transform:rotateY(0deg); } } &-rotate { position: absolute; width: rem(350/2); height: rem(160/2); transform-style:preserve-3d; transform:translate3d(0,0,0); &.ani_rotate { animation:official-featured_rotate 5s linear 0s infinite; animation-delay: 2s; } &__item { width: rem(350/2); height: rem(160/2); position: absolute; &:nth-child(1) { transform: translateZ(rem(350/4)); } &:nth-child(2) { transform: rotateY(90deg) translate3d(0,0,rem(350/4)); } } }
這裏是2個a標籤,作90度的旋轉效果使得兩個a能夠循環切換展現。這裏2個的基本樣式是一致的,寬高也同樣。可是在安卓下(ios正常)只有打開頁面能看到的第一個a標籤能正常跳轉,能正常綁定事件。第二個a不能跳轉,我就想那我經過點擊事件來跳轉能夠不,結果綁定任何事件都不生效。sass
而後測試發現,在旋轉過程當中(只要未徹底旋轉90度)點擊仍是能一切正常的。因而把旋轉角度改成了89.99度,一切正常。動畫效果修改成:微信
@keyframes official-featured_rotate { 10%,50%{ transform:rotateY(-89.99deg); } 60%,100%{ transform:rotateY(0deg); } }
後來查找了一下stackoverflow(https://stackoverflow.com/questions/23548612/cant-click-on-buttons-after-css-transform)。裏面也是說了這個解決方法。學習
設置border-color、background-color等顏色的時候,可使用currentColor[與當前元素的字體顏色相同]來簡化css。測試
.div{ color: rgba(0,0,0,.85); font-weight: 500; text-align: left; padding: 20px; border: solid 1px currentColor; }
灰色圖能夠直接加濾鏡,不用切多一張圖。如圖:
.coupon_style .disable { -webkit-filter: grayscale(1); }
效果:
代碼:
利用:before和:after,加上絕對定位的性質,能夠造成一個矩形,這個時候結合CSS3的傾斜屬性skew和旋轉屬性rote。就能夠造成一個有旋轉角度的平行四邊形,這個時候再和原來的矩形重疊,則可產生翹邊效果。
效果:
代碼:
效果圖: 代碼:
background: url("images/logo.png") no-repeat; -webkit-mask : url("images/mask.png");
mask.png中黑色表明是不透明的(alpha:1),其餘部分爲透明的(alpha:0),將它蓋在背景圖上,注意:背景圖對應mask.png中透明的位置也會變成透明,留下非透明的形狀,即背景圖的可見形狀與mask.png的可見形狀相同。 即爲"蒙版"。
當圖片未正確加載,或加載完成前,因爲圖片高度爲0,其容器會由於沒有內容,致使容器沒法撐高而塌陷,而若是加載較慢則會再圖片加載完成後出現閃爍的狀況。
css中,當padding-top/bottom值爲百分比時,其值都是以其父元素的寬度爲參照對象。所以對於寬高比例固定的狀況,能夠利用padding-top/bottom用於圖片自適應佔位,解決頁面閃爍的問題。
若是僅設置值padding-top/bottom爲百分比,會出現一個問題,就是該方法容器的max-height屬性會失效,就沒法限制容器的最大高度了。
所以,能夠給容器添加一個僞元素的子元素用於撐起內容,該子元素擁有一個padding-top:100%,同時給容器一個max-height嘗試限制容器的高度,最後內容用絕對定位的方式添加便可。如:
#container{ width: 50%; max-height:300px; background-color:#ddd; /*因爲margin存在塌陷的問題,須要經過構建BFC來保證容器不會受到影響,所以這裏能夠給容器一個overflow:hidden來保證僞元素的margin不會塌陷。*/ overflow:hidden; position: relative; /* 父容器相對定位 */ } .placeholder::after{ content:""; display:block; margin-top:100%; } img{ position:absolute; /* 內容絕對定位 */ left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%); /* 控制內容絕對定位位置 */ width:80%; /* 控制圖片不溢出,所以這裏使用的圖片實際寬度受父容器影響 */ }
可是對於寬高比例不定的圖片來講,這樣作可能致使圖片顯示不全,使用時要注意。
通過大型項目實踐,下面這段CSS是最好的基於rem和vm和calc實踐代碼:
html { font-size: 16px; } @media screen and (min-width: 375px) { html { /* iPhone6的375px尺寸做爲16px基準,414px正好18px大小, 600 20px */ font-size: calc(100% + 2 * (100vw - 375px) / 39); font-size: calc(16px + 2 * (100vw - 375px) / 39); } } @media screen and (min-width: 414px) { html { /* 414px-1000px每100像素寬字體增長1px(18px-22px) */ font-size: calc(112.5% + 4 * (100vw - 414px) / 586); font-size: calc(18px + 4 * (100vw - 414px) / 586); } } @media screen and (min-width: 600px) { html { /* 600px-1000px每100像素寬字體增長1px(20px-24px) */ font-size: calc(125% + 4 * (100vw - 600px) / 400); font-size: calc(20px + 4 * (100vw - 600px) / 400); } } @media screen and (min-width: 1000px) { html { /* 1000px日後是每100像素0.5px增長 */ font-size: calc(137.5% + 6 * (100vw - 1000px) / 1000); font-size: calc(22px + 6 * (100vw - 1000px) / 1000); } }