css實現梯形(各類形狀)的網頁佈局——transform的妙用

  

  在各式各樣的網頁中,常常會看到形狀特別的佈局,好比說下面的這種排版方式:css

 

           

 

  這種視覺上的效果,體驗十分好。那麼他是如何來實現的呢,博主在這裏整理了以下2種實現的方式。html

    1.經過給 div 加border的方式實現各類圖形。你能夠點擊 「點我啊」 查看博主的博客,瞭解這種方式。瀏覽器

    2.經過 transform 修改盒子樣式,相互覆蓋達到效果佈局

  以上的兩種方式均可以實現,可是博主認爲第二種複雜一些,可是實現的效果更好一些。接下來,咱們就具體講解學習

一下transform實現網頁多圖形佈局的要點。flex

 

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

  

<!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>

  

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

 

  
  吆喝!原來是這個樣子的啊,那接下來,相信你們就明白了吧,只要在父div上加overflow: hidden;,隱藏掉咱們不想讓他顯示的部分。一個簡易的多形狀佈局就出現了,那麼接下來咱們就具體實現如下,而後看看效果.

   如下就是隱藏多餘部分的效果3d

   

  如何?效果還不錯吧,這是最簡單的多圖形佈局方式,但這種沒法實現複雜的效果,並且只有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>

  再看下效果圖:

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

  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屬性,子元素會繼承這些屬性,作相同的變化,

那咱們該如何去消除它,獲得咱們想要的效果呢。很簡單,只要在 對應的子元素添加與父元素相反的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>

效果圖以下:

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

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

  2.咱們須要修改的屬性大可能是旋轉,能夠直接反過來。位置平移之類的,仍是要具體調節,不是說只喲反過來就能夠實現一切

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

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

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

  2.不太適合實現子模塊動態移動的動畫效果,畢竟一移動,隱藏的部分會顯露出來。

  3.響應式比較麻煩,由於transform只能調像素,沒法自適應各類分辨率,建議朋友們在不一樣設備上定死寬度,同時設置用戶沒法縮放

     固然,像咱們IE老大哥這種沒法設置的就算了,

 

  文章如有疏忽之處,還請你們指出,在這裏也誠心邀請你們共同窗習,普遍的提意見。若是朋友們有更好的實現多形狀佈局的方法,請消息我,

讓咱們共同窗習。

相關文章
相關標籤/搜索