CSS 多边形

平行四边形

我们可以通过skew()的变形属性来对这个矩形进行斜向拉伸。trasnsform:skewX(-45deg);这样会导致内容也发生斜向变形。

嵌套元素方案:我们可以对内容在应用一次反向的skew()变形,从而抵消容器的变形效果。如果想把这个效果应用到一个默认显示为行内的元素,需要把它的displlay属性设置为inline-blick或block,否则变形是不会生效的。这一点对内层的元素也是适用的。

伪元素解决方案:把所有样式(背景,边框等)应用到伪元素上,然后对伪元素进行变形。因为我们的内容并不是包含在伪元素里地,所以内容并不会受到变形的影响。

伪元素应该自动继承其宿主元素的尺寸,甚至当宿主元素的尺寸是由其内容来决定时仍然如此。一个简单地方法是给宿主元素应用position:relative样式,并为伪元素设置position:absolute,然后再把所有偏移量设置为零,以便它在水平和垂直方向上都被拉伸至宿主元素的尺寸。

菱形图片

嵌套元素方案:需要把图片用一个div包裹起来,然后对其应用相反的rotate()变形样式:

clip-path属性把元素裁剪为我们想要的任何形状。polugon()函数指定一个菱形。实际上它允许我们用一系列坐标点来指定任意的多边形。clip-path:poly(50% 0,100% 50%,50% 100%,0 50%);clip-path还可以参与动画,只有我们的动画是在同一形状函数之间进行的。

切角效果

一种方案:使用背景图片盖住元素来达到目的。比如使用三角形盖住元素的顶角来模拟切角效果。

CSS渐变:background: #58a;

background:

    linear-gradient(135deg, transparent 15px, #58a 0)

        top left,

    linear-gradient(-135deg, transparent 15px, #58a 0)

        top right,

    linear-gradient(-45deg, transparent 15px, #58a 0)

        bottom right,

    linear-gradient(45deg, transparent 15px, #58a 0)

        bottom left;

background-size: 50% 50%;

background-repeat: no-repeat;

弧形切角:

background: #58a;

background:

    radial-gradient(circle at top left,

             transparent 15px, #58a 0) top left,

    radial-gradient(circle at top right,

             transparent 15px, #58a 0) top right,

    radial-gradient(circle at bottom right,

             transparent 15px, #58a 0) bottom right,

    radial-gradient(circle at bottom left,

             transparent 15px, #58a 0) bottom left;

background-size: 50% 50%;

background-repeat: no-repeat;

内联SVG与border-image方案:

border: 20px solid #58a;

border-image: 1 url('data:image/svg+xml,\

    <svg xmlns="http://www.w3.org/2000/svg"\

         width="3" height="3" fill="%2358a">\

    <polygon points="0,1 1,0 2,0 3,1 3,2 2,3 1,3 0,2"/>\

    </svg>');

background: #58a;

background-clip: padding-box;

clip-path实现切角

 polygon(20px 0, calc(100% - 20px) 0, 100% 20px, 100% calc(100% - 20px),

      calc(100% - 20px) 100%,

      20px 100%, 0 calc(100% - 20px), 0 20px);

切出一个多边形。个人感觉这种方式实现最方便,只是要考虑浏览器的支持。

梯形标签页

常用方式:使用精心设计的背景图片来实现梯形,或者使用边框来模拟梯形两侧的斜边。

使用3D旋转。

posted @ 2017-06-22 16:25  艾路  阅读(918)  评论(0编辑  收藏  举报