Tailwind CSS 速成

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><divclass="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><divclass="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><divclass="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: [],
};

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

在这里插入图片描述

类名的修改为:

<divclass="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:

<divclass="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,所以需要不断修改大设备的样式,如:

<divclass="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.rhkb.cn/news/123304.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 4设置界面区域外的颜色

Qt4界面小于显示屏, 设置界面范围之外的背后的显示颜色&#xff1a;

【计算机网络】 子网划分

文章目录 IP地址分类子网掩码网关广播地址非默认子网掩码子网划分常见问题 IP地址分类 学会十进制和二进制的相互转换可以很快速的有规律的记住 子网掩码 又叫网络掩码&#xff0c;地址掩码&#xff0c;子网络遮罩&#xff0c;就是说把子网络遮起来&#xff0c;不让外界窥探到…

windows使用vim编辑文本powershell

windows使用vim编辑文本 1、安装 chocolatey 包 以管理员身份打开 PowerShell 进行安装 Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(https://chocolatey.org/install.ps1))2、管理员身份打开 PowerShell 并使…

漏洞分析|Adobe ColdFusion WDDX 序列化漏洞利用

0x01 概述 在上一篇有关 Adobe ColdFusion 序列化漏洞&#xff08;CVE-2023-29300&#xff09;的文章中&#xff0c;我们对已公开的 JNDI 利用链&#xff08;CVE-2023-38204&#xff09;进行了复现。JNDI 利用链受目标出网的限制&#xff0c;在不出网的情况下无法很好地利用。…

线性代数的学习和整理20,关于向量/矩阵和正交相关,相似矩阵等

目录 1 什么是正交 1.1 正交相关名词 1.2 正交的定义 1.3 正交向量 1.4 正交基 1.5 正交矩阵的特点 1.6 正交矩阵的用处 1 什么是正交 1.1 正交相关名词 orthogonal set 正交向量组正交变换orthogonal matrix 正交矩阵orthogonal basis 正交基orthogonal decompositio…

iOS 16.4更新指南:问题解答与新功能一览

我应该更新到iOS 16.4吗&#xff1f;这是许多iPhone用户在新更新可用时问自己的一个常见问题。最新的iOS版本提供了各种功能和改进&#xff0c;因此更新的诱惑力很大。 但是&#xff0c;在更新之前&#xff0c;你应该考虑几个因素&#xff0c;以确保安装过程顺利成功。这些因素…

入门深度学习你不得不关注的小知识:什么是HuggingFace?

入门深度学习你不得不关注的小知识&#xff1a;什么是HuggingFace&#xff1f; 文章目录 入门深度学习你不得不关注的小知识&#xff1a;什么是HuggingFace&#xff1f;来自何方&#xff1f;核心在线平台HuggingFace Spaces社区总结 HuggingFace 是一个专注于自然语言处理&…

【Java SE】抽象类与接口

目录 【1】抽象类 【1.1】抽象类概念 【1.2】抽象类语法 【1.3】抽象类特性 【1.4】抽象类的作用 【2】接口 【2.1】接口的概念 【2.2】语法规则 【2.3】接口使用 【2.4】接口特性 【2.5】实现多个接口 【2.6】接口间的继承 【2.7】接口使用实例 【2.8】Clonable …

mybatis 数据库字段加密

目录 1、引入依赖 2、添加配置 3、指定加密字段 4、测试&#xff0c;效果 1、引入依赖 <dependency><groupId>io.github.whitedg</groupId><artifactId>mybatis-crypto-spring-boot-starter</artifactId><version>1.2.3</version>…

【前端】WebWorker 在前端SPA框架的应用

一、什么是WebWorker 概念&#xff1a; Web Worker是一种在Web浏览器中运行的JavaScript脚本&#xff0c;它可以在后台线程中运行&#xff0c;而不会阻塞主线程。这意味着Web Worker可以在后台执行复杂的计算任务&#xff0c;而不会影响用户界面的响应性能 除了标准的JavaScri…

Spring Bean 别名处理原理分析

今天来和小伙伴们聊一聊 Spring 中关于 Bean 别名的处理逻辑。 1. Alias 别名&#xff0c;顾名思义就是给一个 Bean 去两个甚至多个名字。整体上来说&#xff0c;在 Spring 中&#xff0c;有两种不同的别名定义方式&#xff1a; 定义 Bean 的 name 属性&#xff0c;name 属性…

Python 内置函数详解 (1) 数学运算

近期在外旅游,本篇是出发前定时发布的,不完整,旅游回来后再补充。 Python 内置函数 Python3.11共有75个内置函数,其来历和分类请参考:Python 新版本有75个内置函数,你不会不知道吧_Hann Yang的博客-CSDN博客 函数列表 abs aiter all …

【LeetCode-中等题】90. 子集 II

文章目录 题目方法一&#xff1a;递归加回溯&#xff08;去重版&#xff09;![在这里插入图片描述](https://img-blog.csdnimg.cn/abc4e8d0e3f940fcbdcb072acf80734e.png) 题目 本题nums数组存在重复元素&#xff0c;所以本题会涉及一个去重操作&#xff1a; 子集无需去重版本&…

系统学习Linux-zabbix监控平台

一、zabbix的基本概述 zabbix是一个监控软件&#xff0c;其可以监控各种网络参数&#xff0c;保证企业服务架构安全运营&#xff0c;同时支持灵活的告警机制&#xff0c;可以使得运维人员快速定位故障、解决问题。zabbix支持分布式功能&#xff0c;支持复杂架构下的监控解决方…

MATLAB R2023a完美激活版(附激活补丁)

MATLAB R2023a是一款面向科学和工程领域的高级数学计算和数据分析软件&#xff0c;它为Mac用户提供了强大的工具和功能&#xff0c;用于解决各种复杂的数学和科学问题。以下是MATLAB R2023a Mac的一些主要特点和功能&#xff1a; 软件下载&#xff1a;MATLAB R2023a完美激活版 …

Lua语法结构

Lua基础 注释 print("hello.") -- 单行注释的写法 --[[ 多行注释的写法 --]]标识符 关键字 **and **break**do **else**elseif ****end **falsefor**function **ifinlocalnilnotorrepeatreturnthentrueuntil**while ** 数据类型 nil** boolean**** number**** st…

Excel VSTO开发10 -自定义任务面板

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 10 自定义任务面板 自定义任务面板&#xff08;有些地方称为侧边面板&#xff09;即CustomTaskPane&#xff0c;这个类在Microsoft…

软件架构设计(六) 软件架构风格-MDA(模型驱动架构)

概念 模型驱动架构MDA, 全称叫做Model Driven Architecture。 Model:表示客观事物的抽象表示Architecture:表示构成系统的部件,连接件及其约束的规约Model Driven: 使用模型完成软件的分析,设计,构建,部署和维护等 开发活动MDA起源于分离系统规约和平台实现的思想。之前…

C++------vector【STL】

文章目录 vector的介绍及使用vector的介绍vector的使用 vector的模拟实现 vector的介绍及使用 vector的介绍 1、vector是表示可变大小数组的序列容器。 2、就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问和数…

js数据类型?如何判断js数据类型?

在JavaScript中&#xff0c;有以下几种数据类型&#xff1a; 基本数据类型&#xff08;Primitive Data Types&#xff09;&#xff1a; String&#xff08;字符串&#xff09;&#xff1a;表示文本数据&#xff0c;使用引号&#xff08;单引号或双引号&#xff09;括起来。Numb…