前几天在w3cplus上看了关于css3的clip-path剪裁熟悉,当时就被这个东西吸引了,想到以前如果要做不规则图形,要么直接用图片,要么要用border加translate去制作三角形再拼起来。而且这些做法有很多问题,前者太耗资源要加图片,后者不仅麻烦而且制作出的图形的点击事件仍然会在整个矩形div中作用,无法让各种事件只在图形区域有效。
然而有了clip-path后就轻松简单多了。
最近切图的时候,美术师设计了一个带小尖尖的按钮......正好前几天看完那篇文章,这次就实践了一下,最后的效果图如下:
这是一个table布局,左边三个小div写死宽度,右边两个按钮根据内容自适应。那么来看看是如何实现的吧。代码如下:
<!DOCTYPE html>
<html>
<head>
<title>demo</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<style type="text/css">
html,body{
font-size:50px;
}
*{
border:0;
padding: 0;
margin:0 ;
}
footer{
width:100%;
height: 1rem;
display: table;
}
.item1{
width:1rem;
height: 1rem;
display: table-cell;
line-height: 1rem;
text-align: center;
font-size: 0.36rem;
border-right:1px solid;
}
.item2{
background: #FE9402;
width:100%;
height: 100%;
font-size: 0.36rem;
-webkit-clip-path: polygon(95% 0%,95% 40%,100% 50%,95% 60%,95% 100%,0% 100%,0% 0%);
color:#fff;
line-height: 1rem;
text-align: center;
}
.item2:hover
{
background-color:yellow;
}
.wrap{
background: #EB252E;
display: table-cell;
}
.item3{
background: #EB252E;
display: table-cell;
font-size: 0.36rem;
color:#fff;
line-height: 1rem;
text-align: center;
}
</style>
</head>
<body>
<footer >
<div class="item1">按钮1</div>
<div class="item1">按钮2</div>
<div class="item1">按钮3</div>
<div class="wrap"><div class="item2">我是大按钮</div></div>
<div class="item3">一个按钮</div>
</footer>
</body>
</html>
布局的关键在于,footer百分百,display:table 让内容充满,小按钮宽度写死,display:table-cell。大按钮不写宽度,table-cell 自适应。
而不规则按钮的关键在于,外面套一层外衣做table-cell。并且使用红色底色,这样可以让内部的按钮在裁剪后,背景为红色,出现和右边按钮无缝连接的效果。
而且为剪裁后的按钮添加hover,只在裁剪后的区域内有效哦!!!这是最棒的!
不过听说不同浏览器下对此表现不同,有待查看。
另外这种clip-path的裁剪在微信浏览器上的表现也还没做测试,后续有机会我会补上。(其实是等项目上线再看看效果..)
发现最近特别爱用table布局,感觉有点万能,基本上各种多列效果table都可以驾驭,如果不行就多套一个div,再不行再套总有办法搞定。但相比于flex布局更好的地方在于它兼容性比flex好太多。
前一阵子为了写微信浏览器上的类似布局,用了flex,最后写了n多兼容写法才搞定了兼容问题。table布局就简单多了。