美文网首页
css3笔记5 transform,transition

css3笔记5 transform,transition

作者: wudimingwo | 来源:发表于2018-11-14 13:46 被阅读0次

特点:
transform 不会影响布局.
感觉应该是为动画而生的.
会先计算 margin,然后计算verticalaline,
根据这些完成dom的基本位置之后,才会计算 transform
也就是说, transform 不会影响 margin,verticalaline


image.png

问题1.
以下两种设置的效果是不同的.

item1{
    transform: rotateZ(45deg) rotateX(45deg) rotateY(45deg);
}
item2{
    transform: rotate3d(1,1,1,45deg);
}
image.png

原因在于, 元素的参照系,参照坐标轴是以自身为确定的.
也就是,会随着元素的旋转跟着变化.

(在这里我们留个数学题, 留待日后好好学一线向量.
如何通过 第一种三个量的设置, 模拟出跟第二种一样的效果?)

第二个问题,
如果父级因transform 而变化, 子级会跟着变嘛?
会,
父级block, 子级inline,inline-block,block,时会
父级relative, 子级absolute 时,也会
float时也会.
其实这符合逻辑.
如果父级都设置了transform 会如何?
似乎可以认为,
先根据父级进行行为,在此基础上,再以子级的进行行为.


image.png

问题:
scalez 是个什么鬼?
scaleZ()
html
根据这个页面,可以认为: scaleZ会对translateZ 的数据进行放大或缩小?

image.png
css
image.png
效果图
image.png
更换数据
css
image.png
image.png image.png

这个transform-origin 非常重要, 这个直接就决定了,
上面所有变换的轴,以及最后的效果
有两个参数, x,y,
x决定 x轴的位置,从border开始的左处为0
y决定 y轴的位置,从border开始的顶处为0
默认值为50%50% 该百分比就是 以包含border的width为基准的.
z轴以 x,y自然决定.

刚开始我感觉很别扭,
因为无法决定x轴和 y轴在z轴上的位置.
然后我明白了,所有的一切都源自一个原因.
那就是,元素在 z轴方向上是没有厚度的.
所以x,y轴在z轴方向元素身上,只有一个位置.

说到这里我们需要总结一下

transfrom很强大,因为引入了3d的概念.
但元素在z轴上是没有厚度的.
x 轴 有厚度, 有空间位置.
y 轴 有厚度, 有空间位置.
z 轴 没有厚度,有空间位置.
translate 影响的是 空间位置.
scale 影响的 应该是 厚度.
刚才让我差异的 scalez 是影响的 貌似是空间位置!
rotate 影响的是 空间位置.
skew 影响的 应该是 空间位置? 应该是 厚度?
因为如果 影响的是 空间位置, 没理由 没有 scalez啊?

关于transform-origin , 还有一个注意点是, 只会受到元素自身的影响.
父级的transform-origin 是不会影响子级的origin.
这一点跟 perspective-origin似乎是不同的?

自己研究了半天,只得出这些

perspective-origin是个什么属性?
发现 perspecive-origin只由 父级的决定
但 perspective 属性,
会受到 父级影响,也会受到子级影响,
两者不是 覆盖效果,而是叠加效果.
同样的数值,在父级和子级的设置效果不同.
两者的叠加不是加法.
同样的数据,子级的视距似乎比父级的视距要小,
也就是3d效果会更明显

还是搜索来的方便
大神果然是大神
好吧,CSS3 3D transform变换,不过如此
CSS3 3D transform视角属性perspective(Y旋转角度一致)实例页面

image.png

大概是明白了.
perspective-origin 只能设置在 父级上,并且只能影响子级,不能影响自身
perspecive: 500px 只能设置在 父级上,并且只能影响子级,不能影响自身
perspective-origin 只会影响 perspecitve:500px 而不会影响 transform:perspecitive(500px)

transform:perspective(500px) 只会影响自身,
默认的perspecive-origin 是自身的center
且该 perspecive-origin 是没有属性可以调整的.

最恶心的是,
perspecive:500px , 和 transform:perspective(500px) 是互相叠加的!
而叠加法则还不清楚.
perspecive:500px,transform:perspective(0 不设置) 和
perspecive:500px,transform:perspective(100000px) 效果很相似.

perspecive:0 不设置,transform:perspective(500px) 和
perspecive:100000px,transform:perspective(500px) 效果很相似.
也就是两者是互为基础,
但perspecive:500px,transform:perspective(500px) 的叠加
和perspecive:1000px 的效果不同
和transform:perspective(1000px) 的效果也不同

更恶心的是, 如果父级perspective-origin 不是默认值, 则两者叠加完全,嗯,难以理解?
难以预测?

偶然发现,这个效果是相似的.

.wrap1{
    perspective: 500px;
    .item1{
        transform: perspective(500px) rotateY(45deg);
    }
}
.wrap2{
    .item2{
        transform:perspective(250px) rotateY(45deg);
    }
}
image.png

根据测试得到以下几个数据 叠加的效果和后面的效果基本一致.
pers: 500 tranper : 500 和 transper 250
pers: 500 tranper : 400 和 transper 221
pers: 500 tranper : 300 和 transper 188
pers: 500 tranper : 200 和 transper 143

pers: 800 tranper : 800 和 transper 400
pers: 800 tranper : 400 和 transper 265
从上面的数据能得出公式嘛? 哎呀,感觉好浪费时间,
这玩意纯属靠猜, 我大概蒙出来了, 有点像小时候的发现数学规律
假设
pers:x tranper: y transpre: z
z = y / (x + y) * x
前提条件 x < y 如果 x > y 只需要把x,y的位置换一下就可以.
或者这么写更好理解
z/max = min/(min + max);
我在想,花了3,4个小时得出这么个东西,到底值不值?
不值, 不是说该知识点没有用,(确实可能用不上)
而是说,自己这么实验加猜测,实在是太浪费时间了.
应该找教材.妈了个比的.
但上面的公式很有局限,
仅限于 perspective-origin : center的情况.
至于perspective-origin : 其他数值; 的情况,
我就不能靠测试几个模拟的方式猜了,根本无法模拟.

===========
我不想提问题,每次想回答提出来的问题,都要浪费好长时间.
可还是要问一下,大不了就不回答完事.

perspective-origin 是否和 transform-origin 一样, 随着元素转换空间位置,
一起变化?
应该会吧.
假设不会, 那么translate 会原理 perspective-origin, 会出现变形才对.
当然这是针对父级元素而言的.
如果是子级元素,如果translate 且不是靠 trans:pers 来生成景深, 则会发生明显的视觉上的变形.

哎呀,说得好不清楚,就这样吧.
这一段,另起一个文章吧.

==========
再补一下transform-style: present 3d
我之前一直误会, 景深如果没有这个属性会失效.
不会失效.
这个属性的作用是,
按照空间的层次来展示.
如果不加


image.png

如果加


image.png

第一种是,按照dom元素,自己的层叠更高所以优先展示
第二种是,按照空间的层次,空间上的前面会覆盖后面.

继续看视频.


image.png

多个属性可以,分开设置

    transition: transform 1s,opacity 30s;  

支持的属性: 基本能用数值表示的


image.png image.png
image.png image.png
image.png
image.png

呵呵,原来视频里也有讲,哎..


image.png
image.png
image.png

相关文章

网友评论

      本文标题:css3笔记5 transform,transition

      本文链接:https://www.haomeiwen.com/subject/tyhrfqtx.html