主题与配置定制
4 / 5
高级功能与新特性
自在学
首页课程创意工坊价格
首页课程创意工坊价格
编程Tailwind CSS构建布局与组件

构建布局与组件

在前面的学习中,我们已经了解了 Tailwind CSS 的基本概念和安装配置。现在,让我们深入探讨如何使用 Tailwind CSS 构建高效、美观的布局和组件。这一部分我们从基础的布局工具开始,逐步掌握排版样式、视觉效果,最终能够构建出完整的网页组件。

构建布局与组件


Flexbox、Grid、Container、间距系统

布局是网页设计的基础,Tailwind CSS 为我们提供了强大的布局工具类,让我们能够轻松实现各种复杂的页面结构。这些工具类主要分为四个部分:Flexbox 弹性布局、Grid 网格布局、Container 容器以及间距系统。

Flexbox 弹性布局

Flexbox 是现代网页布局中最常用的方式之一,它能够让我们轻松地控制元素在容器中的排列和对齐方式。在 Tailwind CSS 中,我们通过 flex 类来启用 Flexbox 布局。

当我们给一个元素添加 flex 类时,这个元素就变成了一个弹性容器,它的直接子元素会自动成为弹性项目。默认情况下,这些子元素会沿着水平方向(主轴)排列,我们可以通过 flex-row 来明确指定水平排列,或者使用 flex-col 来让它们垂直排列。

Flexbox 有两个重要的轴:主轴(main axis)和交叉轴(cross axis)。主轴是子元素排列的方向,交叉轴则垂直于主轴。

让我们通过一个简单的例子来理解 Flexbox 的工作原理:

|
<div className="flex flex-row gap-4 p-4 bg-gray-100"> {/* flex 启用弹性布局,flex-row 设置水平排列,gap-4 设置子元素间距 */} <div className="p-4 bg-blue-500 text-white rounded">项目 1</div> {/* 第一个弹性项目,蓝色背景 */} <div className="p-4 bg-green-500 text-white rounded">项目 2</div> {/* 第二个弹性项目,绿色背景 */} <div className="p-4 bg-purple-500 text-white rounded">项目 3</div> {/* 第三个弹性项目,紫色背景 */} </div>

在这个例子中,我们创建了一个水平排列的弹性容器,三个子元素并排显示。如果我们想要垂直排列,只需要将 flex-row 改为 flex-col 即可。

主轴对齐方式的 Tailwind CSS 类如下表所示:

类名作用描述
justify-start元素靠主轴起始(左侧)对齐
justify-center元素在主轴方向居中对齐
justify-end元素靠主轴末端(右侧)对齐
justify-between首尾元素贴边,剩余空间均分在元素之间
justify-around所有元素两侧的间隔相等
justify-evenly元素之间的间隔完全均分
类名作用描述
items-start元素在交叉轴起始(顶部)对齐
items-center元素在交叉轴方向居中对齐
items-end元素在交叉轴末端(底部)对齐
items-stretch元素沿交叉轴拉伸填满容器高度

让我们看一个综合运用这些对齐方式的例子:

|
<div className="flex justify-center items-center h-64 bg-gray-100"> {/* 使用 justify-center 和 items-center 实现完全居中 */} <div className="p-6 bg-white rounded-lg shadow-lg"> {/* 居中的白色卡片 */} 完全居中的内容 </div> </div>

Grid 网格布局

Grid 布局是另一种强大的布局方式,它能够创建二维的网格系统,非常适合构建复杂的页面布局。与 Flexbox 的一维布局不同,Grid 可以同时控制行和列,让我们能够创建更加规整的布局结构。

在 Tailwind CSS 中,我们使用 grid 类来启用网格布局,然后使用 grid-cols-* 来定义列数。例如,grid-cols-3 会创建一个三列的网格,grid-cols-4 会创建一个四列的网格。我们还可以使用响应式前缀,比如 md:grid-cols-3 表示在中等屏幕及以上显示三列。

Grid 布局特别适合创建卡片网格、图片画廊、仪表板等需要规整排列的场景。它比 Flexbox 更适合处理二维布局需求。

让我们创建一个简单的网格布局示例:

|
<div className="grid grid-cols-3 gap-4 p-4"> {/* grid 启用网格布局,grid-cols-3 创建三列,gap-4 设置网格间距 */} <div className="p-6 bg-blue-100 rounded-lg">卡片 1</div> {/* 第一列第一行的卡片 */} <div className="p-6 bg-green-100 rounded-lg">卡片 2</div> {/* 第二列第一行的卡片 */} <div className="p-6 bg-purple-100 rounded-lg">卡片 3</div> {/* 第三列第一行的卡片 */} <div className="p-6 bg-yellow-100 rounded-lg">卡片 4</div> {/* 第一列第二行的卡片 */} <div className="p-6 bg-pink-100 rounded-lg">卡片 5</div> {/* 第二列第二行的卡片 */} <div className="p-6 bg-indigo-100 rounded-lg">卡片 6</div> {/* 第三列第二行的卡片 */} </div>

在这个例子中,我们创建了一个三列的网格,六个卡片会自动排列成两行三列。gap-4 类设置了网格之间的间距,让布局看起来更加美观。

我们还可以使用 grid-rows-* 来定义行数,使用 col-span-* 和 row-span-* 来让某个网格项跨越多列或多行。这些功能让我们能够创建更加灵活的布局:

|
<div className="grid grid-cols-4 gap-4 p-4"> {/* 创建四列网格 */} <div className="col-span-2 p-6 bg-blue-500 text-white rounded-lg"> {/* col-span-2 让这个元素跨越两列 */} 占据两列的内容 </div> <div className="p-6 bg-green-500 text-white rounded-lg">正常</div> <div className="p-6 bg-purple-500 text-white rounded-lg">正常</div> <div className="p-6 bg-yellow-500 text-white rounded-lg">正常</div> <div className="col-span-4 p-6 bg-red-500 text-white rounded-lg"> {/* col-span-4 让这个元素跨越全部四列 */} 占据整行的内容 </div> </div>

下面是一个使用grid布局的例子:

Container 容器

Container 是 Tailwind CSS 提供的一个特殊的容器类,它能够根据屏幕尺寸自动调整最大宽度,非常适合创建响应式的页面布局。当我们使用 container 类时,元素会在不同屏幕尺寸下有不同的最大宽度,这样可以让内容在各种设备上都有良好的显示效果。

默认情况下,container 类会根据屏幕尺寸设置不同的最大宽度。在小屏幕上,它会占据全宽;在中等屏幕上,它会有一个合适的最大宽度;在大屏幕上,它会有一个更大的最大宽度。这种设计让我们的内容既不会在小屏幕上显得太窄,也不会在大屏幕上显得太宽。

需要注意的是,container 类只是设置了最大宽度,并不会自动居中。如果我们想让容器居中显示,需要配合使用 mx-auto 类,它会给容器添加左右自动边距,从而实现水平居中。

让我们看一个使用容器的例子:

|
<div className="container mx-auto p-4 bg-gray-100"> {/* container 设置响应式最大宽度,mx-auto 实现水平居中,p-4 添加内边距 */} <div className="bg-white p-6 rounded-lg shadow"> {/* 白色内容区域 */} 这是一个响应式容器,会根据屏幕尺寸自动调整宽度 </div> </div>

间距系统

间距是布局中非常重要的一个方面,它直接影响着页面的可读性和美观度。Tailwind CSS 提供了一套完整的间距系统,让我们能够精确地控制元素的内边距、外边距以及子元素之间的间距。

类名作用说明
p-4全部内边距四个方向都是 1rem(16px)的内边距
px-4左右内边距左右各有 1rem 内边距
py-4上下内边距上下各有 1rem 内边距
pt-4顶部内边距顶部有 1rem 内边距
pr-4右侧内边距右侧有 1rem 内边距
pb-4底部内边距底部有 1rem 内边距
pl-4左侧内边距左侧有 1rem 内边距
类名作用说明
m-4全部外边距四个方向都是 1rem(16px)的外边距
mx-4左右外边距左右各有 1rem 外边距
my-4上下外边距上下各有 1rem 外边距
mt-4顶部外边距顶部有 1rem 外边距
mr-4右侧外边距右侧有 1rem 外边距
mb-4底部外边距底部有 1rem 外边距
ml-4左侧外边距左侧有 1rem 外边距

除了单独控制每个元素的内外边距,我们还可以使用 space-x-* 和 space-y-* 来统一控制子元素之间的间距。space-x-4 会在所有子元素之间添加水平间距,space-y-4 会在所有子元素之间添加垂直间距。这种方式特别适合处理列表或卡片组。

让我们通过一个例子来理解间距系统的使用:

|
<div className="space-y-4 p-6 bg-gray-100"> {/* space-y-4 为所有子元素添加垂直间距,p-6 为容器添加内边距 */} <div className="p-4 bg-white rounded shadow"> {/* p-4 为这个元素添加内边距 */} 第一个卡片,有内边距 </div> <div className="p-4 bg-white rounded shadow"> {/* 第二个卡片,也有内边距 */} 第二个卡片,有内边距 </div> <div className="p-4 bg-white rounded shadow"> {/* 第三个卡片,也有内边距 */} 第三个卡片,有内边距 </div> </div>

在这个例子中,我们使用 space-y-4 为三个卡片之间添加了统一的垂直间距,每个卡片内部使用 p-4 添加了内边距。这种方式让布局看起来更加整齐统一。

Tailwind CSS 的间距系统使用了一个统一的数值体系,从 0 到 96,每个数值对应不同的间距大小。我们可以通过下面的表格来了解常用的间距值:

类名实际值说明
p-0 / m-00无间距
p-1 / m-10.25rem (4px)极小间距
p-2 / m-20.5rem (8px)小间距
p-4 / m-41rem (16px)标准间距
p-6 / m-61.5rem (24px)中等间距
p-8 / m-82rem (32px)大间距
p-12 / m-123rem (48px)超大间距

通过灵活运用这些布局工具,我们能够构建出各种复杂的页面结构。在实际开发中,我们通常会组合使用这些工具,比如使用 container 创建主容器,使用 flex 或 grid 创建内部布局,使用间距系统控制元素之间的空间关系。掌握了这些基础工具,我们就能够开始构建更加复杂的组件了。


排版与文本样式:字体、字体粗细、行高、对齐方式

排版是网页设计中至关重要的一环,好的排版能够让内容更加易读,提升用户体验。Tailwind CSS 为我们提供了一套完整的排版工具类,让我们能够轻松地控制字体、字体粗细、行高以及文本对齐方式。

字体系统

字体是文本的基础,不同的字体会给页面带来不同的视觉效果。Tailwind CSS 提供了三种常用的字体系列:无衬线字体(sans-serif)、衬线字体(serif)和等宽字体(monospace)。

无衬线字体是现代网页设计中最常用的字体,它没有装饰性的衬线,看起来更加简洁现代。我们使用 font-sans 类来应用无衬线字体,这是 Tailwind CSS 的默认字体。

衬线字体在字母的末端有装饰性的衬线,看起来更加传统和正式。我们使用 font-serif 类来应用衬线字体,这种字体通常用于标题或需要强调正式感的场合。

等宽字体让每个字符占据相同的宽度,非常适合显示代码、数据表格等需要对齐的内容。我们使用 font-mono 类来应用等宽字体。

字体的选择会影响页面的整体风格。无衬线字体适合现代、简洁的设计,衬线字体适合传统、正式的设计,等宽字体适合技术文档和代码展示。

让我们通过一个例子来比较这三种字体的效果:

|
<div className="space-y-4 p-6"> {/* space-y-4 为子元素添加垂直间距,p-6 添加内边距 */} <div className="font-sans text-lg"> {/* font-sans 应用无衬线字体,text-lg 设置较大字号 */} 这是无衬线字体(Sans Serif),看起来简洁现代 </div> <div className="font-serif text-lg"> {/* font-serif 应用衬线字体 */} 这是衬线字体(Serif),看起来传统正式 </div> <div className="font-mono text-lg"> {/* font-mono 应用等宽字体 */} 这是等宽字体(Monospace),适合代码展示 </div> </div>

字体粗细

字体粗细是控制文本视觉重量的重要方式,不同的粗细能够创建视觉层次,让重要内容更加突出。Tailwind CSS 提供了从极细到极粗的九种字体粗细级别。

Tailwind 类名对应英文名字体粗细值适用场景说明
font-thinThin100极细字体,极少用,装饰性较强
font-extralightExtra Light200超细字体,装饰性文本
font-lightLight300细字体,副标题、低调强调
font-normalNormal400正常字体,正文内容(默认值)
font-mediumMedium500中等字重,稍作强调内容
font-semiboldSemi Bold600半粗体,小标题、一级强调
font-boldBold700粗体,最常用强调,主标题
font-extraboldExtra Bold800超粗体,特殊强调
font-blackBlack900最粗字体,极强强调、装饰标题

实际应用中常用的粗细级别有:font-normal(正文内容)、font-medium(轻微强调)、font-semibold(标题/强烈强调)、font-bold(主标题/最常用的粗体)。

让我们看一个展示不同字体粗细的例子:

|
<div className="space-y-3 p-6"> {/* space-y-3 为子元素添加垂直间距,p-6 添加内边距 */} <div className="font-thin text-lg">极细字体(Thin 100)</div> {/* font-thin 应用最细的字体 */} <div className="font-light text-lg">细字体(Light 300)</div> {/* font-light 应用细字体 */} <div className="font-normal text-lg">正常字体(Normal 400)</div> {/* font-normal 应用正常字体,这是默认值 */} <div className="font-medium text-lg">中等字体(Medium 500)</div> {/* font-medium 应用中等字体 */} <div className="font-semibold text-lg">半粗字体(Semibold 600)</div> {/* font-semibold 应用半粗字体 */} <div className="font-bold text-lg">粗体(Bold 700)</div> {/* font-bold 应用粗体,最常用的粗体级别 */} <div className="font-extrabold text-lg">超粗字体(Extrabold 800)</div> {/* font-extrabold 应用超粗字体 */} <div className="font-black text-lg">最粗字体(Black 900)</div> {/* font-black 应用最粗的字体 */} </div>

行高控制

行高是文本行与行之间的距离,合适的行高能够让文本更加易读。如果行高太小,文本会显得拥挤,难以阅读;如果行高太大,文本会显得稀疏,浪费空间。

下面是 Tailwind CSS 行高选项的对照表:

类名行高值说明
leading-none1最小行高,通常用于标题
leading-tight1.25紧凑的文本
leading-snug1.375略宽松一些
leading-normal1.5默认,适合大多数正文内容
leading-relaxed1.625更宽松,适合需要呼吸空间文本
leading-loose2最大行高,需要大量空白时使用

在实际使用中,我们通常使用 leading-normal 用于正文,leading-tight 用于标题,leading-relaxed 用于需要更好可读性的长文本。

让我们通过一个例子来比较不同行高的效果:

|
<div className="space-y-6 p-6"> {/* space-y-6 为子元素添加垂直间距,p-6 添加内边距 */} <div> {/* 紧凑行高示例 */} <div className="font-semibold mb-2">紧凑行高(leading-tight)</div> {/* font-semibold 设置半粗字体,mb-2 添加底部外边距 */} <p className="leading-tight text-gray-700"> {/* leading-tight 设置紧凑行高,text-gray-700 设置文本颜色 */} 这是一段使用紧凑行高的文本。行高较小,文本看起来比较紧凑,适合标题或需要节省空间的场合。每一行之间的距离较小,文本密度较高。 </p> </div> <div> {/* 正常行高示例 */} <div className="font-semibold mb-2">正常行高(leading-normal)</div> {/* 这是默认的行高,适合大多数正文内容 */} <p className="leading-normal text-gray-700"> 这是一段使用正常行高的文本。行高适中,文本看起来舒适易读,适合大多数正文内容。每一行之间的距离适中,既不会显得拥挤,也不会浪费空间。 </p> </div> <div> {/* 宽松行高示例 */} <div className="font-semibold mb-2">宽松行高(leading-relaxed)</div> {/* 适合需要更好可读性的长文本 */} <p className="leading-relaxed text-gray-700"> 这是一段使用宽松行高的文本。行高较大,文本看起来更加舒适,适合需要更好可读性的长文本。每一行之间的距离较大,文本密度较低,阅读体验更好。 </p> </div> </div>

文本对齐方式

文本对齐是控制文本在容器中位置的重要方式。Tailwind CSS 提供了四种基本的文本对齐方式:左对齐、居中对齐、右对齐和两端对齐。

类名作用适用场景
text-left文本左对齐默认对齐方式,适合大多数正文内容
text-center文本居中对齐用于标题、按钮文字等需要强调的内容
text-right文本右对齐适合数字、日期等需要右侧对齐的内容
text-justify文本两端对齐适合需要整齐边界的段落

在实际使用中,我们通常使用 text-left 用于正文,text-center 用于标题和按钮,text-right 用于数字和日期。

让我们看一个展示不同对齐方式的例子:

|
<div className="space-y-4 p-6"> {/* space-y-4 为子元素添加垂直间距,p-6 添加内边距 */} <div className="border-b pb-2"> {/* border-b 添加底部边框,pb-2 添加底部内边距 */} <div className="font-semibold mb-2">左对齐(text-left)</div> {/* font-semibold 设置半粗字体,mb-2 添加底部外边距 */} <p className="text-left text-gray-700">这是一段左对齐的文本。左对齐是默认的对齐方式,适合大多数正文内容。文本从左边开始排列,右边自然换行,这是最自然的阅读方式。</p> </div> <div className="border-b pb-2"> {/* 居中对齐示例 */} <div className="font-semibold mb-2">居中对齐(text-center)</div> <p className="text-center text-gray-700">这是一段居中对齐的文本。居中对齐适合标题、按钮文字等需要强调的内容。文本在容器中居中显示,左右两边留出相等的空白。</p> </div> <div className="border-b pb-2"> {/* 右对齐示例 */} <div className="font-semibold mb-2">右对齐(text-right)</div> <p className="text-right text-gray-700">这是一段右对齐的文本。右对齐适合数字、日期等需要对齐的内容。文本从右边开始排列,左边自然换行,常用于表格或列表。</p> </div> <div> {/* 两端对齐示例 */} <div className="font-semibold mb-2">两端对齐(text-justify)</div> <p className="text-justify text-gray-700">这是一段两端对齐的文本。两端对齐让文本的左右两边都对齐,适合需要整齐边界的段落。文本会自动调整单词间距,让每一行都填满容器的宽度。</p> </div> </div>

综合排版

在实际开发中,我们通常会组合使用这些排版工具类,创建出既美观又易读的文本样式。让我们看一个综合运用字体、字体粗细、行高和对齐方式的例子:

|
<div className="max-w-2xl mx-auto p-8 bg-white rounded-lg shadow-lg"> {/* max-w-2xl 设置最大宽度,mx-auto 实现水平居中,p-8 添加内边距,bg-white 设置白色背景,rounded-lg 设置圆角,shadow-lg 添加阴影 */} <h1 className="font-serif font-bold text-3xl text-center mb-4 text-gray-900"> {/* font-serif 应用衬线字体,font-bold 设置粗体,text-3xl 设置大字号,text-center 居中对齐,mb-4 添加底部外边距,text-gray-900 设置深灰色文本 */} 文章标题 </h1> <div className="text-sm text-gray-500 text-center mb-6"> {/* text-sm 设置小字号,text-gray-500 设置灰色文本,text-center 居中对齐,mb-6 添加底部外边距 */} 作者:张三 | 发布时间:2024年1月1日 </div> <div className="space-y-4"> {/* space-y-4 为子元素添加垂直间距 */} <p className="font-sans font-normal leading-relaxed text-left text-gray-700"> {/* font-sans 应用无衬线字体,font-normal 设置正常字体粗细,leading-relaxed 设置宽松行高,text-left 左对齐,text-gray-700 设置文本颜色 */} 这是文章的第一段正文。我们使用了无衬线字体,正常字体粗细,宽松的行高,让文本更加易读。左对齐的方式让阅读更加自然,深灰色的文本颜色既不会太刺眼,也能保证良好的对比度。 </p> <p className="font-sans font-normal leading-relaxed text-left text-gray-700"> 这是文章的第二段正文。通过合理的排版设置,我们能够创建出既美观又易读的文本内容。合适的字体、粗细、行高和对齐方式,能够让读者更加专注于内容本身,而不是被排版问题分散注意力。 </p> <blockquote className="font-serif font-medium italic leading-relaxed text-left pl-4 border-l-4 border-blue-500 text-gray-600"> {/* font-serif 应用衬线字体,font-medium 设置中等字体粗细,italic 设置斜体,leading-relaxed 设置宽松行高,text-left 左对齐,pl-4 添加左侧内边距,border-l-4 添加左侧边框,border-blue-500 设置蓝色边框,text-gray-600 设置文本颜色 */} "这是一段引用文字。我们使用了衬线字体和斜体来区分引用内容,左侧的蓝色边框进一步强调了这是引用内容。" </blockquote> </div> </div>

通过灵活运用这些排版工具类,我们能够创建出各种风格的文本样式。在实际开发中,我们需要根据内容的性质和页面的整体风格来选择合适的字体、粗细、行高和对齐方式。一个好的排版设计能够让内容更加易读,提升用户体验。


背景、边框、阴影:颜色系统、透明度、阴影效果

视觉效果是网页设计的重要组成部分,它能够增强页面的美观度和层次感。Tailwind CSS 为我们提供了一套完整的视觉工具类,让我们能够轻松地控制背景、边框和阴影效果。 这些工具类基于 Tailwind 的颜色系统,提供了丰富的颜色选项和透明度控制。

颜色系统

Tailwind CSS 内置了一套完整的颜色系统,包含了从灰色到各种彩色的丰富颜色选项。每种颜色都有从 50 到 900 的十个色阶,50 是最浅的颜色,900 是最深的颜色。这种设计让我们能够轻松地创建出和谐的配色方案。

我们使用 bg-* 系列类来设置背景颜色,使用 text-* 系列类来设置文本颜色,使用 border-* 系列类来设置边框颜色。例如,bg-blue-500 会设置蓝色背景,text-gray-700 会设置深灰色文本,border-red-300 会设置浅红色边框。

Tailwind CSS 的颜色系统使用统一的数值体系,从 50 到 900,数值越大颜色越深。这种设计让我们能够轻松地创建出和谐的配色方案,避免颜色选择上的困扰。

让我们通过一个例子来了解颜色系统的使用:

|
<div className="grid grid-cols-5 gap-4 p-6"> {/* grid 启用网格布局,grid-cols-5 创建五列,gap-4 设置间距,p-6 添加内边距 */} <div className="bg-blue-50 p-4 rounded text-center text-blue-900"> {/* bg-blue-50 设置最浅的蓝色背景,p-4 添加内边距,rounded 设置圆角,text-center 居中对齐,text-blue-900 设置深蓝色文本 */} blue-50 </div> <div className="bg-blue-200 p-4 rounded text-center text-blue-900"> {/* bg-blue-200 设置浅蓝色背景 */} blue-200 </div> <div className="bg-blue-500 p-4 rounded text-center text-white"> {/* bg-blue-500 设置标准蓝色背景,text-white 设置白色文本 */} blue-500 </div> <div className="bg-blue-700 p-4 rounded text-center text-white"> {/* bg-blue-700 设置深蓝色背景 */} blue-700 </div> <div className="bg-blue-900 p-4 rounded text-center text-white"> {/* bg-blue-900 设置最深的蓝色背景 */} blue-900 </div> </div>

在这个例子中,我们展示了蓝色从最浅到最深的五个色阶。我们可以看到,随着数值的增加,颜色变得越来越深。这种统一的数值体系让我们能够轻松地创建出和谐的配色方案。

Tailwind CSS 提供了多种颜色选项,包括灰色、红色、橙色、黄色、绿色、蓝色、靛蓝、紫色、粉色等。每种颜色都有完整的色阶,让我们能够根据需要选择合适的颜色。我们可以通过下面的表格来了解常用的颜色选项:

颜色名称类名前缀说明
灰色gray-*最常用的中性色,适合文本和背景
蓝色blue-*常用的主色调,适合按钮和链接
绿色green-*常用于成功状态和正面信息
红色red-*常用于错误状态和警告信息
黄色yellow-*常用于警告和提示信息
紫色purple-*常用于特殊强调和装饰
粉色pink-*常用于柔和的设计风格

透明度控制

透明度是创建层次感和视觉深度的有效方式。Tailwind CSS 提供了多种透明度控制方式,让我们能够创建出更加丰富的视觉效果。

我们可以使用 opacity-* 系列类来控制元素的整体透明度。opacity-0 是完全透明,opacity-50 是半透明,opacity-100 是完全不透明。我们还可以使用 bg-opacity-*、text-opacity-* 和 border-opacity-* 来分别控制背景、文本和边框的透明度。

需要注意的是,opacity-* 会影响整个元素及其子元素,而 bg-opacity-* 等只影响特定的属性。在实际使用中,我们需要根据需求选择合适的透明度控制方式。

让我们通过一个例子来了解透明度的使用:

|
<div className="space-y-4 p-6 bg-gray-100"> {/* space-y-4 为子元素添加垂直间距,p-6 添加内边距,bg-gray-100 设置浅灰色背景 */} <div className="bg-blue-500 p-4 rounded text-white"> {/* bg-blue-500 设置蓝色背景,p-4 添加内边距,rounded 设置圆角,text-white 设置白色文本 */} 完全不透明(opacity-100) </div> <div className="bg-blue-500 opacity-75 p-4 rounded text-white"> {/* opacity-75 设置 75% 透明度,影响整个元素 */} 75% 透明度(opacity-75) </div> <div className="bg-blue-500 opacity-50 p-4 rounded text-white"> {/* opacity-50 设置 50% 透明度 */} 50% 透明度(opacity-50) </div> <div className="bg-blue-500 opacity-25 p-4 rounded text-white"> {/* opacity-25 设置 25% 透明度 */} 25% 透明度(opacity-25) </div> </div>

边框样式

边框是创建视觉边界和分隔的有效方式。Tailwind CSS 提供了丰富的边框工具类,让我们能够轻松地控制边框的宽度、颜色、样式和圆角。

我们使用 border 类来添加边框,使用 border-* 系列类来设置边框宽度,使用 border-*-* 系列类来设置边框颜色,使用 rounded-* 系列类来设置圆角。例如,border-2 border-blue-500 rounded-lg 会创建一个 2px 宽度的蓝色边框,并设置较大的圆角。 让我们通过一个例子来了解边框样式的使用:

|
<div className="space-y-4 p-6"> {/* space-y-4 为子元素添加垂直间距,p-6 添加内边距 */} <div className="border border-gray-300 p-4 rounded"> {/* border 添加边框,border-gray-300 设置浅灰色边框,p-4 添加内边距,rounded 设置圆角 */} 默认边框(border) </div> <div className="border-2 border-blue-500 p-4 rounded-lg"> {/* border-2 设置 2px 边框宽度,border-blue-500 设置蓝色边框,rounded-lg 设置较大圆角 */} 2px 蓝色边框(border-2 border-blue-500) </div> <div className="border-4 border-green-500 p-4 rounded-xl"> {/* border-4 设置 4px 边框宽度,border-green-500 设置绿色边框,rounded-xl 设置超大圆角 */} 4px 绿色边框(border-4 border-green-500) </div> <div className="border-l-4 border-purple-500 p-4 bg-purple-50 rounded"> {/* border-l-4 设置左侧 4px 边框,border-purple-500 设置紫色边框,bg-purple-50 设置浅紫色背景 */} 左侧边框(border-l-4 border-purple-500) </div> </div>

阴影效果

阴影是创建深度和层次感的重要方式。Tailwind CSS 提供了多种阴影选项,从微妙的阴影到强烈的阴影,让我们能够根据需求选择合适的阴影效果。

类名说明适用场景
shadow-sm最小阴影,微妙层次感小组件、弱层次
shadow默认阴影,基础深度常规容器、基础卡片
shadow-md中等阴影,略强层次感卡片、按钮
shadow-lg较大阴影,明显分层对话框、弹出层
shadow-xl超大阴影,强烈层次感需要突出元素
shadow-2xl最大阴影,极强效果特殊视觉强调

让我们通过一个例子来了解阴影效果的使用:

|
<div className="grid grid-cols-3 gap-6 p-6 bg-gray-100"> {/* grid 启用网格布局,grid-cols-3 创建三列,gap-6 设置间距,p-6 添加内边距,bg-gray-100 设置浅灰色背景 */} <div className="bg-white p-6 rounded-lg shadow-sm"> {/* bg-white 设置白色背景,p-6 添加内边距,rounded-lg 设置圆角,shadow-sm 添加最小阴影 */} 小阴影(shadow-sm) </div> <div className="bg-white p-6 rounded-lg shadow"> {/* shadow 添加默认阴影 */} 默认阴影(shadow) </div> <div className="bg-white p-6 rounded-lg shadow-md"> {/* shadow-md 添加中等阴影 */} 中等阴影(shadow-md) </div> <div className="bg-white p-6 rounded-lg shadow-lg"> {/* shadow-lg 添加大阴影 */} 大阴影(shadow-lg) </div> <div className="bg-white p-6 rounded-lg shadow-xl"> {/* shadow-xl 添加超大阴影 */} 超大阴影(shadow-xl) </div> <div className="bg-white p-6 rounded-lg shadow-2xl"> {/* shadow-2xl 添加最大阴影 */} 最大阴影(shadow-2xl) </div> </div>

在这个例子中,我们展示了从最小到最大的六种阴影效果。我们可以看到,随着阴影级别的增加,阴影变得越来越明显,元素的层次感也越来越强。在实际使用中,我们通常使用 shadow-md 或 shadow-lg 用于卡片,使用 shadow-xl 用于模态窗口。

综合视觉效果展示

在实际开发中,我们通常会组合使用这些视觉工具类,创建出既美观又有层次感的视觉效果。让我们看一个综合运用背景、边框和阴影的例子:

|
<div className="grid grid-cols-2 gap-6 p-6 bg-gray-50"> {/* grid 启用网格布局,grid-cols-2 创建两列,gap-6 设置间距,p-6 添加内边距,bg-gray-50 设置浅灰色背景 */} <div className="bg-white p-6 rounded-lg shadow-md border border-gray-200"> {/* bg-white 设置白色背景,p-6 添加内边距,rounded-lg 设置圆角,shadow-md 添加中等阴影,border 添加边框,border-gray-200 设置浅灰色边框 */} <h3 className="text-xl font-bold text-gray-900 mb-2"> {/* text-xl 设置大字号,font-bold 设置粗体,text-gray-900 设置深灰色文本,mb-2 添加底部外边距 */} 卡片标题 </h3> <p className="text-gray-600 leading-relaxed"> {/* text-gray-600 设置灰色文本,leading-relaxed 设置宽松行高 */} 这是一个使用白色背景、边框和阴影的卡片。通过组合使用这些视觉工具类,我们能够创建出既美观又有层次感的视觉效果。 </p> </div> <div className="bg-gradient-to-br from-blue-500 to-purple-600 p-6 rounded-lg shadow-lg text-white"> {/* bg-gradient-to-br 设置从左上到右下的渐变背景,from-blue-500 设置起始蓝色,to-purple-600 设置结束紫色,shadow-lg 添加大阴影,text-white 设置白色文本 */} <h3 className="text-xl font-bold mb-2"> {/* text-xl 设置大字号,font-bold 设置粗体,mb-2 添加底部外边距 */} 渐变卡片 </h3> <p className="opacity-90 leading-relaxed"> {/* opacity-90 设置 90% 透明度,leading-relaxed 设置宽松行高 */} 这是一个使用渐变背景的卡片。渐变背景能够创建出更加丰富的视觉效果,让页面看起来更加生动有趣。 </p> </div> </div>

通过灵活运用这些视觉工具类,我们能够创建出各种风格的视觉效果。在实际开发中,我们需要根据页面的整体风格和设计需求来选择合适的颜色、透明度、边框和阴影。一个好的视觉设计能够让页面更加美观,提升用户体验。


状态与交互:按钮、输入框、悬浮/点击样式

交互是网页设计的重要组成部分,好的交互设计能够让用户更加愉悦地使用网站。Tailwind CSS 为我们提供了丰富的交互工具类,让我们能够轻松地控制元素在不同状态下的样式,包括悬浮、点击、焦点和禁用状态。

伪类前缀

Tailwind CSS 使用伪类前缀来控制元素在不同状态下的样式。这些前缀包括 hover:、active:、focus:、disabled: 等,让我们能够为不同的交互状态设置不同的样式。

伪类前缀说明示例
hover:鼠标悬浮时的样式,最常用的交互状态hover:bg-blue-600(改变背景色)、hover:text-white(改变文本色)
active:元素被点击时的样式active:bg-blue-800(点击时背景更深)
focus:元素获得焦点时的样式,常用于表单元素focus:ring-2 focus:ring-blue-500(添加焦点环)
disabled:元素被禁用时的样式disabled:opacity-50 disabled:cursor-not-allowed(变半透明,禁用鼠标样式)

伪类前缀让我们能够为不同的交互状态设置不同的样式,这是创建良好用户体验的关键。在实际使用中,我们需要确保不同状态之间的样式变化是明显且一致的。

让我们通过一个例子来了解伪类前缀的使用:

|
<div className="space-x-4 p-6"> {/* space-y-4 为子元素添加垂直间距,p-6 添加内边距 */} <button className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 active:bg-blue-800 transition-colors"> {/* bg-blue-500 设置蓝色背景,text-white 设置白色文本,px-4 py-2 设置内边距,rounded 设置圆角,hover:bg-blue-600 设置悬浮时更深的蓝色,active:bg-blue-800 设置点击时最深的蓝色,transition-colors 添加颜色过渡动画 */} 悬浮和点击按钮 </button> <button className="bg-gray-500 text-white px-4 py-2 rounded opacity-50 cursor-not-allowed" disabled> {/* bg-gray-500 设置灰色背景,opacity-50 设置半透明,cursor-not-allowed 设置禁用鼠标样式,disabled 属性禁用按钮 */} 禁用按钮 </button> </div>

按钮组件

按钮是网页中最常用的交互元素之一,一个好的按钮设计能够让用户更加愉悦地使用网站。Tailwind CSS 让我们能够轻松地创建出各种风格的按钮,包括不同的大小、颜色和状态。 让我们创建一个完整的按钮组件示例,展示不同大小、颜色和状态的按钮:

|
<div className="space-y-6 p-6"> {/* space-y-6 为子元素添加垂直间距,p-6 添加内边距 */} <div> {/* 不同大小的按钮 */} <div className="font-semibold mb-3">不同大小的按钮</div> {/* font-semibold 设置半粗字体,mb-3 添加底部外边距 */} <div className="flex items-center gap-3"> {/* flex 启用弹性布局,items-center 垂直居中,gap-3 设置间距 */} <button className="bg-blue-500 text-white px-2 py-1 text-sm rounded hover:bg-blue-600 transition-colors"> {/* bg-blue-500 设置蓝色背景,text-white 设置白色文本,px-2 py-1 设置小内边距,text-sm 设置小字号,rounded 设置圆角,hover:bg-blue-600 设置悬浮时更深的蓝色,transition-colors 添加颜色过渡动画 */} 小按钮 </button> <button className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 transition-colors"> {/* px-4 py-2 设置标准内边距 */} 标准按钮 </button> <button className="bg-blue-500 text-white px-6 py-3 text-lg rounded hover:bg-blue-600 transition-colors"> {/* px-6 py-3 设置大内边距,text-lg 设置大字号 */} 大按钮 </button> </div> </div> <div> {/* 不同颜色的按钮 */} <div className="font-semibold mb-3">不同颜色的按钮</div> <div className="flex items-center gap-3 flex-wrap"> {/* flex-wrap 允许换行 */} <button className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 transition-colors"> {/* 蓝色按钮 */} 蓝色按钮 </button> <button className="bg-green-500 text-white px-4 py-2 rounded hover:bg-green-600 transition-colors"> {/* bg-green-500 设置绿色背景,hover:bg-green-600 设置悬浮时更深的绿色 */} 绿色按钮 </button> <button className="bg-red-500 text-white px-4 py-2 rounded hover:bg-red-600 transition-colors"> {/* bg-red-500 设置红色背景,hover:bg-red-600 设置悬浮时更深的红色 */} 红色按钮 </button> <button className="bg-gray-500 text-white px-4 py-2 rounded hover:bg-gray-600 transition-colors"> {/* bg-gray-500 设置灰色背景,hover:bg-gray-600 设置悬浮时更深的灰色 */} 灰色按钮 </button> </div> </div> <div> {/* 不同样式的按钮 */} <div className="font-semibold mb-3">不同样式的按钮</div> <div className="flex items-center gap-3 flex-wrap"> <button className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 transition-colors"> {/* 实心按钮 */} 实心按钮 </button> <button className="border-2 border-blue-500 text-blue-500 px-4 py-2 rounded hover:bg-blue-50 transition-colors"> {/* border-2 设置 2px 边框,border-blue-500 设置蓝色边框,text-blue-500 设置蓝色文本,hover:bg-blue-50 设置悬浮时浅蓝色背景 */} 边框按钮 </button> <button className="bg-blue-500 text-white px-4 py-2 rounded-lg shadow-md hover:shadow-lg hover:bg-blue-600 transition-all"> {/* rounded-lg 设置较大圆角,shadow-md 添加中等阴影,hover:shadow-lg 设置悬浮时更大阴影,hover:bg-blue-600 设置悬浮时更深的蓝色,transition-all 添加所有属性过渡动画 */} 阴影按钮 </button> </div> </div> </div>

输入框组件

输入框是表单中最重要的元素之一,一个好的输入框设计能够让用户更加轻松地填写表单。Tailwind CSS 让我们能够轻松地创建出各种风格的输入框,包括不同的大小、边框样式和焦点状态。

让我们创建一个完整的输入框组件示例,展示不同样式和状态的输入框:

|
<div className="space-y-6 p-6 max-w-md"> {/* space-y-6 为子元素添加垂直间距,p-6 添加内边距,max-w-md 设置最大宽度 */} <div> {/* 基础输入框 */} <label className="block text-sm font-medium text-gray-700 mb-2"> {/* block 设置为块级元素,text-sm 设置小字号,font-medium 设置中等字体粗细,text-gray-700 设置深灰色文本,mb-2 添加底部外边距 */} 基础输入框 </label> <input type="text" placeholder="请输入内容" className="w-full px-4 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all" {/* w-full 设置全宽,px-4 py-2 设置内边距,border 添加边框,border-gray-300 设置浅灰色边框,rounded 设置圆角,focus:outline-none 移除默认焦点轮廓,focus:ring-2 添加焦点环,focus:ring-blue-500 设置蓝色焦点环,focus:border-transparent 设置焦点时透明边框,transition-all 添加所有属性过渡动画 */} /> </div> <div> {/* 带阴影的输入框 */} <label className="block text-sm font-medium text-gray-700 mb-2"> 带阴影的输入框 </label> <input type="text" placeholder="请输入内容" className="w-full px-4 py-2 border border-gray-300 rounded-lg shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent focus:shadow-md transition-all" {/* rounded-lg 设置较大圆角,shadow-sm 添加小阴影,focus:shadow-md 设置焦点时中等阴影 */} /> </div> <div> {/* 错误状态的输入框 */} <label className="block text-sm font-medium text-red-700 mb-2"> {/* text-red-700 设置深红色文本 */} 错误状态的输入框 </label> <input type="text" placeholder="请输入内容" className="w-full px-4 py-2 border-2 border-red-300 rounded focus:outline-none focus:ring-2 focus:ring-red-500 focus:border-transparent transition-all" {/* border-2 设置 2px 边框,border-red-300 设置浅红色边框,focus:ring-red-500 设置红色焦点环 */} /> <p className="mt-1 text-sm text-red-600"> {/* mt-1 添加顶部外边距,text-sm 设置小字号,text-red-600 设置红色文本 */} 请输入有效的内容 </p> </div> <div> {/* 禁用状态的输入框 */} <label className="block text-sm font-medium text-gray-700 mb-2"> 禁用状态的输入框 </label> <input type="text" placeholder="请输入内容" disabled className="w-full px-4 py-2 border border-gray-300 rounded bg-gray-100 text-gray-500 cursor-not-allowed" {/* bg-gray-100 设置浅灰色背景,text-gray-500 设置灰色文本,cursor-not-allowed 设置禁用鼠标样式,disabled 属性禁用输入框 */} /> </div> </div>

过渡动画

过渡动画是创建流畅交互体验的重要方式。Tailwind CSS 提供了丰富的过渡工具类,让我们能够轻松地为元素添加平滑的过渡效果。

我们使用 transition-* 系列类来添加过渡动画。transition 是默认的过渡,适合大多数情况。transition-colors 只过渡颜色属性,适合颜色变化。transition-all 过渡所有属性,适合复杂的动画。我们还可以使用 duration-* 系列类来控制过渡的持续时间,使用 ease-* 系列类来控制过渡的缓动函数。

过渡动画能够提升用户体验,但过度使用可能会让页面显得过于花哨。在实际使用中,我们需要根据页面的整体风格和设计需求来选择合适的过渡效果。

让我们通过一个例子来了解过渡动画的使用:

|
<div className="space-x-4 p-6"> {/* space-y-4 为子元素添加垂直间距,p-6 添加内边距 */} <button className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 transition-colors duration-200"> {/* transition-colors 只过渡颜色属性,duration-200 设置 200ms 的过渡时间 */} 颜色过渡(200ms) </button> <button className="bg-green-500 text-white px-4 py-2 rounded hover:bg-green-600 hover:scale-105 transition-all duration-300"> {/* hover:scale-105 设置悬浮时放大 5%,transition-all 过渡所有属性,duration-300 设置 300ms 的过渡时间 */} 颜色和缩放过渡(300ms) </button> <button className="bg-purple-500 text-white px-4 py-2 rounded hover:bg-purple-600 hover:shadow-lg transition-all duration-500 ease-in-out"> {/* hover:shadow-lg 设置悬浮时大阴影,duration-500 设置 500ms 的过渡时间,ease-in-out 设置缓入缓出效果 */} 完整过渡(500ms,缓入缓出) </button> </div>

通过灵活运用这些交互工具类,我们能够创建出各种风格的交互元素。在实际开发中,我们需要确保不同状态之间的样式变化是明显且一致的,这样用户才能够清楚地知道他们的操作产生了什么效果。


构建常见组件示例:导航条、卡片、表单、模态窗口

在前面的学习里,我们已经覆盖了 Tailwind CSS 的各种工具类,包括布局、排版、视觉效果和交互状态。现在,让我们将这些知识综合运用,构建出完整的网页组件。这些组件是网页开发中最常用的元素,掌握了它们的构建方法,我们就能够快速搭建出各种网页应用。

导航条

导航条是网页中最重要的元素之一,它帮助用户快速找到他们需要的内容。让我们创建一个响应式的导航条,它包含 Logo、导航链接和移动端菜单按钮:

|
<nav className="bg-white shadow-md"> {/* bg-white 设置白色背景,shadow-md 添加中等阴影 */} <div className="container mx-auto px-4"> {/* container 设置响应式最大宽度,mx-auto 实现水平居中,px-4 添加左右内边距 */} <div className="flex items-center justify-between h-16"> {/* flex 启用弹性布局,items-center 垂直居中,justify-between 两端对齐,h-16 设置高度 */} <div className="flex items-center"> {/* Logo 区域 */} <div className="text-xl font-bold text-blue-600"> {/* text-xl 设置大字号,font-bold 设置粗体,text-blue-600 设置蓝色文本 */} 我的网站 </div> </div> <div className="hidden md:flex items-center space-x-6"> {/* hidden 在小屏幕隐藏,md:flex 在中等屏幕及以上显示,items-center 垂直居中,space-x-6 设置水平间距 */} <a href="#" className="text-gray-700 hover:text-blue-600 transition-colors"> {/* text-gray-700 设置深灰色文本,hover:text-blue-600 设置悬浮时蓝色文本,transition-colors 添加颜色过渡动画 */} 首页 </a> <a href="#" className="text-gray-700 hover:text-blue-600 transition-colors"> 关于 </a> <a href="#" className="text-gray-700 hover:text-blue-600 transition-colors"> 服务 </a> <a href="#" className="text-gray-700 hover:text-blue-600 transition-colors"> 联系 </a> </div> <div className="md:hidden"> {/* md:hidden 在中等屏幕及以上隐藏 */} <button className="text-gray-700 hover:text-blue-600 transition-colors"> {/* 移动端菜单按钮 */} <svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"> {/* w-6 h-6 设置宽度和高度,fill="none" 不填充,stroke="currentColor" 使用当前文本颜色,viewBox 设置视图框 */} <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 6h16M4 12h16M4 18h16" /> {/* strokeLinecap="round" 设置圆角端点,strokeLinejoin="round" 设置圆角连接,strokeWidth={2} 设置线宽,d 定义路径 */} </svg> </button> </div> </div> </div> </nav>

在这个导航条中,我们使用了 Flexbox 布局来排列元素,使用了响应式类来在不同屏幕尺寸下显示不同的内容。在小屏幕上,导航链接被隐藏,只显示菜单按钮;在中等屏幕及以上,导航链接显示,菜单按钮隐藏。

卡片组件

卡片是网页中常用的内容容器,它能够将相关内容组织在一起,并创建出清晰的视觉层次。让我们创建一个完整的卡片组件:

|
<div className="max-w-sm mx-auto bg-white rounded-lg shadow-lg overflow-hidden"> {/* max-w-sm 设置最大宽度,mx-auto 实现水平居中,bg-white 设置白色背景,rounded-lg 设置圆角,shadow-lg 添加大阴影,overflow-hidden 隐藏溢出内容 */} <img src="https://via.placeholder.com/400x200" alt="卡片图片" className="w-full h-48 object-cove bg-red-50" {/* w-full 设置全宽,h-48 设置高度,object-cover 保持宽高比并覆盖 */} /> <div className="p-6"> {/* p-6 添加内边距 */} <h3 className="text-xl font-bold text-gray-900 mb-2"> {/* text-xl 设置大字号,font-bold 设置粗体,text-gray-900 设置深灰色文本,mb-2 添加底部外边距 */} 卡片标题 </h3> <p className="text-gray-600 leading-relaxed mb-4"> {/* text-gray-600 设置灰色文本,leading-relaxed 设置宽松行高,mb-4 添加底部外边距 */} 这是卡片的内容描述。通过组合使用 Tailwind CSS 的工具类,我们能够创建出既美观又实用的卡片组件。 </p> <button className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 transition-colors"> {/* bg-blue-500 设置蓝色背景,text-white 设置白色文本,px-4 py-2 设置内边距,rounded 设置圆角,hover:bg-blue-600 设置悬浮时更深的蓝色,transition-colors 添加颜色过渡动画 */} 了解更多 </button> </div> </div>

在这个卡片组件中,我们使用了白色背景、圆角、阴影和合理的间距来创建出清晰的视觉层次。图片占据了卡片的顶部,内容区域包含了标题、描述和操作按钮。

表单组件

表单是网页中最重要的交互元素之一,它让用户能够输入和提交数据。让我们创建一个完整的表单组件:

|
<form className="max-w-md mx-auto bg-white p-8 rounded-lg shadow-md"> {/* max-w-md 设置最大宽度,mx-auto 实现水平居中,bg-white 设置白色背景,p-8 添加内边距,rounded-lg 设置圆角,shadow-md 添加中等阴影 */} <h2 className="text-2xl font-bold text-gray-900 mb-6 text-center"> {/* text-2xl 设置超大字号,font-bold 设置粗体,text-gray-900 设置深灰色文本,mb-6 添加底部外边距,text-center 居中对齐 */} 联系表单 </h2> <div className="space-y-4"> {/* space-y-4 为子元素添加垂直间距 */} <div> {/* 姓名输入框 */} <label className="block text-sm font-medium text-gray-700 mb-2"> {/* block 设置为块级元素,text-sm 设置小字号,font-medium 设置中等字体粗细,text-gray-700 设置深灰色文本,mb-2 添加底部外边距 */} 姓名 </label> <input type="text" className="w-full px-4 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all" {/* w-full 设置全宽,px-4 py-2 设置内边距,border 添加边框,border-gray-300 设置浅灰色边框,rounded 设置圆角,focus:outline-none 移除默认焦点轮廓,focus:ring-2 添加焦点环,focus:ring-blue-500 设置蓝色焦点环,focus:border-transparent 设置焦点时透明边框,transition-all 添加所有属性过渡动画 */} placeholder="请输入您的姓名" /> </div> <div> {/* 邮箱输入框 */} <label className="block text-sm font-medium text-gray-700 mb-2"> 邮箱 </label> <input type="email" className="w-full px-4 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all" placeholder="请输入您的邮箱" /> </div> <div> {/* 消息输入框 */} <label className="block text-sm font-medium text-gray-700 mb-2"> 消息 </label> <textarea rows={4} className="w-full px-4 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all resize-none" {/* rows={4} 设置行数,resize-none 禁止调整大小 */} placeholder="请输入您的消息" /> </div> <button type="submit" className="w-full bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 transition-colors font-medium" {/* w-full 设置全宽,font-medium 设置中等字体粗细 */} > 提交 </button> </div> </form>

在这个表单组件中,我们使用了清晰的标签、统一的输入框样式和明显的提交按钮。所有的输入框都有焦点状态,当用户点击输入框时,会显示蓝色的焦点环,让用户清楚地知道当前聚焦的元素。


实战练习

练习1:创建水平居中的弹性容器

创建一个包含三个子元素的弹性容器,要求:

  • 子元素水平排列并居中对齐
  • 子元素之间有合适的间距
  • 每个子元素都有背景色和内边距
|
<div className="flex justify-center items-center gap-4 p-6"> <div className="bg-blue-500 text-white px-4 py-2 rounded">项目1</div> <div className="bg-green-500 text-white px-4 py-2 rounded">项目2</div> <div className="bg-purple-500 text-white px-4 py-2 rounded">项目3</div> </div>

练习2:创建响应式网格布局

创建一个三列的网格布局,要求:

  • 在小屏幕上显示单列
  • 在中等屏幕及以上显示三列
  • 每个网格项都有相同的内边距和圆角
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 p-6"> <div className="bg-blue-100 p-4 rounded-lg">网格项1</div> <div className="bg-green-100 p-4 rounded-lg">网格项2</div> <div className="bg-purple-100 p-4 rounded-lg">网格项3</div> </div>

练习3:应用字体样式

创建一个标题和段落文本,要求:

  • 标题使用粗体、无衬线字体、大字号
  • 段落使用正常字体、宽松行高、左对齐
  • 整体文本颜色为深灰色
|
<div className="space-y-4 p-6"> <h1 className="font-sans font-bold text-3xl text-gray-900">这是标题</h1> <p className="font-normal leading-relaxed text-left text-gray-700"> 这是一段示例文本,展示了如何应用不同的字体样式和排版设置。 </p> </div>

练习4:创建带阴影的卡片

创建一个卡片组件,要求:

  • 白色背景、圆角、中等阴影
  • 包含标题和描述文本
  • 右下角有一个蓝色按钮
|
<div className="max-w-sm bg-white rounded-lg shadow-md p-6"> <h3 className="text-xl font-bold text-gray-900 mb-2">卡片标题</h3> <p className="text-gray-600 leading-relaxed mb-4"> 这是卡片的内容描述,展示了如何创建美观的卡片组件。 </p> <div className="flex justify-end"> <button className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600 transition-colors"> 了解更多 </button> </div> </div>

练习5:创建表单输入框

创建一个带标签的输入框,要求:

  • 标签使用小字号、中等字体粗细
  • 输入框有边框、圆角、焦点环
  • 包含占位符文本
|
<div> <label className="block text-sm font-medium text-gray-700 mb-2"> 用户名 </label> <input type="text" placeholder="请输入用户名" className="w-full px-4 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all" /> </div>

练习6:创建渐变背景按钮

创建一个按钮,要求:

  • 从蓝色到紫色的渐变背景
  • 悬浮时有缩放效果
  • 有阴影和过渡动画
|
<button className="bg-linear-to-r from-blue-500 to-purple-600 text-white px-6 py-3 rounded-lg shadow-md hover:shadow-lg hover:scale-105 transition-all duration-300"> 渐变按钮 </button>
  • Flexbox、Grid、Container、间距系统
    • Flexbox 弹性布局
    • Grid 网格布局
    • Container 容器
    • 间距系统
  • 排版与文本样式:字体、字体粗细、行高、对齐方式
    • 字体系统
    • 字体粗细
    • 行高控制
    • 文本对齐方式
    • 综合排版
  • 背景、边框、阴影:颜色系统、透明度、阴影效果
    • 颜色系统
    • 透明度控制
    • 边框样式
    • 阴影效果
    • 综合视觉效果展示
  • 状态与交互:按钮、输入框、悬浮/点击样式
    • 伪类前缀
    • 按钮组件
    • 输入框组件
    • 过渡动画
  • 构建常见组件示例:导航条、卡片、表单、模态窗口
    • 导航条
    • 卡片组件
    • 表单组件
  • 实战练习
    • 练习1:创建水平居中的弹性容器
    • 练习2:创建响应式网格布局
    • 练习3:应用字体样式
    • 练习4:创建带阴影的卡片
    • 练习5:创建表单输入框
    • 练习6:创建渐变背景按钮

目录

  • Flexbox、Grid、Container、间距系统
    • Flexbox 弹性布局
    • Grid 网格布局
    • Container 容器
    • 间距系统
  • 排版与文本样式:字体、字体粗细、行高、对齐方式
    • 字体系统
    • 字体粗细
    • 行高控制
    • 文本对齐方式
    • 综合排版
  • 背景、边框、阴影:颜色系统、透明度、阴影效果
    • 颜色系统
    • 透明度控制
    • 边框样式
    • 阴影效果
    • 综合视觉效果展示
  • 状态与交互:按钮、输入框、悬浮/点击样式
    • 伪类前缀
    • 按钮组件
    • 输入框组件
    • 过渡动画
  • 构建常见组件示例:导航条、卡片、表单、模态窗口
    • 导航条
    • 卡片组件
    • 表单组件
  • 实战练习
    • 练习1:创建水平居中的弹性容器
    • 练习2:创建响应式网格布局
    • 练习3:应用字体样式
    • 练习4:创建带阴影的卡片
    • 练习5:创建表单输入框
    • 练习6:创建渐变背景按钮
自在学

© 2025 自在学,保留所有权利。

公网安备湘公网安备43020302000292号 | 湘ICP备2025148919号-1

关于我们隐私政策使用条款

© 2025 自在学,保留所有权利。

公网安备湘公网安备43020302000292号湘ICP备2025148919号-1