skew()实现带圆角斜线效果
写页面时候遇到一个效果,
这是很常见的一个tab切换,但是样式上不是常见的矩形,以前这类特殊形状都是UI切图,改变两张背景图来实现。
但这次没给切图,css有啥不能实现的呢。
实现方法
这里写的小程序的项目,但是布局上小程序和web页面大同小异,仅仅是标签不一样而已。
不同于矩形的直角直线,这里效果上是圆角加斜线,一个容器是无法实现的,可以使用伪类构建一个平行四边形,再做拼接。
代码如下:
<view class="tabs">
<view class="tabItem tabLeft" wx:if="{{curTabId==='0'}}">
<view class="leftItem" data-id="0" bindtap="switchTab">样品详情</view>
<view class="rightItem" data-id="1" bindtap="switchTab">发票信息</view>
</view>
<view class="tabItem tabRight" wx:if="{{curTabId==='1'}}">
<view class="leftItem" data-id="0" bindtap="switchTab">样品详情</view>
<view class="rightItem" data-id="1" bindtap="switchTab">发票信息</view>
</view>
</view>
.tabs {
width: 100%;
height: 86rpx;
border-bottom: 1px solid #EBECF1;
}
.tabs .tabItem {
width: 100%;
height: 100%;
display: flex;
background-color: #EBECF1;
}
.tabLeft .leftItem {
width: 460rpx;
height: 100%;
background-color: #fff;
position: relative;
display: flex;
align-items: center;
justify-content: center;
color: #C6000D;
font-size: 28rpx;
}
.tabLeft .leftItem::after {
content: "";
position: absolute;
top: 0;
right: -30rpx;
width: 75rpx;
height: 86rpx;
transform: skew(22deg);
border-top-right-radius: 20rpx;
background-color: #fff;
color: #666;
}
.tabLeft .rightItem {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
border-top-right-radius: 20rpx;
font-size: 26rpx;
}
.tabRight .rightItem {
width: 460rpx;
height: 100%;
background-color: #fff;
position: relative;
display: flex;
align-items: center;
justify-content: center;
color: #C6000D;
font-size: 28rpx;
}
.tabRight .rightItem::after {
content: "";
position: absolute;
top: 0;
left: -30rpx;
width: 75rpx;
height: 86rpx;
transform: skew(-22deg);
border-top-left-radius: 20rpx;
background-color: #fff;
color: #666;
}
.tabRight .leftItem {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
border-top-right-radius: 20rpx;
font-size: 26rpx;
}
其中关键是使用了shew()函数实现了平行四边形。这属于css3中内容,使用较少,感觉就很陌生。
shew()函数
MDN中有说明,skew() 函数定义了一个元素在二维平面上的倾斜转换。
这种转换是一种剪切映射(横切),它在水平和垂直方向上将单元内的每个点扭曲一定的角度。每个点的坐标根据指定的角度以及到原点的距离,进行成比例的值调整;因此,一个点离原点越远,其增加的值就越大。
skew(ax, ay) 函数指定一个或两个参数,它们表示在每个方向上应用的倾斜量。
ax 是一个 <angle>,表示用于沿横坐标扭曲元素的角度;ay 是一个 <angle> ,表示用于沿纵坐标扭曲元素的角度,如果未定义,则其默认值为0,导致纯水平倾斜。
这里提一下GIF中第三例,turn这个单位。turn表示圆的一圈,90度是四分之一圆,也就是0.25turn。
90deg = 0.25turn
transform属性
shew()函数是transform属性的值,transform有很多值,它允许盒模型定位的块状元素进行旋转,缩放,倾斜或平移。
本文分享自微信公众号 - 前端一起学(gh_3ba18d51f982)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何让一套代码适配所有iOS设备尺寸?
简介: 随着移动互联网设备和技术的发展,各种移动设备屏幕尺寸层出不穷,折叠屏、分屏、悬浮窗等等,面对越来越多样的屏幕,如果为每种尺寸单独进行适配,不仅费时费力,还会增加端侧代码的开发与维护压力。如何让一套代码适配所有尺寸变化,增强App的通用能力?阿里巴巴文娱技术 氚雨 将分享优酷APP在iOS响应式布局技术上的实践和落地。 响应式是基于同一套代码,开发一个APP能够兼容多尺寸、多终端设备的显示,能够动态调整页面的布局以及容器的布局,充分利用当前屏幕的尺寸,为用户提供更好的浏览体验,提升APP开发效率和迭代效率。 一 iOS布局尺寸预研 当下,iOS端的主要尺寸类型有五种:iPhone、iPad竖屏、iPad横屏、iPad浮窗、iPad分屏。通常,App是按iPhone尺寸开发的,需要适配剩余的四种iPad尺寸。 iPad横、竖屏比较常见,旋转设备即可,比较特殊的是浮窗和分屏模式。自苹果iPad iOS 9开始,用户在打开一个应用时,从最底部上滑打开Dock,即可拖拽另一个App进入浮窗模式: 在支持分屏的iPad上拖拽到更边缘的地方即可开启分屏模式: 其中浮窗模式所有升级iOS 9...
- 下一篇
如何优雅统计订单收益(二)
引言 上篇文章详细说明了异构出收益日报表的方案.接下来我们来解决聚合需求多的情况下如何优化聚合SQL的问题. 需求 在如何优雅统计订单收益(一)中已经详细说明,大概就是些日/月/年的收益统计. 思考 目标 尽量减少聚合SQL的查询次数 给前端方便展示的API数据,表现在如果某一天的数据为空值时,后端处理成收益为0数据给前端 方法函数尽量通用提高代码质量 思路 初步实现 建立在已经通过canal异构出收益日统计表的情况下: 单日统计(例如今日,昨日,精确日期)可以直接通过日期锁定一条数据返回. 月统计也可以通过时间过滤出当月的数据进行聚合统计. 年统计也通过日期区间查询出所在年份的统计实现. 各项收益也可以分别进行聚合查询 这样看来日统计表的异构是有价值的,至少可以解决当前的所有需求. 如果需要今日/昨日/上月/本月的收益统计,用SQL直接聚合查询,则需要分别查询今日,昨日以及跨度为整月的数据集然后通过SUM聚合实现. //单日收益 select 分销收益,自购收益,... from t_user_income_daily where day_time='日期' and user_id=...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS关闭SELinux安全模块
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长