用CSS3实现平行四边形的分页/导航

Paste_Image.png

看到这种需求,此前第一反应是用伪类,一个四边形加两个三角形(具体怎么做相信网上有很多文章,这里就不说了)。近期看到一篇文章,发现用transform来实现比较简单。

<div class="city">上海</div>

首先给div加上样式

.city{
    color:#333;
    position:relative;
    padding:5px 20px;
    display:inline-block;
    border:1px solid #44a5fc;
    transform:skew(-30deg);
}

得到下图:

Paste_Image.png

连文字也一起旋转了,不是我们要的效果,所以我们要把文字的旋转效果给取消,怎么取消呢?很简单,给文字再套一个div逆旋转就行了。代码如下:

<div class="city"><div>上海</div></div>
.city{
    color:#333;
    position:relative;
    padding:5px 20px;
    display:inline-block;
    border:1px solid #44a5fc;
    transform:skew(-30deg);
}
.city>div{
    transform:skew(30deg)
}

得到效果如下:


Paste_Image.png

导航首尾我们可以用伪类来遮挡(具体过程就略过了)。完整代码如下:

<div class="city"><div>上海</div></div>
<div class="city"><div>上海</div></div>
<div class="city"><div>上海</div></div>
<div class="city"><div>上海</div></div>
.city{
    color:#333;
    position:relative;
    padding:5px 20px;
    display:inline-block;
    border:1px solid #44a5fc;
    transform:skew(-30deg);
}
.city>div{
    transform:skew(30deg)
}
.city:first-child:before,.city:last-child:before{
    position: absolute;
    content: '';
    width: 20px;
    height: 26px;
    left: -9px;
    top:-1px;
    border:1px solid #44a5fc;
    border-right:none;
    transform: skew(30deg);
    background: #fff
}
.city:last-child:before{
      left:63px;
      border-left:none;
      border-right:1px solid #44a5fc;
}

效果如下:

Paste_Image.png

如果觉得首位宽度过大可以调整伪类的位置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近在逛某个技术网站的时候,感觉文章关键词上的样式好酷炫啊,分页的样式。来张截图: 你在首页的底部也可以看到这样一...
    web前端学习阅读 4,516评论 0 4
  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 5,570评论 0 7
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,892评论 25 709
  • 妈妈,是我们从小到大都很熟悉的一个称呼。从外回来,回家的第一件事就是叫:妈妈!正式从这一刻(见下方...
    家雯妈妈阅读 3,229评论 0 0
  • 瓦洛兰大陆的军事强国诺克萨斯,住在这的德莱一家有两个孩子,德莱文和德莱呃斯,德莱呃斯作为哥哥非常照顾弟弟。 德莱呃...
    小德莱阅读 4,977评论 0 0