css实现平行四边形、菱形图片效果

1、平行四边形css

1. 使用两个元素实现html

htmlspa

<a class="button">
  <div>click me</div>
</a>

css3d

.button{
  margin: 50px;
  display: inline-block;
  background: #404ED3;
  transform: skewX(-45deg);
} 
.button>div{
  padding: 15px;
  color: white;
  font-size: 24px;
  transform: skewX(45deg);
}

效果图code

原理:orm

将容器和内容区域作相反方向的变形,就能够使外面的容器变形,同时不会影响内部的元素。htm

2. 使用伪元素实现blog

咱们能够把全部样式都应用到伪元素上,而后再对伪元素进行变形。由于咱们的内容并非包含在伪元素中,因此内容并不会受到伪元素的影响。同时,咱们但愿伪元素保持良好的灵活性,能够自动继承宿主元素的尺寸,甚至当宿主尺寸是由其内容来决定时仍然如此。一个简单的办法就是给宿主元素应用position:relative,而且为其伪元素设置position:absolute,而后再把全部偏移量设置为0,以便让他在水平方向和垂直方向都和宿主尺寸相同。继承

html图片

<a class="button">click me</a>

css

.button{
  position: relative;
  display: inline-block;
  margin: 50px;
  padding: 15px;
  color: white;
  font-size: 24px;
} 
.button::before{
  background: #404ED3;
  z-index: -1;
  position: absolute;
  content: '';
  top: 0;left: 0;right: 0;bottom: 0;
  transform: skewX(-45deg);
}

值得注意的是:用伪元素生成的方框是重叠在内容上面的,一旦给他设置背景就会遮住内容,为了解决这个问题,咱们给伪元素设置了z-index:-1,这样他的堆叠层次就会被推到宿主元素以后。

效果图:

 

 2、菱形图片

1. 使用两个元素实现

思路:咱们能够将父元素旋转45deg,而后将里面的图片在向相反方向旋转45deg,而且设置父元素的overflow:hidden,子元素的最大宽度为100%。

html

<div class="picture">
  <img src="cat.jpg" alt="">
</div>

css

.picture{
  margin: 100px;
  width: 300px;
  transform: rotate(45deg);
  overflow: hidden;
} 
.picture>img{
  width: 300px;/*100%*/
  transform: rotate(-45deg);
}

效果图

虽然这个八边形看起来也很好看,不过这不是咱们想要的,缘由在于图片的宽度应该为父元素(正方形)宽度的对角线长度,因此咱们能够调整一下

css

.picture{
  margin: 100px;
  width: 300px;
  transform: rotate(45deg);
  overflow: hidden;
} 
.picture>img{
  max-width: 100%;
  transform: rotate(-45deg) scale(1.42);
}

效果图

2. 使用clip-path实现

hml

<div class="parent">
    <img src="cat1.jpg" alt="">
</div>

css

.parent{
  width: 300px;
}
img{
  width: 100%;
  clip-path: polygon(50% 0,100% 50%,50% 100%,0 50%);
  transition: 1s clip-path;
}
img:hover{
  clip-path: polygon(0 0,100% 0,100% 100%,0 100%);
}

如此简单的代码就实现了菱形,咱们甚至实现了在鼠标悬停的时候平滑的扩展为完整的面积。

效果图

相关文章
相关标签/搜索