本文最初发布于我的个人博客:咀嚼之味

最近在逛某个技术网站的时候,感觉文章关键词上的样式好酷炫啊。于是我将那种写法照搬到了我的博客中,也许最近逛过我博客的小伙伴已经发现了它出现在哪儿了??分页的样式。来张截图:

你在首页的底部也可以看到这样一个分页栏;是不是看上去还不错?下面就来看看这是如何实现的吧~

第一种方法:利用border

第一种方法是借助border属性 hack 出三角形,然后通过一个矩形拼接两个三角形最终制造出一个平行四边形。为什么使用border可以产生三角形呢?先来看看一张图片:

看了图中的三个小图形的变化过程,你应该已经清楚了一半。其实 hack 出三角形只需要两个条件,第一,元素本身的长宽为0;其次,将不需要的部分通过 border-color 来设置隐藏。通过类似的方法,你还可以创造出梯形,上图中的三个图形的代码如下。(另附 CodePen 示例) #first { width: 20px; height: 20px; border-width: 10px; border-style: solid; border-color: red green blue brown;}#second { width: 0; height: 0; border-width: 10px; border-style: solid; border-color: red green blue brown;}#third { width: 0; height: 0; border-width: 10px; border-style: solid; border-color: red transparent transparent transparent;}

接下来就要考虑如何拼接出一个平行四边形了。在border法中,它由三部分组成,分别是左三角形、矩形、右三角形。如果每次绘制平行四边形都要创建三个元素显然过于麻烦了,所以在这里:before和:after伪元素是个不错的选择。下面我们实现一下这样的效果:

为了将三角形与矩形无缝拼接到一起,多处属性要保持一致,所以使用类似 Less, Sass, Stylus 等 CSS 预处理器来写这段代码会更容易维护,下面给出 Scss 版本的代码。(另附 CodePen 链接) //三角形的宽高$height: 24px;$width: 12px;//对平行四边形三部分的颜色进行赋值@mixin parallelogram-color($color) { background: $color; &:before { border-color: transparent $color $color transparent; } &:after { border-color: $color transparent transparent $color; }}//单个三角形的样式@mixin triangle() { content: ''; display: block; width: 0; height: 0; position: absolute; border-style: solid; border-width: $height/2 $width/2; top: 0;}//平行四边形的样式.para { display: inline-block; position: relative; padding: 0 10px; height: $height; line-height: $height; margin-left: $width; color: #fff; &:after { @include triangle(); right: -$width; } &:before { @include triangle(); left: -$width; } @include parallelogram-color(red);}

需要注意的是,如果通过 $height、$width 设置的三角形斜率太小或太大都有可能造成渲染出锯齿,所以使用起来要多多测试一下不同的宽高所得到的视觉效果如何。

第二种方法:利用transform

使用transform来实现平行四边形的方法是我在逛去啊的时候看到的,效果大概是这个样子:

看到之后觉得好神奇啊,原来还可以只有平行四边形的外轮廓。(因为方法一只能创造填充效果的平行四边形)实现起来非常简单,主要是借助了transform: skew(...),下面就来看看源码吧。 上海

于是我们得到了这样的效果:

看到图片的你一定是这样想的:

别着急嘛,我们的确是把整个 div 进行了歪曲,导致中间的文字也是倾斜的,而这显然不是我们所要的效果。所以我们需要加一个内层元素,并对内层元素做一次逆向的歪曲,从而得到我们想要的效果:

实现代码如下,另附 CodePen 示例 上海

总结

第一种方法使用 border 属性 hack 出三角形,并通过对三个元素进行拼接最终实现了平行四边形;而第二种方法则通过 transform: skew 来得到平行四边形。总体来说,第二种方法相对于第一种代码量小得多,而且也很好理解。唯一的不足是无法构造像本站的分页中所使用的梯形。希望本文对各位有所帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php做平行四边形,用 CSS 实现三角形与平行四边形_html/css_WEB-ITnose相关推荐

  1. 【数学】三角形内接平行四边形问题

    三角形内接平行四边形问题 \Huge\textsf{三角形内接平行四边形问题} 三角形内接平行四边形问题 如图, △ \triangle △ABC中有平行四边形DECF, 设 S △ A D E = ...

  2. 纯 CSS 实现三角形尖角箭头的实例

    为什么80%的码农都做不了架构师?>>>    上次无意中发现了个使用纯 CSS 实现三角形尖角箭头的方法 http://blog.csdn.net/zhouzme/article/ ...

  3. css 绘制三角形_解释CSS形状:如何使用纯CSS绘制圆,三角形等

    css 绘制三角形 Before we start. If you want more free content but in video format. Don't miss out on my Y ...

  4. css空心三角形_(12)把“可以动的盒子”更优雅地展示: “伪元素”妙用 | CSS...

    原创:itsOli @前端一万小时 本文版权归作者所有,未经授权,请勿转载! 本文节选自"语雀"私有付费专栏「前端一万小时 | 从零基础到轻松就业」 1. 如何使用伪元素来清除浮动 ...

  5. css空心三角形_纯CSS制作空心三角形和实心三角形及其实现原理

    纯CSS制作空心三角形和实心三角形及其实现原理 在一次项目中需要使用到空心三角形,我瞬间懵逼了.查阅了一些资料加上自己的分析思考,终于是达到了效果,个人感觉制作三角形是使用频率很高的,因此记录下来,供 ...

  6. 【CSS】CSS实现三角形(一)

    话不多说,下面介绍两种比较常用的写法: 一.border边框 宽和高都设置为0px,通过border的交点创建三角形,这应该是使用的最多的一种写法. .triangle{width: 0;height ...

  7. css画三角形(怎么用css画三角形)

    如何用css3画一个有边框的三角形 如果是一个正方形,我们写边时,会用到border,但我们这里讨论的三角形本身就是border,不可能再给border添加border属性,所以我们需要用到其他办法. ...

  8. css实现三角形原来这么简单啊,可以跟三角形图片说拜拜了

    在开发网页时经常需要用到三角形做指示效果. [三角形指示效果] 一般我们会让美工提供好三角形的图片然后用在网页中,这种方式用起来简单,但会增加网页的大小,同时要修改三角形大小.颜色等还需要再去麻烦美工 ...

  9. html5 3d原理,使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)

    今天读了篇关于如何使用css3创建3d四面体的文章,觉的相当不错,所以拿出来和大家分享一下. 首先要和大家分享的是,如何使用div+css创建三角形.在这里我先把相关代码粘贴出来,然后再为大家讲解原理 ...

  10. css 实现一个尖角_纯 CSS 实现三角形尖角箭头的实例

    上次无意中发现了个使用纯 CSS 实现三角形尖角箭头的方法 ,但没有怎么用上,也没有详细完整的实例,今天刚好要用上,整理了下,写个完整的代码: 无标题文档 .area { margin:100px a ...

最新文章

  1. ThinkPHP 模型方法 setInc() 和 setDec()
  2. 让 UV4 支持STC 单片机
  3. 【kafka】kafka Producer Metadata概述及源码分析
  4. 实现一次加载多级所有的菜单
  5. 手机同步查看html,手机版同步html几点注意使用
  6. matlab 离散系统稳定性,基于LMI的离散系统非脆弱H∞滤波器设计(Matlab,程序)
  7. 使用FreeHttp强制登出微信公众号登陆状态(实现~原理)
  8. 模拟信道与数字信道的区别
  9. [免费专栏] Android安全之Root检测与Root绕过(浅析)
  10. 大师级管理人物盘点:“颠覆性技术“提出者-克里斯坦森
  11. 日志配置:logging.file.path与logging.file.name的区别
  12. 计算机未来目标规划,计算机专业职业生涯规划范文
  13. 互联网教育已过时,教育科技才是未来的趋势
  14. android 百度音乐 api,[新]百度mp3接口(baidu mp3 api)
  15. java弱化胖瘦客户端_Java架构师成长直通车百度云
  16. 打造简易NineoldAndroids动画库,深入理解Android动画原理
  17. numpy序列预处理dna序列_使用机器学习和Python揭开DNA测序神秘面纱
  18. Spring之SpEL
  19. 原链YCC战略定位:公链+私链(联盟链、私有链),实现价值传递
  20. 北京:2100名号贩子信息已录入医院人脸识别系统

热门文章

  1. solidworks一份草图多次拉伸与多次凸台
  2. 遥控精灵app v4.2.2
  3. 2019第五届美亚杯全国电子数据取证大赛团队赛wp
  4. GPGPU数学基础教程
  5. axios请求跨域前端解决_10、axios请求以及跨域问题,前端解决方法。11、后端-nginx解决方法...
  6. 前端按字母搜索相关内容
  7. 国内十家微交易平台,正规微交易平台排行榜
  8. Windows出现“未连接到互联网代理服务器出现问题,或者地址有误。问题解决办法”
  9. 数字视网膜图像血管分割
  10. 清空计算机网络缓存,如何清除DNS缓存 使用命令清理DNS缓存方法