天天看點

css實作梯形(各種形狀)的網頁布局——transform的妙用

  

  在各式各樣的網頁中,經常會看到形狀特别的布局,比如說下面的這種排版方式:

css實作梯形(各種形狀)的網頁布局——transform的妙用

  這種視覺上的效果,體驗十分好。那麼他是如何來實作的呢,部落客在這裡整理了如下2種實作的方式。

    1.通過給 div 加border的方式實作各種圖形。你可以點選 “點我啊” 檢視部落客的部落格,了解這種方式。

    2.通過 transform 修改盒子樣式,互相覆寫達到效果

  以上的兩種方式都可以實作,但是部落客認為第二種複雜一些,但是實作的效果更好一些。接下來,我們就具體講解

一下transform實作網頁多圖形布局的要點。

  按照慣例,先看一段代碼:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .parent{
                width: 800px;
                height: 500px;
                margin: 400px auto;
                background-color: fuchsia;
                /*overflow: hidden;*/
            }
            .left{
                width: 800px;
                height: 500px;
                background-color: yellow;
                transform: skewY(-45deg);
            }
            
        </style>
    </head>
    <body>
        <div class="parent">
            <div class="left"></div>
            <!--<div class="right"></div>-->
        </div>
    </body>
</html>      

  接下來,打開浏覽器,看看他是個什麼樣子。

css實作梯形(各種形狀)的網頁布局——transform的妙用

  吆喝!原來是這個樣子的啊,那接下來,相信大家就明白了吧,隻要在父div上加overflow: hidden;,隐藏掉我們不想讓他顯示的部分。一個簡易的多形狀布局就出現了,那麼接下來我們就具體實作以下,然後看看效果.

   以下就是隐藏多餘部分的效果

   

css實作梯形(各種形狀)的網頁布局——transform的妙用

  如何?效果還不錯吧,這是最簡單的多圖形布局方式,但這種無法實作複雜的效果,而且隻有2個div,具體效果顯示,還得

通過定位實作,那接下來,我們再做一個複雜點的。注意,稍微複雜之後,出現了許多需要注意的地方,朋友們要仔細看了。同樣

我們先看一段代碼。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .parent{
                width: 800px;
                height: 500px;
                margin: 600px auto;
                background-color: fuchsia;
                /*overflow: hidden;*/
            }
            .left{
                width: 600px;
                height: 500px;
                background-color: yellow;
                transform: skewY(-45deg) translate(0px,-400px);
            }
            .right{
                width: 600px;
                height: 500px;
                background-color: #00FFFF;
                transform: skewY(-45deg) translate(200px,120px);
            }
            
        </style>
    </head>
    <body>
        <div class="parent">
            <div class="left"></div>
            <div class="right"></div>
        </div>
        
    </body>
</html>      

  再看下效果圖:

css實作梯形(各種形狀)的網頁布局——transform的妙用
css實作梯形(各種形狀)的網頁布局——transform的妙用

 代碼很簡單,但是有幾點要注意的地方:

  1. 首先,内層的2個div,因為旋轉的原因,所占的空間已經不在是 四四方方的規矩形狀了,是以調節位置的時候需要注意

    特别是div再增加的時候,會因為多個div所占區域沖突,而覆寫擠壓。是以,調節位置時需要有耐心。

  2.要避免其他元素浮動和定位對我們布局造成的影響,用此方法盡量在同一層中不要讓元素浮動、定位等操作。

  3.skewY(-45deg);正數為逆時針轉,反之,順時針轉。除了deg還有其他機關,做别的旋轉,這裡部落客就不一一贅述了。

看到這裡,相信朋友們已經了解了多形狀布局了。但這僅僅是開始,接下來還要在布局當中添加内容。那麼我們繼續看下面代碼:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .parent{
                width: 800px;
                height: 500px;
                margin: 600px auto;
                background-color: fuchsia;
                /*overflow: hidden;*/
            }
            .left{
                width: 600px;
                height: 500px;
                background-color: yellow;
                transform: skewY(-45deg) translate(0px,-400px);
            }
            .left img{
                width: 100%;
            }
            .right{
                width: 600px;
                height: 500px;
                background-color: #00FFFF;
                transform: skewY(-45deg) translate(200px,120px);
            }
            
        </style>
    </head>
    <body>
        <div class="parent">
            <div class="left">
                <img src="img/QQ圖檔20170223091455.jpg"/>
            </div>
            <div class="right">
                <p>看看我變成什麼德行了</p>
            </div>
        </div>
        
    </body>
</html>      

  然後看看效果:

css實作梯形(各種形狀)的網頁布局——transform的妙用

  我的天呐,怎麼是醬紫的呢!好吧,在css中,父元素如果添加了transform屬性,子元素會繼承這些屬性,做相同的變化,

那我們該如何去消除它,得到我們想要的效果呢。很簡單,隻要在 對應的子元素添加與父元素相反的transform樣式,就可以了。

那我們實驗一下。看如下代碼:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .parent{
                width: 800px;
                height: 500px;
                margin: 600px auto;
                background-color: fuchsia;
                overflow: hidden;
            }
            .left{
                width: 600px;
                height: 500px;
                background-color: yellow;
                transform: skewY(-45deg) translate(0px,-400px);
                overflow: hidden;
            }
            .left img{
                width: 100%;
                transform: skewY(45deg) translate(0px,400px);
            }
            p{
                transform: skewY(45deg) translate(310px,0px);
            }
            .right{
                width: 600px;
                height: 500px;
                background-color: #00FFFF;
                transform: skewY(-45deg) translate(200px,120px);
                overflow: hidden;
            }
            
        </style>
    </head>
    <body>
        <div class="parent">
            <div class="left">
                <img src="img/QQ圖檔20170223091455.jpg"/>
            </div>
            <div class="right">
                <p>看看我變成什麼德行了</p>
            </div>
        </div>
        
    </body>
</html>      

效果圖如下:

css實作梯形(各種形狀)的網頁布局——transform的妙用

看到這,我們想要的效果就已經出來,但是有幾點還是得說明一下的:

  1.我們通過覆寫(也就是再寫了一遍css樣式)的方法更改了子元素繼承的屬性,簡單但是有些特殊情況還是修改繼承屬性比較正統。

  2.我們需要修改的屬性大多是旋轉,可以直接反過來。位置平移之類的,還是要具體調節,不是說隻喲反過來就可以實作一切

  3.建議朋友們,調試的時候不要加hidden樣式,避免自己都找不到元素的位置

然後聊聊這個方法的一些不足之處:

  1.通過transform屬性修改的,會受到動畫設定效果的影響。

  2.不太适合實作子子產品動态移動的動畫效果,畢竟一移動,隐藏的部分會顯露出來。

  3.響應式比較麻煩,因為transform隻能調像素,無法自适應各種分辨率,建議朋友們在不同裝置上定死寬度,同時設定使用者無法縮放

     當然,像我們IE老大哥這種無法設定的就算了,

css實作梯形(各種形狀)的網頁布局——transform的妙用

  文章若有疏忽之處,還請大家指出,在這裡也誠心邀請大家共同學習,廣泛的提意見。如果朋友們有更好的實作多形狀布局的方法,請消息我,

讓我們共同學習。