Tailwind CSS 速成

news2024/11/29 7:41:19

Tailwind CSS 速成

完成了 responsive 和特效的学习后,现在折腾一下 tailwind CSS,这个 CSS 库本身就包含了很多的 utility class,之前跟着 yt 的视频写项目的时候,写了两个项目,好像不记得写过 CSS……

  • Redux Toolkit + React + Tailwind CSS 学习心得
  • Redux Toolkit + React + TS + Tailwind CSS 复刻 YouTube 学习心得

整体来说就是对它好奇了很久,现在系统化的过一遍。

Tailwind CSS 的特点就在于:

  • 它是一个原子化的 UI 库

    本身实现的颜色、功能其实挺多的,常规项目可能没什么特别需要定制的地方

    在这里插入图片描述

  • 其相对于 bootstrap、material 等 UI 库相比较而言更加 low level 一些

  • 因此具有更强的灵活性,同样也能够创造出风格更加独特的样式,不至于像 bootstrap,千页一面

  • 它遵循了移动端优先的理念

它的特性和命名规范也有关系,一旦了解了相关的模式之后,理解和记忆起来还是挺简单的,并且也有比较强的一致性,比如说 text-lg 指的就是大号字体,font-light 指的就是小号的 font weight,总之说理解起来还是比较方便的。

下面会就配置和过一下主要的一些特性,这里假设你对 CSS 有所了解(比如知道 grid 和 flex)

配置

开始前可以下载这几个插件方便开发,编辑器我用的是 vscode,所以这里列举的都是 vscode 上肯定有的:

  • liveserver

  • tailwind css intellisense

    这个的智能提示真的好用

    在这里插入图片描述

  • postcss language support

    这个插件在这个项目里,主要用途是移除黄色的波浪线

node 的设置配置如下:

    firstProj ❯ yarn init -y
    firstProj ❯ yarn add tailwindcss
    firstProj ❯ yarn tailwindcss init

package.json 配置如下:

{
  "scripts": {
    "build": "tailwind build -i src/styles.css -o public/styles.css --watch"
  }
}

tailwind config 配置如下:

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: ['./public/**/*.html'],
  theme: {
    extend: {},
  },
  plugins: [],
};

这一步还是必须的,tailwind@3 版本只会打包使用的 class,因此需要指定 content 让 tailwind 将使用的 class 打包到 public 里的 css 让网页可以正确读取。

最后使用 live server 运行即可。

此时的项目结构如下:

在这里插入图片描述

这里也有一个需要注意的地方,因为整体的流程是:

保存 src 下的代码,live server reload 的同时 node 重新编译,src 下的代码被成功编译,因此会存在一个时间差的问题。

如果觉得 live server 效果不行的话……那就手动刷新吧。

基础

这里列举一些比较常见的功能,更多功能还是需要到官网上去扒,这里只是做个 intro 没办法写全。

container

和 bootstrap 的 container 很像,使用方法是在 div 中直接加入 container 这个类名,它实际底层实现了很多,并且也兼顾了移动端:

在这里插入图片描述

margin & padding

明明很简单粗暴,margin 就是 m-<num>,如 m-0,这个时候的样式是四遍都应用的,只想要应用上下用 y,左右用 x,上下左右分别是 tblr,对应 top,bottom,left,right,如:

<div class="w-10 h-10 bg-red-500 m-10"></div>
<div class="w-10 h-10 bg-yellow-500 mx-10"></div>
<div class="w-10 h-10 bg-blue-500 my-10"></div>
<div class="w-10 h-10 bg-green-500 mt-10"></div>
<div class="w-10 h-10 bg-gray-500 mb-10"></div>
<div class="w-10 h-10 bg-violet-500 ml-10"></div>
<div class="w-10 h-10 bg-rose-500 mr-10"></div>

这段代码生成的效果为:

在这里插入图片描述

padding 也是差不多的操作。

width & height

命名规范是一样的,这里也用 w-<num>h=<num> 实现。

flex

flex 对 responsive 设计还是挺重要的,这里会稍微多提两句,依旧用上面的一堆 box 做案例,将其设置为 flex 就是直接在父元素节点上的类中加一个 flex 即可:

<div class="container flex">
  <div class="w-10 h-10 bg-red-500"></div>
  <div class="w-10 h-10 bg-yellow-500"></div>
  <div class="w-10 h-10 bg-blue-500"></div>
  <div class="w-10 h-10 bg-green-500"></div>
  <div class="w-10 h-10 bg-gray-500"></div>
  <div class="w-10 h-10 bg-violet-500"></div>
  <div class="w-10 h-10 bg-rose-500"></div>
</div>

在这里插入图片描述

操作方向(col/row)就可以用 flex-col, flex-col-reverseflex-row-reverse

wrap 的样式则用 flex-wrap,这点与原本的 CSS 也是一致。如下面这段代码:

<div class="container flex">
  <div class="w-1/2 mr-10 h-10 bg-red-500"></div>
  <div class="w-1/2 mr-10 h-10 bg-yellow-500"></div>
  <div class="w-1/2 mr-10 h-10 bg-blue-500"></div>
  <div class="w-1/2 mr-10 h-10 bg-green-500"></div>
  <div class="w-1/2 mr-10 h-10 bg-gray-500"></div>
  <div class="w-1/2 mr-10 h-10 bg-violet-500"></div>
  <div class="w-1/2 mr-10 h-10 bg-rose-500"></div>
</div>

w-1/2 代表这 width: 50%,这个情况下每个 box 的宽度应该占据页面的 50%,不过 tailwind 默认的行为会对其进行压缩,所以 UI 的呈献为:

在这里插入图片描述

这个解决方法有以下几种:

  1. 父元素中增添 flex-wrap

    在这里插入图片描述

  2. 子元素使用 shrink-0

    在这里插入图片描述

二者处理的场景不太一致,可以根据需求自行搭配。

接下来稍微深入的了解一下 grow/shrink 的系数问题,默认的系数只有 0 和 1,需要调整可以通过修改 theme.flex 或 config 文件中的 theme.extend.flex实现:

// 修改 config 文件
module.exports = {
  theme: {
    extend: {
      flex: {
        2: '2 2 0%',
      },
    },
  },
};

flex 提供的参数就是根据提供的系数进行调整的:

ClassProperties
flex-1, 伸缩均为 1,flex-basis 为 0flex: 1 1 0%;
flex-auto,伸缩均为 1,flex-basis 为 autoflex: 1 1 auto;
flex-initial, 只缩不伸flex: 0 1 auto;
flex-none,什么都没flex: none;

order

排序,似乎只对添加了 order 的 tag 奇效,如:

<div class="container flex flex-wrap">
  <div class="w-1/2 mr-10 h-10 bg-red-500 order-2"></div>
  <div class="w-1/2 mr-10 h-10 bg-yellow-500 order-3"></div>
  <div class="w-1/2 mr-10 h-10 bg-blue-500 order-4"></div>
  <div class="w-1/2 mr-10 h-10 bg-green-500"></div>
  <div class="w-1/2 mr-10 h-10 bg-gray-500"></div>
  <div class="w-1/2 mr-10 h-10 bg-violet-500"></div>
  <div class="w-1/2 mr-10 h-10 bg-rose-500"></div>
  <div class="w-1/2 mr-10 h-10 bg-black order-1"></div>
</div>

在这里插入图片描述

黑色的区块排序就在红色之前,绿色这些没有 order 的 div 就不受影响。

grid

grid 也是一个相对而言比较复杂的布局,这里也会稍微花点时间去说一下。

grid 默认是按行分类,也就是默认 grid-template-rows: auto;,因此想要看到效果的话就要对 column 进行定义。

这里参考一下之前做的案例进行实现,图片是背景色就不去做了,这里主要做 6 个对话框的布局,图片如下:

tailwind 实现如下:

<div class="container grid grid-cols-14 grid-rows-11 w-1/2 mx-auto">
  <div class="bg-red-500 col-start-3 col-span-3 row-start-2 row-span-2">
    <div class="h-20"></div>
  </div>
  <div
    class="bg-yellow-500 col-start-2 col-span-3 row-start-5 row-span-2"
  ></div>
  <div class="bg-blue-500 col-start-3 col-span-3 row-start-8 row-span-2"></div>
  <div
    class="bg-green-500 col-start-10 col-span-3 row-start-2 row-span-2"
  ></div>
  <div class="bg-gray-500 col-start-11 col-span-3 row-start-5 row-span-2"></div>
  <div
    class="bg-violet-500 col-start-10 col-span-3 row-start-8 row-span-2"
  ></div>
</div>

结果:

在这里插入图片描述

我这里修改了一下 tailwind 的 config:

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: ['./public/**/*.html'],
  theme: {
    extend: {
      gridTemplateColumns: {
        14: 'repeat(14, minmax(0, 1fr))',
      },
      gridTemplateRows: {
        11: 'repeat(11, minmax(0, 1fr))',
      },
      gridRowStart: {
        8: '8',
      },
    },
  },
  plugins: [],
};

但是有些属性不是很常用的话,可以直接通过添加变量的形式实现:

在这里插入图片描述

类名的修改为:

<div
  class="container grid grid-cols-[repeat(14, 76px)] grid-rows-[repeat(11,40px)] w-1/2 mx-auto"
></div>

字体相关

这一套也挺多,如果对 CSS 本身就稍微了解一些的话,根据上面的命名规则大概也能推出来 tailwind 的命名:

在这里插入图片描述

字体这个我觉得项目中做成原子化还是挺方便的,比如说不少页面 heading、paragraph、一些小卡片之类的字体都会不太一样,每次重复就挺烦的。

另外就是 font-weight,这里就稍微统一一些,使用 font-thin 这种取代了数字 100,这样对开发来说也稍微直观一些,毕竟就说 400 和 500 的区别,很难达成共识说粗还是正好,这里 400 就是 font-normal,500 是 font-medium,500 以上跟 bold 相关,算是用文字同意了一下理解。

font-size 这里也预订了一些从 xs 到 9xl 的预设值,同样,对于大多数项目来说达成一致比较容易,比如说正常文章内容同一用 base(这里没有 md 只有 base),小卡片或是中型以下的设备用 sm 这样。

其他的字体相关也一样,取消了用数字定义,转而算是比较约定俗成的文字定义。

border 相关

这个也是比较重要的,默认样式类型就是 solid,对于大多数常见的 case,想要一个边框,直接写 border-2,不过需要注意的有几点:

默认的边框都是 2 的倍数,默认颜色是一种很浅的灰,即 #e5e7eb;:

在这里插入图片描述

所以还是需要加上 border-color 进行修改。

box-shadow

shadow-<size> + shadow-<color-level/opacity> 的搭配,关于 inset 之类的 tailwind 没有内设,需要的话可以自行安排。

没有添加颜色的 box-shadow 是默认的浅灰色,没有添加大小是不会起效的。

:

: 意味着该 CSS 会对当前的状态进行反应,如在 hover 情况下北京变色可以用这样的 HTML:

<div
  class="bg-red-500 col-start-3 col-span-3 row-start-2 row-span-2 border-2 hover:bg-red-700 transition-colors"
></div>

效果如下:

在这里插入图片描述

这也包括 pseudo selector,内置的有如 first, last, odd, even 等

breakpoints

breakpoints 是 tailwind 中比较重要的一个工具了,它的用法也是和上面的 : 一样: <breakpoint>:<css-class>

因为 tailwind 式 mobile first,所以需要不断修改大设备的样式,如:

<div
  class="bg-red-50 md:bg-red-200 lg:bg-red-500 col-start-3 col-span-3 row-start-2 row-span-2 border-2"
>
  <div class="h-20"></div>
</div>

颜色会随着设备由小变大而由浅变深:

在这里插入图片描述

directives

directives 官方文档说就是用的 at-rules,基础的包括下面几种:

/* 这三个也是合法的 @layer 的值 */
@tailwind base;
@tailwind components;
@tailwind utilities;

@layer base {
  a {
    /* apply 用于应用样式 */
    @apply text-green-500;
  }
}

@layer components {
  .menu-button {
    @apply text-white bg-indigo-700;
  }
}

到这里基础的 tailwind css 知识点就总结的差不多了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/987099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vite和Webpack如何使用CDN包

为了精简打包输出的dist目录大小&#xff0c;我们可以引入CDN外部包的方式&#xff0c;来缩小打包的体积&#xff0c;加快打包速度。这里介绍Vite和Webpack中如何引入React CDN外部包。 一、Vite引入CDN包 1、安装插件 npm i vitejs/plugin-react-refresh vite-plugin-cdn-i…

常见注意力机制

注意力机制 &#xff08;具有自适应性&#xff09; 18年提出的一种新的 卷积注意力模块 &#xff1b;对前馈卷积神经网络 是一个 简单而有效的 注意力模块 &#xff1b; 因为它的 轻量级和通用性 &#xff0c;可以 无缝集成到任何CNN网络 当中&#xff0c; 对我们来讲&…

应用爆炸式增长,看F5如何做好网络安全防护

近年来&#xff0c;应用的数量呈现爆炸式增长。出行、支付、订单&#xff0c;开会&#xff0c;数字化的形式都在取代传统的消费&#xff0c;业务开展、工作内容都在发生着巨大的变化。随着数字化进程的加速&#xff0c;安全风险、安全问题暴露得越来越多。作为拥有强大安全基因…

【深入理解Linux内核锁】七、互斥体

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、互斥体API2、API实现2.1 mutex2.2 mutex_init2.3 mutex_lock2.4 mutex_un…

【高阶篇】Redis协议(RESP )详解

文章目录 0. 前言大纲 1. Redis协议(RESP)1. 简介2. 协议设计附加类型 3. 数据传输请求和响应之间的交互模式客户端与服务端交互 4. java实现 RESP协议 3. 总结4.参考资料 0. 前言 当我们谈论 Redis 时&#xff0c;一般来说&#xff0c;我们讨论的核心是它用来存储和检索数据的…

yapi以及gitlab的容器化部署

yapi部署&#xff1a; https://blog.csdn.net/Chimengmeng/article/details/132074922 gitlab部署 使用docker-compose.yml version: 3 services: web: image: twang2218/gitlab-ce-zh:10.5 restart: always hostname: 192.168.xx.xx environm…

Pythonの类

Python是一种面向对象编程语言&#xff0c;因此类在Python中是很重要的概念。类是一种定义数据和行为的模板&#xff0c;可以创建对象并针对特定的问题对其进行操作。 在Python中&#xff0c;类的定义以关键字"class"开头&#xff0c;后跟类的名称。类可以包含方法和…

NRF2401

NRF2401 简介工作模式 简介 NRF24L01 是 Nordic 公司的一款无线通信通信芯片&#xff0c;采用 FSK 调制&#xff0c;内部 集成自己的 Enhanced Short Burst 协议。可以实现点对点或是 1 对 6 的无线通信。 无线通信速度可以达到 2M&#xff08;bps&#xff09;。 工作模式 六…

ELK高级搜索(四)

文章目录 16&#xff0e;评分机制详解16.1 评分机制 TF\IDF16.2 Doc value16.3 query phase16.4 fetch phase16.5 搜索参数小总结 17&#xff0e;聚合入门17.1 聚合示例17.2 bucket和metric17.3 电视案例 18&#xff0e;java api实现聚合19&#xff0e;es7 sql新特性19.1 快速入…

【SpringCloud微服务--Eureka服务注册中心】

SpringCloud微服务全家桶学习笔记【持续更新】 gitee仓库 内容&#xff1a;SpringCloud SpringCloud alibaba 技术栈&#xff1a;Java8mavengit&#xff0c;githubNginxRabbitMQSpringBoot2.0 微服务架构概述 微服务架构是一种架构模式&#xff0c;它提倡将单一应用程序划…

sqlserver 各种集合、区间、 时间轴(持更)

1.所有有交集的区间 场景&#xff1a;在事件表里查找某年员工的岗位系数&#xff0c;并计算其加权平均数。case1&#xff1a;该员工是老员工&#xff0c;从2020年一直到2049年。case2&#xff1a;该员工是老员工&#xff0c;但是今年离职。case3&#xff1a;该员工是今年的新员…

亚马逊云科技与伊克罗德推出AI绘画解决方案——imAgine

在过去的数月中&#xff0c;亚马逊云科技已经推出了多篇介绍如何在亚马逊云科技上部署Stable Diffusion&#xff0c;或是如何结合Amazon SageMaker与Stable Diffusion进行模型训练和推理任务的内容。 为了帮助客户快速、安全地在亚马逊云科技上构建、部署和管理应用程序&#x…

OpenCV之形态学操作

形态学操作包含以下操作&#xff1a; 腐蚀 (Erosion)膨胀 (Dilation)开运算 (Opening)闭运算 (Closing)形态梯度 (Morphological Gradient)顶帽 (Top Hat)黑帽(Black Hat) 其中腐蚀和膨胀操作是最基本的操作&#xff0c;其他操作由这两个操作变换而来。 腐蚀 用一个结构元素…

谷歌Chrome庆祝15周年,推出全新设计!了解最新信息!

谷歌浏览器本月将满15岁&#xff0c;为了纪念这一时刻&#xff0c;它正在进行改造和升级。 这一点意义重大&#xff0c;因为Chrome在全球有数十亿人使用&#xff0c;因此谷歌所做的每一项改变都会对互联网以及这些人与互联网的互动方式产生巨大影响。即使你不使用Chrome或不关…

深入了解HTTP代理的工作原理

HTTP代理是一种常见的网络代理方式&#xff0c;它可以帮助用户隐藏自己的IP地址&#xff0c;保护个人隐私和安全。了解HTTP代理的工作原理对于使用HTTP代理的用户来说非常重要。本文将深入介绍HTTP代理的工作原理。 代理服务器的作用 HTTP代理的工作原理基于代理服务器的作用。…

一文讲透【静态脱敏实操】

1&#xff1a;直接上工具类 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version> </dependency>2:Hutool 支持的脱敏数据类型 现阶段最新版本的 Hutool 支持的脱敏数据类…

浅析目标检测入门算法:YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4

本文致力于让读者对以下这些模型的创新点和设计思想有一个大体的认识&#xff0c;从而知晓YOLOv1到YOLOv4的发展源流和历史演进&#xff0c;进而对目标检测技术有更为宏观和深入的认知。本文讲解的模型包括&#xff1a;YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4…

LaTeX总结-2023年9月8日

1. LaTeX总结 文章目录 1. LaTeX总结1.1. 定义作者&#xff0c;通讯作者&#xff0c;地址&#xff0c;宏包1.1.1. Example 11.1.2. Example 21.1.3. 特殊符号——作者标注注 1.2. 调整字体1.2.1. 数学模式下使用正体1.2.2. LaTeX内使用中文1.2.3. 正文文字 1.3. 常用符号及字母…

java - lua - redis 完成商品库存的删减

java调用lua脚本完成对商品库存的管理 主页链接 微风轻吟挽歌的主页 如若有帮助请帮忙点赞 //lua脚本 获取到内存不够的商品StringBuilder sb new StringBuilder();//定义一个数组存储可能缺少库存的值sb.append(" local table {} ");//获取值sb.append(" …

Java中的内部类

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;什么是内部类&#x1f415;内部类的分类&#x1f9f8;成员内部类&#x1f9f8;静态内部类&#x1f9f8;局部内部类&#x1f9f8;匿名内部类 &#x1f415;内部类的特点&a…