首页 > 其他分享 >UnoCSS 简化 CSS 的书写,Nice!

UnoCSS 简化 CSS 的书写,Nice!

时间:2023-01-11 14:55:54浏览次数:55  
标签:样式 leh 原子化 UnoCSS class CSS Nice

CSS 样式太多,重复写

在学习 UnoCSS 之前,我提出几个问题:

  1. 你是否有过写完了 HTML 之后,跳转到 style 写 CSS 这样来回跳转的痛苦?
  2. 你是否有过不知道如何给节点取类名的痛苦(有的节点确实没啥必要取类名,但就是需要写 CSS)?
  3. 你是否有过管理重复、繁杂、繁多的 CSS 而痛苦?

以上三个问题,在你使用了 UnoCSS 之后,基本上可以解决掉。使用 UnoCSS 可以更加快速地构建你的 HTML 和样式。这是 UnoCSS 作者对 CSS 的感想:重新构想原子化 CSS。有兴趣可以先去读一读。文章中有一个关键词“原子化”,使用了之后才可能对这个关键词有反应。

对 CSS 原子化的理解

我们写 CSS 时,通常都是 类名、id、标签 选中之后在 style 标签里写样式,通常都是一大坨的 CSS。有时候我们遇到了样式复用的情况,提取部分相同的样式到一个 class 中,再给这些节点添加一个 class:

.common {
  font-size: 20px;
  color: white;
  border: 1px solid #cccccc;
}

.a {
  background: green;
}

.b {
  background: blue;
}
<div class="a common"></div>
<div class="b common"></div>

似乎这样还不让我们满意,可复用性还是太低了些,假如第三个节点要用 common class 里的 border 呢?可以这样做:

.border {
  border: 1px solid #cccccc;
}

.common {
  font-size: 20px;
  color: white;
}
<div class="a common border"></div>
<div class="b common border"></div>
<div class="c common border"></div>

可以想象,样式越多、这样提取样式的工作也就越来越多。像是 Bootstrap 这样的 CSS 工具库,给我们做了不少这样的工作,可以减少很多我们写 CSS 的时间,直接套上类名就可以了。但问题是,我们引入了 Bootstrap 之后,里面没有用到的类样式,也会被打包到生产环境中,是不是太影响性能了呢?我们的理想是,不用的就不要打包,舍弃掉,而只需要用到的。

UnoCSS

重新构想原子化 CSS - 向你介绍 UnoCSS。我就直接通过案例来向你展示 UnoCSS 到底给我们带来了什么好处。先来看看我通过 UnoCSS 写的一个 Vue 组件:

image

再来看看我没有用 UnoCSS 的组件的样子:

image

是真的丑!样式也很多重复的,我的 font-size 已经写了不知道多少遍了,border-radius 也是,其他组件也有写,我也想过提取公共的,但是碍于太麻烦就没搞。

Vite + UnoCSS

cnpm i -D unocss
// vite.config.ts

// unocss
import Unocss from "unocss/vite";
import { presetAttributify, presetUno } from "unocss";

export default defineConfig(({ command, mode }) => {
  return {
    plugins: [
      vue(),
      Unocss({
        presets: [presetAttributify({}), presetUno()],
        rules: [
          [/^fs-(\d+\.{0,1}\d{0,2})$/, ([, d]) => ({ "font-size": `${d}px` })],
          [/^leh-(\d+\.{0,1}\d{0,2})$/, ([, d]) => ({ "line-height": `${d}` })],
        ]
      })
    ]
  };
});

UnoCSS 有一些自带的 class,可以使用 https://uno.antfu.me/ 来查询,没有自己想要的话,可以通过 rules 来自己设置一个规则,如上,就可以使用啦!

动态生成样式

来看这张图,c-#878787,UnoCSS 区别于 Bootstrap 的一个最直观的特点就是,值是可以动态设置的,而不是静态的,不需要给每一个颜色写一个 class:

image

上面的,oy、leh 等等都是如此,如上,leh 是我自己添加的一个 rules,leh-1.4 生成一个样式line-height: 1.4leh-2就可以生成:line-height: 2

原子化:组装 CSS

其实我更想说,原子化 CSS ≈ 独立 CSS,通过 class 来组装 CSS。而 UnoCSS 会根据给的值动态生成 CSS:

image

结束语

以上都是我自己使用 UnoCSS 的感想。UnoCSS 真的给我省了不少的功夫去写 CSS。解决了每一次要给节点命名的痛苦!!!

标签:样式,leh,原子化,UnoCSS,class,CSS,Nice
From: https://www.cnblogs.com/Enziandom/p/17043762.html

相关文章

  • CSS3实现3D旋转
    用CSS3制作3D旋转图像,效果很漂亮,3D旋转的特别之处就是支持阴影旋转和兼容响应式网页设计,使得整体场景非常有感觉。 先看一个简单的3D旋转效果例子: 正面:鼠标移上去就......
  • 在vue中使用CSS变量
    首先,我们要先知道什么是CSS变量,可以先看这篇文章在我们知道什么是CSS变量之后,我们尝试把它在项目中运用起来,一些需要动态计算的值,我们就可以使用它快速的实现效果。以下为......
  • JS_0072:静态html引入 js, css 添加随机数后缀
    1,<!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"><title>展示模型</title><metaname="viewport"content="width=device-width,initia......
  • CSS_2_盒子模型、定位
    使用css可以进行布局设计。  div标签:定义HTML文档中的一个分隔区块或者一个区域部分。常用于组合块级元素,以便通过CSS来对这些元素进行格式化。 ......
  • CSS3 背景设置
    背景图原点background-origin:padding-box;(默认)border-box|padding-box|content-boxbackground-origin是用来决定图片的原始起始位置。它有三个可选值co......
  • 纯css写滚动的弹幕特效
    最近在写一个春节活动,里面有一个类似拼多多展示中奖用户的弹幕滚动。后台给了随机滚动将近一百条数据,之前写过一版,是使用定位,将数据顶上去,但是一秒一动的效果略略有些卡顿......
  • 【css】元素垂直水平居中的几种情况
    写页面时免不了垂直居中、水平居中。在这里给出一些解决办法。原理:父元素 position:relative;保证子元素不脱离父元素子元素position:absolute;子元素相对于父元......
  • CSS实现文本一行垂直居中,两行垂直居中,超出两行文字显示省略号的方法
    实现单行垂直居中,两行垂直居中,超过两行省略…显示<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>......
  • 使用CSS 媒体查询功能满足不同屏幕分辨率要求
     这是探索DreamweaverCS5.5的HTML5和CSS3功能的由三个部分组成的教程系列的第三部分。在第一和第二部分中,通过使用HTML5结构元素和CSS3属性,其中包括圆角(roundedcorners)......
  • 使用 jQuery Mobile 和 CSS3 实现响应式设计
    jQueryMobile框架是一个JavaScript库,您可以用它来轻松地创建了一个移动版本的网站,将现有的Web页面转换成触摸友好的网站和应用程序。jQueryMobile框架允许用户通过......