微信公众号css布局和SVG推文的一些坑

因为公众号网页的限制,不能写js,不能写css,只能在html标签里写内联样式,但是常常有需求要在推文上做一些交互和动画,这时候就需要SVG。

但是SVG在公众号上也有很多坑,总结一下遇到的一些坑,也有一些公众号其他的坑。

1,css的position属性全部失效,把代码上传到公众号之后,它会把position属性的代码删掉,所以公众号的布局不能用定位

 

2,ID全部失效,把代码上传到公众号之后,它会把ID删掉,包括写在HTML标签上的ID,还有SVG标签里面的ID

 

3,css的transform属性全部失效,把代码上传到公众号之后,它会把transform属性的代码删掉,(经测试现在的transform属性可以正常用了),SVG相关标签的transform属性有效,例如 <g transform="translate(10 10)"></g> 这样写是有效的

 

4,svg 里面不能嵌套 svg , 不能嵌套 image 标签, 经测试现在可以嵌套image标签了,但是href属性即图片的链接必须是素材库里的图片链接,外链或者base64均无法显示,如果是页面里普通的img标签则没有这个限制,width和height必须要写,不然在IOS上显示不了图片。

 

5,svg 尽量不要用渐变的颜色,因为代码会很多,体积太大,这个要跟设计师沟通

 

6,svg 相当于一张图了,全部放进去会文件体积很大,可以先压缩一下,在线SVG压缩:https://www.zhangxinxu.com/sp/svgo/

 

7,设计图 在使用AI设计时候,并不能使用复合路径、第二不能有任何超出画板外的元素在,第三文字使用扩展变为路径使用,并不能使用栅格化

 

8,IOS 上svg 动画的restart="never"没效,就是在苹果手机上再次点击的话,动画还是会执行,安卓没事,只做一次性的动画效果的话要留意下,目前无解,有解决方法欢迎留言。

 

9,在公众号上是没办法通过媒体查询做屏幕适应的,所以遇到需要适应的元素,可以灵活使用VW或者VH作为单位来做适应

 

10,有的推文的交互一块内容然后向左滑动,但是之前遇到了要求向右滑动的,因为css横向滚动的容器默认滚动条是最左的,只能向左滑,如果想要右滑,我们需要在滚动的容器上加上dir="rtl"这个属性就行。这个属性原本用来规定文本的排列方向,用了这个属性文本就可以从右往左排,但是用在滚动容器上的时候,它就可以令滚动条一开始默认在最右,这样就可以一进来是往右滑的。(注意这个属性只适用于横向的排列和滚动,垂直方向是没效的)

 

11,做点击展开长图文,长图文里的元素不能有用float属性的,因为用了这个属性对应的元素会脱离文档流,在height为0的容器中也会显示出来,导致无法隐藏长图文。

 

12,在<g>标签里用style写内联样式,安卓跟PC端是有效的,在IOS上是失效的。例如我做一个旋转的动画,SVG是默认原点在左上角的,这时我们可以这样写<g style="transform-origin:50% 50%"></g>,这个g标签就会以中心为原点旋转,但是放到公众号推文上的时候,在IOS系统下<g style="transform-origin:50% 50%"></g>是不起作用的,它仍然以左上角为原点。做相关动画的时候要留意。

 

13,<svg>里可以通过<foreignObject>标签来嵌套其他的HTML元素,包括SVG,例如点击svg播放动效的时候同时播放音乐,先将音乐上传到公众号,再将代码复制过来,放到svg里用<foreignObject>包住,这样点击播放音乐的同时就会触发外层的SVG动画。

 

14,点击SVG后从头播放动图,需要先将动图放到页面之外,可以通过位移,点击触发之后再将动图移进来显示就可以从头播放动图,如果一进来就将动图显示在页面,他就会一直循环播放。

 

15,做点击展开长图文,可以将宽度写成固定值,现在大屏手机偏多,我一般写360,这样在各种手机看起来高度就会一样,宽度的话在更大屏的手机上居中就行。

 

 

 P.S.:

· 单位不能用百分比。例如transform:translateY(-100%) ; margin-top:-100%; 在公众号上会失效,建议用px或者vw/vh

· pointer-events:none; 这个属性可以让所有交互事件失效,在一些场景会需要,可自行探索

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值