Calzado infantil, es hora de renunciar a la solución de adaptación móvil rem

1. Antecedentes

A la hora de adaptar pantallas de varios tamaños en el terminal móvil, el esquema rem es el más utilizado. Todos hemos escrito código como este para establecer el tamaño de fuente raíz. En esta fórmula de cálculo, los dos parámetros de ancho del dispositivo y tamaño del borrador del diseño de la interfaz de usuario son fáciles de entender, pero ¿por qué debería dividirse por 100, por qué no 10, 50 u otros valores?

  const setRem = () => {
    const deviceWidth = document.documentElement.clientWidth;
    // 获取相对UI稿,屏幕的缩放比例
    const rem = (deviceWidth *100) / 750;
    // 动态设置html的font-size
    document.querySelector('html').style.fontSize =  rem + 'px';
  };
复制代码

Después de verificar cierta información, aprendí que el esquema rem es un esquema de transición para la ventana gráfica. Dividirlo por 100 es la unidad de 100vw que simula la ventana gráfica. En ese momento, los navegadores no admitían bien la ventana gráfica, y ahora es 2022, como usted puede ver, los principales fabricantes de navegadores tienen una alta tasa de soporte para viewport. Puedes usarlo con confianza.

2. Ventajas sobre rem

  • La semántica es mejor. En su significado original, rem es una unidad de fuente. No se usa para el diseño y la adaptación de varios tamaños de pantalla. Por ejemplo, en el ejemplo anterior, rem se usa como unidad de adaptación. Al calcular la fuente raíz , El parámetro 100 en la fórmula de cálculo es muy confuso y la palabra de la ventana gráfica es más significativa.
  • Puede escribir px directamente en el código y convertirlo en unidades vw con la ayuda del complemento postcss-px-to-viewport, que se adapta perfectamente a varios tamaños de pantalla en el lado móvil. No es necesario hacer lo anterior. Primero, establezca el tamaño de fuente base de la fuente raíz en Blue Lake, convierta la unidad px marcada en el borrador de diseño en unidad rem y luego extráigala en el código. El segundo es usar js para calcular y establecer el tamaño de fuente raíz. Naturalmente, al desarrollo front-end le gustan las unidades px, por lo que, por lo general, las unidades como rem, em, vw y vh no tienen el tamaño marcado en el borrador del diseño de la interfaz de usuario.

Se requieren costos de conversión al desarrollar. No es tan intuitivo y eficiente como escribir px directamente en el código.

3. La postura correcta del esquema postcss-px-to-viewport

Al ver los tutoriales en línea, todos dicen que instale el kit de herramientas postcss-px-to-viewport en el proyecto, pero después de instalar y configurar postcss-px-to-viewport, ejecute el proyecto y encuentre el siguiente error en la línea de comando:

postcss-px-to-viewport: postcss.plugin was deprecated. Migration guide: https://evilmartians.com/chronicles/postcss-8-plugin-migration

Dice que postcss-px-to-viewport instalado está desactualizado, la guía de migración se refiere a evilmartians.com/chronicles/…

3.1 Instalar postcss-px-to-viewport-8-plugin

yarn add -D postcss-px-to-viewport-8-plugin
复制代码

3.2 在项目下创建postcss.config.js


module.exports = {
  plugins: {
    'postcss-px-to-viewport-8-plugin': {
      unitToConvert: 'px', // 需要转换的单位,默认为"px"
      viewportWidth: 750, // 设计稿的视口宽度
      unitPrecision: 5, // 单位转换后保留的精度
      propList: ['*'], // 能转化为vw的属性列表
      viewportUnit: 'vw', // 希望使用的视口单位
      fontViewportUnit: 'vw', // 字体使用的视口单位
      selectorBlackList: [], // 需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位。
      minPixelValue: 1, // 设置最小的转换数值,如果为1的话,只有大于1的值会被转换
      mediaQuery: false, // 媒体查询里的单位是否需要转换单位
      replace: true, //  是否直接更换属性值,而不添加备用属性
      exclude: [/node_modules/], // 忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
      include: [/src/], // 如果设置了include,那将只有匹配到的文件才会被转换
      landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
      landscapeUnit: 'vw', // 横屏时使用的单位
      landscapeWidth: 1338, // 横屏时使用的视口宽度
    },
  },
};
复制代码

4 效果演示

在项目中直接写px,运行项目之后,可以看到px已经转换成vw单位了

#app{
  width:100px
}
复制代码

需要注意的是: 1.postcss-px-to-viewport 对内联css样式,外联css样式,内嵌css样式有效,对js动态css无效。 所以要动态改变css展示效果的话,要使用静态的class定义变化样式,通过js改变dom元素的class实现样式变化。 2. Vant组件的设计稿尺寸是375px,可用通过覆盖:root下的Vant的css变量中px单位的方式,对Vant组件做适配

Supongo que te gusta

Origin juejin.im/post/7084926646033055752
Recomendado
Clasificación