嗨,guys,还在为上下左右的tip揪心嘛,还在使用利用图片、符号、多层关系或者border的2个三角形的重叠来实现? 既然它不完美,那就来看一下利用CSS3的transfrom的方法是否适合你。
概述:
CSS视觉格式化模型描述一个坐标系统上的每个元素位置的坐标系。定位和大小在这个坐标空间可以被认为是用像素表示,在起源点开始以向右和向下的实际值出发。transform属性可以修改此坐标空间。使用转换,元素可以被转化、旋转和扩展在二或三维空间。
重点来了~我们要用到的是transfroms的变换渲染模型:
为‘ transform ‘的属性建立一新的局部坐标系元素将它应用到指定‘ none ‘以外的值。 通过元素的变换矩阵,局部坐标系统会渲染成元素的映射 。 转换是累加的。 也就是说,元素在他们的父坐标系统建立其局部坐标系统。 从用户的角度看,一个元素有效积累所有的transform属性以适用于其祖先以及任何局部的改变。这些transform的积累为元素定义通用变换矩阵(CTM)。
EXAMPLE
- div {
- transform:translate(100px,100px);
- }
此变换100像素在X和Y方向移动的元素。
EXAMPLE
- div {
- height:100px;width:100px;
- transform:translate(80px,80px)scale(1.5,1.5)rotate(45deg);
- }
- <div style="transform: translate(80px, 80px)">
- <div style="transform: scale(1.5, 1.5)">
- <div style="transform: rotate(45deg)"></div>
- </div>
- </div>
此变换移动80像素元素在X和Y方向,然后由150%尺度的元素,那么它的Z轴顺时针旋转45°。 需要注意的规模和旋转操作元素的中心,因为该元素具有“改造来源的50% 50%的默认。需要注意的是相同的渲染,可以由嵌套元素的等效变换得到。
ok 书归正传,Tip来了,总共分为两步:
1.我们要创建一个有border的四方形,用CSS3 transfrom 作 45 度旋转。
2.IE的实现-利用 IE 的 matrix filter 实现 css3 transfrom 的兼容方案。
EXAMPLE
- .tips {
- width:200px;
- position:relative;
- padding:10px;
- border:1pxsolid blue;
- background-color:skyBlue;
- border-radius:5px;
- }
- .diamond{
- -ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.7071067811865475, M12=-0.7071067811865477, M21=0.7071067811865477, M22=0.7071067811865475, SizingMethod=‘auto expand‘)";
- filter:progid:DXImageTransform.Microsoft.Matrix(
- M11=0.7071067811865475,
- M12=-0.7071067811865477,
- M21=0.7071067811865477,
- M22=0.7071067811865475,
- SizingMethod=‘auto expand‘
- );
- -moz-transform:rotate(45deg);
- -o-transform:rotate(45deg);
- -webkit-transform:rotate(45deg);
- -ms-transform:rotate(45deg);
- transform:rotate(45deg);
- position:absolute;
- width:10px;
- height:10px;
- background-color:skyBlue;
- display:block;
- font-size:0;
- }
- :root .diamond{filter:none\9;}/*ie9 hack*/
- .tip-top{
- border-top:1pxsolid blue;
- border-left:1pxsolid blue;
- left:10px;
- top:-6px;
- }
- .tip-left{
- border-bottom:1pxsolid blue;
- border-left:1pxsolid blue;
- left:-6px;
- top:20px;
- }
- .tip-bottom{
- border-bottom:1pxsolid blue;
- border-right:1pxsolid blue;
- left:10px;
- bottom:-6px;
- }
- .tip-right{
- border-top:1pxsolid blue;
- border-right:1pxsolid blue;
- right:-6px;
- top:20px;
- }
- <div class="tips">
- <i class="diamond tip-top"></i>
- <i class="diamond tip-bottom"></i>
- <i class="diamond tip-left"></i>
- <i class="diamond tip-right"></i>
- <div class="text"></div>
- </div>
参考阅读: http://www.w3.org/TR/2012/WD-css3-transforms-20120403