sonofmagic / weapp-tailwindcss

weapp-tailwindcss - bring tailwindcss to weapp ! 把 tailwindcss 原子化思想带入小程序开发吧 ! weapp-vite 把现代化的开发模式带入小程序开发
https://weapp-tw.icebreaker.top
MIT License
1.2k stars 87 forks source link

v3 大版本改动与迁移 #259

Closed sonofmagic closed 9 months ago

sonofmagic commented 9 months ago

v3 版本改动前瞻

将会有什么改动?

v3 版本主要是删去一些过时的功能,配置项,同时会改变插件的默认值,使得整体插件变得更易用,更容易安装 假如你没有用到什么自定义配置,那么恭喜你,完全可以平滑升级上来。

配置项改动

删除的配置项

增加的配置项

为什么默认不开启?

  1. 为了从 2.x 版本可以平滑的过渡到 3.x
  2. 从我的视角看,内置 postcss 虽然整体集成度上更高了,但是对其他开发者可能不是那么自由,比如在 2.x 时候,由于 postcss-rem-to-responsive-pixel 是外置的,所以开发者可以自由的决定它的加载顺序,不像内置之后都是我决定的。不过内置好处也有,就是开箱即用

增强的配置项

修改的默认值

现在选项合并,数组默认行为变为覆盖,原先是合并:

const options = getOptions(input,defaults)
defaults: ['a','b'], input:['c'] 
// before: 
options == ['a','b','c']
// after:
options == ['c']
sonofmagic commented 9 months ago

原因解释

cssChildCombinatorReplaceValue

tailwindcss h5 环境中, space-y-4 这类的类名默认会生成这样的选择器: .space-y-4>:not([hidden])~:not([hidden])

不过很遗憾,这种选择器在小程序里会直接 挂掉,因为小程序中 ~(后续兄弟选择器) 是非常受限的,包括 .space-y-2>view ~ view 这种选择也会在小程序里面之间挂掉,所以不得以使用了 +(接续兄弟组合器),这2个选择的区别主要在于后一个元素是否紧挨着前一个元素。类似于 .space-y-2>view + view,但是这样又存在缺陷了,也就是说 必须是紧挨着的 view 才会生效, 所以:

    <view class="space-y-2">
      <view>view0</view>
      <view>view1</view>
      <text>text0</text>
      <view>view2</view>
      <text>text1</text>
    </view>

只有 view1 会生效 mt-2 的距离,cssChildCombinatorReplaceValue 是一个解决方案,你可以这样设置: cssChildCombinatorReplaceValue: ['view', 'text'] (其实没有必要把 'text' 加入进来,因为它默认是 inline 的,在布局方面给上下外边距无效,除非你改成 block/inline-block 这种,那还不如使用 view 呢), 它会生成这样的选择器:

.space-y-2>view + view,.space-y-2>view + text,.space-y-2>text + view,.space-y-2>text + text

什么!为什么这么长?? 因为只有这样才能让 view, text 标签不论怎么排列都有效,这就是代价,假如你传入更多选项,它还会变得更长:

cssChildCombinatorReplaceValue: ['view', 'text', '.ice']: .space-y-2>view:not(.weapp-tw-ig) + view:not(.weapp-tw-ig),.space-y-2>view:not(.weapp-tw-ig) + text:not(.weapp-tw-ig),.space-y-2>view:not(.weapp-tw-ig) + .ice,.space-y-2>text:not(.weapp-tw-ig) + view:not(.weapp-tw-ig),.space-y-2>text:not(.weapp-tw-ig) + text:not(.weapp-tw-ig),.space-y-2>text:not(.weapp-tw-ig) + .ice,.space-y-2>.ice + view:not(.weapp-tw-ig),.space-y-2>.ice + text:not(.weapp-tw-ig),.space-y-2>.ice + .ice

那只传入一个 ':not(n)' 可以嘛,不行 .space-y-2>:not(n) + :not(n) 之间报错挂掉了。因为 > 在小程序里面也存在着诸多限制,后面之间跟伪类会挂。