Closed 723386252 closed 9 months ago
在这个宽度百分百所在的选择器上面添加标记注释
/* not-root-containing-block */
试试。
width:100% 涉及到的选择器还是有点多的,而且在使用中发现,有部分 width:100% 会被编译,有部分不会被编译
宽度百分百所在选择器内有 position: fixed;
的会被编译,想问下您这个百分百是什么场景,或者方便截图看下吗?之所以转换,是因为有最大宽度的限制,比如最大宽度 600 像素,应该是期望 fixed
定位的元素的百分百宽度也是 600 像素。
好的,我详细描述一下我的使用场景:我的项目是移动端 web 项目,之前使用 postcss-px-to-viewport,满足了大部分需求,后来要求适配 ipad,在 ipad 场景下,因为屏幕宽度大,导致页面缩放过大,想着能限制一下最大放大比例,使用了您这边开发的工具,设置了maxDisplayWidth,但是发现这个属性好像并不是用来限制最大缩放比的,而是限制最大的窗口宽度,那么我该如何使用这个工具限制最大缩放比例呢
在那个范例里面,元素的比例都是不变的,比例也就是宽高比,当宽度变宽,高度也会同比例变高,但是有一个最大比例,您适配的 iPad 和移动端之间是需要用宽度来限制最大比例的,也就是 maxDisplayWidth
(最大窗口宽度)。
是的,其他的表现都与我预期的一致,只是当我使用 vant 组件库的 overlay 组件的时候,由于遮罩层是 fixed 定位,导致非 fixed 的元素保持 100% 宽度,但是遮罩层只有固定的宽度了
像 Vant 这种外部 ui 库,可能会有需要转换的单位不和 position: fixed;
在同一选择器的情况,我有提供 rootContainingBlockSelectorList
这个属性,要您打开开发者工具,找到对应的选择器名称,然后填进去,插件识别到这个选择器后,即时没有 position: fixed;
,也会把它当作包含块是浏览器窗口来处理转换了。
比如上面的 Vant Popup,因为它的宽度是单独的,所以可以在配置里加这个,来表示这个宽度也是基于根元素包含块的:
{
+ rootContainingBlockSelectorList: ['van-popup--bottom']
}
可以向您请教一下吗,在 fixed 定位中,对百分比的宽度进行最大值限制的目的是什么,为什么对于其他定位的百分比宽度,不进行限制
目的是让桌面端和移动端看起来一样;其它定位的长度属性不是基于根包含块,只有 fixed
定位时,长度属性大部分情况是基于根包含块,而在达到最大缩放比之后,我觉得应用这时候应该期望包含块不再是根包含块了,而是被限制了最大缩放比的、处于居中的那一块应用视图,所以原来和根包含块有关的要重算。
不止百分比,如果是 position: fixed; width: 100vw;
这个宽度也和 100%
一样会重算下。
我觉得这么处理是比较没有争议的,比如导航栏和弹窗,弹窗如果设置了最小高度还好,如果没有设置,在宽屏上,肯定是一条长直线,相比有最大宽度的弹窗,缩放比保持最大和移动端一致,看起来会好一点,唯一的问题可能是背景半透明蒙层也限制了宽度。
理解了,提个小建议,可以增加一个配置项来关闭这个功能,让表现和postcss-px-to-clamp一致,因为100% 宽度的移动场景是存在的
昨天晚上我发了个新版本 4.1.0,加了属性可以关闭这个 fixed
定位矫正,配置里您可以加个这个选项 appContainingBlock
:
{
+ appContainingBlock: "manual",
}
这个代表如果要调整包含块,要开发过程中手动调整,插件不矫正 fixed
定位的元素。其实是有上面说的标记注释来关闭这个功能的,需要关闭的地方不多的话用标记注释没问题。
在这个宽度百分百所在的选择器上面添加标记注释
/* not-root-containing-block */
试试。