Rainy
八小时快速建立网站:无门槛独立建站指南
2024-07-10
检测到窗口宽度不足1024px,请使用宽屏设备浏览以获得最佳效果。
除本站自媒体官号以外,本文的禁止任一账号或平台,以任何形式转载到 RainyDesign.cn 站外。
任何个人或组织进行非法转载的,本站工作人员可对其追究法律责任。
具体信息详见条例与条款。
一、前言
1.1 关于本文
大家好,我是 Rainy Design Studio 的 Rainy,今天我们来讲一下如何独立建站,跟着本文的步骤来,哪怕屏幕前的你是从未接触过建站知识的小白,在有一定计算机基础的条件下也可以轻松地在八小时内完成建站。
本教程是面向有一定计算机基础,且对网站开发感兴趣的朋友们,所以会做大量举例以辅助理解。如果你是 IT 从业人员,且已具备了一定的前端或 PM 知识,或是阅读了这篇教程并实现了网站部署,想要进一步学习技术栈的,请移步至博文专辑:《Next.js + Strapi + Tailwind CSS 全套实战教学》(已于2024年10月上线并不断更新内容中)以查看完整教程。
1.2 教程简介
本文约为 10,000 字数,教程部分共分为四个主要章节,学习时长为 6~8 小时,有配套的教学视频在哔哩哔哩发布,点此访问视频链接。 以下为教程大纲:
-
准备工作
- VSCode 与 Node.js 安装
- 环境配置
- 管理项目文件夹
- 启动网站开发模式
-
资源管理
- 认识目录
- 资源生产
- 资源替换
-
代码编辑
- 基础讲解
- 内容修改
- 样式修改
-
发布网站
- 部署常识
- 域名注册
- 服务器租赁
- 域名解析
- SSL 证书申请
- 连接到服务器
- 项目部署
收藏文章请按下键盘上的Ctrl / Command + D加入书签栏。
视频教程预览:
1.3 教程声明
本教程面向无门槛学习者,旨在引导网友体验建站过程,且互联网设计从业人员学习效果较佳。因考虑受众的普适性,该教程包含大量计算机及开发入门基础知识,且对项目流程做了较多简化,故此没有后端讲解,于任何情况下都不能作为正式、完整的前端教学资料,而是更多地倾向于行业体验,仅限个人学习使用。
注:本教程涉及到部分关于素材及软件的版权问题,详见条例与条款 - 免责声明。
二、准备工作
2.1 VSCode 与 Node.js 安装
前往 Visual Studio Code 官网下载安装包:https://code.visualstudio.com/
官网会自动识别你的系统,并提供稳定版下载。
接下来前往 Node.js 官网下载安装包:https://nodejs.org/
Mac OS用户请访问该链接下载简易安装包:https://nodejs.org/en/download/prebuilt-installer
Windows
OS X
如有需要请在列表中选择你的 Node 版本:https://nodejs.org/zh-cn/download/package-manager
Windows 系统建议安装到 D 盘根目录下以免发生各种错误,路径如图所示:
2.2 环境配置
接下来验证 node.js 是否已正确安装,并配置相关选项。
Windows
- 添加变量:
- 开始菜单——设置——关于——高级系统设置——高级——环境变量——用户路径中添加
D:\nodejs\node_global
到 Path; - 手动检查全局路径下是否有
D:\nodejs
,如无则手动添加。 - 配置 npm:
- 切换输入法至英文;
- 按下 Windows 徽标键,弹出开始菜单;
- 输入 Powershell,回车。
- 验证安装:
- 在 Powershell 中输入
node -v
,回车查看是否返回 Node JS 版本号; - 在 Powershell 中输入
npm -v
,回车查看是否返回 npm 版本号; - 两者返回成功即可。
- 输入命令行:
npm config set prefix "d:\nodejs\node_global"
回车;npm config set cache "d:\nodejs\node_cache"
回车;- 输入
npm config ls
,回车查看目录是否正确。 - 安装 cnpm:
- 在 Powershell 中输入
npm i -g cnpm --registry=https://registry.npmmirror.com/
,回车等待读条; - 此时我们会因为权限不足而报错,输入
set-ExecutionPolicy RemoteSigned
,回车并按a确认; - 完毕后输入
cnpm -v
以验证安装。
OS X
- 添加变量:
- 复制以下两行内容:
export NODE_HOME="/usr/local"
export PATH=$PATH:$NODE_HOME/bin
- 切换输入法至英文;
- 按住Command键的同时,按下空格键;
- 输入Terminal,回车;
- 在Terminal中输入
cd ~
,回车; - 在Terminal中输入
vim .zshrc
,回车; - 现在进入了vim编辑器,按下I键,左下角会有--INSERT--提示,回车一行,按Command + v粘贴,再输入
:wq
,回车保存; - 再在Terminal中输入
source .zshrc
,回车; - 重启Terminal即可应用Node环境。
- 验证安装:
- 在Terminal中输入
node -v
,回车查看是否返回Node JS版本号; - 在Terminal中输入
npm -v
,回车查看是否返回npm版本号; - 两者返回成功即可。
- 安装cnpm:
- 在Terminal中输入
npm i -g cnpm --registry=https://registry.npmmirror.com/
,回车等待读条; - 此时我们会因为权限不足而报错,按下键盘上的↑键,然后光标回到最前,插入
sudo
(注意空格)按回车确认,再输入当前用户密码并回车,即可使用高级权限安装。 - 完毕后输入
cnpm -v
以验证安装。
2.3 管理项目文件夹
请点此处下载项目文件。下文中区分Windows与OS X两种系统的终端,如果你正在使用Macbook学习,请阅读OS X的命令行。
Windows
于开发盘符新建Project文件夹; 如在D盘,则完整路径为D:\Project;
OS X
于~/Documents/目录下新建Project文件夹; 具体目录为 Users/(你的用户名)/Documents/Project;
解压文件到该目录下,会有my_next_project与nginx这两个目录。
随后启动VSCode,以Windows版本为例:
点击打开文件夹,选择项目文件夹(D:\Project\)即可。
2.4 启动网站开发模式
Windows
- 项目安装:
- 切换到VSCode窗口;
- 按下Control + J打开Powershell。
- 在Powershell中定位到网站项目目录:
cd .\my_next_project\
,回车; - 输入
cnpm install
并回车,等待读条完成。
- 启动项目并预览:
- 输入
cnpm run dev
,回车,如跳出如下内容则可开始项目预览:
- 输入
1> rainydesign_tutorial_demo@0.1.0 dev 2> next dev 3 4 ▲ Next.js 16.1.4 5 - Local: http://localhost:3000 6 - Environments: .env 7 8 ✓ Ready in ...
- 输入
cnpm install
并回车,等待读条完成。
OS X
-
项目安装:
- 切换到 VSCode 窗口;
- 按下 Command + J 打开 Terminal。
- 在 Terminal 中定位到网站项目目录:
cd ./my_next_project/
回车; - 输入
cnpm install
并回车,等待读条完成。
-
启动项目并预览:
- 输入
cnpm run dev
,回车,如跳出如下内容则可开始项目预览:
- 输入
1> rainydesign_tutorial_demo@0.1.0 2> next dev 3 4▲ Next.js 16.1.4 5 6- Local: http://localhost:3000 7- Environments: .env 8 9✓ Ready in ...
- 在浏览器中输入http://localhost:3000以预览网页。
✨✨第二章 课间休息🎉🎉
恭喜!你已完成建站练习的第一步!🥳🥳
请不要忘了适度放松,多多活动身体并眺望远处的绿植哦!
三、资源管理
3.1 认识目录
3.1.1 全局路径
项目目录下的jsconfig.json
设置了一个名为compilerOptions.paths
的对象,代码如下:
1{ 2 "compilerOptions": { 3 "paths": { 4 "@/*": ["./src/*"], 5 "@/public/*": ["./public/*"], 6 } 7 } 8}
即下述内容的 @/
等同于项目文件夹的 ./src/
目录,
同理,@/public/
等同于项目文件夹的 ./public/
目录。
3.1.2 Public 目录
项目目录下的 Public 文件存储了网站上可公共访问的文件,其 URL 为 域名/文件路径
。以目录下的内容为例:
说明 | 层级 | 文件所在目录 | URL | 本地 URL 示例(可直接点击访问) |
---|---|---|---|---|
网站小图标 | 一级 | @/public/ | /favicon.ico | http://localhost:3000/favicon.ico |
网站 Logo | 一级 | @/public/ | /logo.svg | http://localhost:3000/logo.svg |
图片 | 二级 | @/public/img/ | /img/**/*.jpg | http://localhost:3000/img/qrcode.jpg |
视频 | 二级 | @/public/vid/ | /vid/*.mp4 | http://localhost:3000/vid/bg.mp4 |
层叠样式表 | 二级 | @/public/styles/ | /styles/global.css | http://localhost:3000/styles/global.css |
所有 Next.js 的静态资源都可按照内容分类存储到 Public 目录下。
3.1.3 Source 目录
项目目录下的 src/
目录如同上述 public/img/
及 public/vid/
一样,是对应英文单词的缩写。source 意味着网站源文件目录,通常仅存储原始代码且不做公开。
值得一提的是 Next.js 在安装期可选择让用户是否采用 src 目录。为了方便管理,匹配新的规范,我们统一采用了 src 管理源文件。
目录及全名 | 说明(大致性的) | 文件夹用途 |
---|---|---|
@/components | 组件库 | 存储网页组件 |
@/lib (library) | 接口库 | 存储 api 相关封装方法 |
@/pages | 页面库 | 存储网站页面 |
@/utils (utilities) | 方法库 | 存储实用性 React 组件 |
相关内容于 4.1 基础讲解详述。
3.2 资源生产
3.2.1 资源寻获
主要管理网站上的图片;有需要的话少量视频。
本来考虑到字体的,但中文字体文件实在太大了,国内也用不了 Google font(有一个类似的站点但是中文字体截至发稿当天不支持引用),所以放弃了
以下枚举了免费下载资源并可做商业使用的网站:
网站地址 | 提供资源类型 | 说明 |
---|---|---|
https://stocksnap.com/ | 下列内容总集 | 整合了十几个有名的资源分享网站,点击左边切换 |
https://unsplash.com | 图片,照片 | unsplash+ 的图片要收费。不过免费图片已经够多了,筛选请在任意搜索后于 license 选项选 free |
https://pexels.com | 图片,照片,视频 | 该网站的一大特点是有丰富的免费视频素材和对应的照片,推荐使用视频的 |
https://stocksnap.io | 图片,照片 | 类似于 Unsplash,但只存储照片,2024.06.08 之前是没有提供 3D 渲染图下载的 |
https://pixabay.com | 图片,照片,矢量图,图标,视频,音效,动图,音乐 | 资源虽然不够专一,但非常全面 |
还有很多网站就不一一枚举了,可以自行百度如“免费图片下载 知乎”搜索关键的专栏文章。此处以 pexels 为例:
在搜索栏中选择一种资源类型,然后输入关键词;为确保恰当的结果呈现,请尽可能使用英文进行搜索。
非赞助图片悬停均会显示下载按钮,点击以下载一张图片:
等待弹出表示感谢窗口后,图片会开始自动下载。建议将内容按标签进行分类,下例:
3.2.2 图像生成
访问 Microsoft Designer:https://designer.microsoft.com/image-creator,然后按需填写 promets。
本方法适用于英文基础较好的小伙伴,或自行配合 chatgpt、deepl 进行汉译英,然后将关键词写入描述框即可,下例:
3.2.3 图片编辑
我们推荐使用 Adobe XD 进行图片编辑,附件包内提供的 XD 文件版本为 29.2.32.3,且只能用比该版本高的 Adobe XD 编辑内容。如果你没有安装 Adobe XD,这里提供了两个链接以供学习下载使用:
请点击跳转下载,或自行在Pesktop以及Filcr.com搜索“Adobe XD ”获取更多内容。 安装完毕后,请打开 XD 设计稿.xd 以浏览文件:
直接阅读设计稿中的说明,替换对应文件并导出即可。导出选项如下:
格式为 jpg,品质为 80,导出用于设计。
3.3 资源替换
访问项目文件夹目录下的 public/img/
目录,按需替换文件即可。具体可参考教程视频了解细节。
✨✨第三章 课间休息🎉🎉
恭喜!你已完成建站练习的一半进度!🥳🥳
请不要忘了适度放松,多多活动身体并眺望远处的绿植哦!
四、代码编辑
4.1 基础讲解
4.1.1 页面与路由
一个网站(Website)通常是由多个网页(Webpage)组成的,而网页路由可以简单理解为域名后的 URL,比如 rainydesign.cn 与 rainydesign.cn/blog。在 Next.js 项目中,除了特定文件外,放在 pages 目录下的、后缀为.js 或.ts 的文件的文件名便是一个简易路由,其页面指向了这一网页模板。以下是项目页面文件一览:
目录及文件名 | 说明 | 本地 URL(可直接点击访问) |
---|---|---|
@/pages/index.js | 主页。直接访问域名或端口号以访问 | http://localhost:3000/ |
@/pages/blog.js | 博客入口页面 | http://localhost:3000/blog |
@/pages/404.js | 404(找不到页面)页面 | http://localhost:3000/404 |
@/pages/500.js | 500(服务器内部错误)页面 | http://localhost:3000/500 |
@/pages/_app.js | Next.js 网站项目的核心文件,此处仅引入 tailwind CSS 所需的 global.css,勿做改动 | - |
@/pages/_document.js | Next.js 网站项目的核心文件,此处引入了各种基础组件以及网站小图标,勿做改动 | - |
4.1.2 组件简述
一个网站上存储的多个网页通常会反复引用相同的页面元素,有如导航与页尾这些层级较多的元素,也有如按钮这样层级较少的元素。我们可以将它们封装成一个个组件,在所需的组件或页面中引入,并添加到 html 片段之中。本教程项目中的通用组件存储于 @/components/
目录下,主页专用的组件则存储于 @/components/index/
目录下。
以下是本教程项目文件包含的组件一览:
目录及文件名 | 说明 | 管理状态 | 获取状态 | 内含子组件 |
---|---|---|---|---|
@/components/Layout.js | 网站重要的布局组件,存储了各类全局状态,通常也用来管理字体 | 是 | 是 | 是 |
@/components/Nav.js | 网站所需的页头导航,需获取网站当前所在路由,保存了一个移动端菜单开关状态以做切换 | 是 | 是 | 是 |
@/components/Footer.js | 网站所需的页尾,包含了一些社媒链接 | 否 | 否 | 是 |
@/components/Icon.js | 打包好的社媒图标 | 否 | 否 | 否 |
@/components/Background.js | 网站动态背景,纯静态模块 | 否 | 否 | 否 |
@/components/index/Gallery.js | 首页图库卡片容器 | 否 | 否 | 是 |
@/components/index/GalleryCard.js | 首页图库卡片 | 否 | 否 | 否 |
@/components/index/Introduce.js | 首页展示信息 | 否 | 否 | 否 |
@/components/index/Features.js | 首页特性框 | 否 | 否 | 否 |
@/components/index/About.js | 首页展示关于我们 | 否 | 否 | 否 |
4.1.3 html 简介
HTML 即超文本标记语言的缩写,一个以.htm 或.html 作为后缀名的网页文件会包含一些 HTML 标签,它们由尖括号作为标签符书写,包含了标签元素、属性及内容三项。以下枚举了几个 HTML 标签以作示例:
参考标签 | 名称 | 自闭合 | 元素(element) | 属性与它们的值(attributes) | 内容(content) |
---|---|---|---|---|---|
<br /> | 换行符 | 是 | br | - | - |
<p id="myId" class="my_class_name">Lorem ipsum</p> | 段落 | 否 | p | id="myId" class="my_class_name" | Lorem ipsum |
<image src="/img/test.jpg" alt="text" width="128" height="128" /> | 图片 | 是 | image | src="/img/test.jpg" alt="text" width="128" height="128" | - |
4.2 内容修改
HTML 常见的文本标签如下所示:
标签 | 说明 | 示例代码 | 渲染结果 |
---|---|---|---|
<h1></h1> | 一级标题(无样式) | <h1>我是一级标题</h1> | 我是一级标题 |
<h2></h2> | 二级标题(无样式) | <h2>我是二级标题</h2> | 我是二级标题 |
<h3></h3> | 三级标题(无样式) | <h3>我是三级标题</h3> | 我是三级标题 |
<h4></h4> | 四级标题(无样式) | <h4>我是四级标题</h4> | 我是四级标题 |
<h5></h5> | 五级标题(无样式) | <h5>我是五级标题</h5> | 我是五级标题 |
<h6></h6> | 六级标题(无样式) | <h6>我是六级标题</h6> | 我是六级标题 |
<p></p> | 段落 | <p>我是段落</p> | 我是段落 |
...<strong></strong>......<b></b>... | 文本中的粗体 | <p>我是段落中<b>加粗</b>的部分</p> | 我是段落中加粗的部分 |
...<i></i>......<em></em>... | 文本中的_斜体_ | <p>我是段落中<i>斜体</i>的部分</p> | 我是段落中斜体的部分 |
...<u></u>... | 文字中的下划线 | <p>我是段落中<u>下划线</u>的部分</p> | 我是段落中下划线的部分 |
如需修改文本,直接修改标签中间的内容即可,如 <p>我是段落</p>
修改为:<p>修改后的内容</p>
。
可以看到直接设置 h1~h6 并没有让文字大小起变化;修改样式具体在下个章节中讲述。
4.3 样式修改
4.3.1 CSS 简介
CSS 即 Cascading Style Sheets(层叠样式表)的缩写,用于控制 HTML 标签样式;打比方来说,假如 HTML 是一张草图,那么 CSS 的作用就是在给它上色。
目前我们只需用到一个 CSS 文件,那就是项目文件目录下的/public/styles/globals.css。以下是内容节选:
1@tailwind base; 2@tailwind components; 3@tailwind utilities; 4 5body{ 6 position: relative; 7 background: #FAFAFA; 8 color: theme('colors.indigo.950'); 9} 10 11...
以下是 CSS 代码简述:
代码 | 代码片段 | 类型 | 说明 |
---|---|---|---|
@tailwind base; | - | Tailwind 注入 | Tailwind 注入的 Preflights,用于预格式化 HTML 文档样式 |
@tailwind components; | - | Tailwind 注入 | Tailwind 注入的组件区代码 |
@tailwind utilities; | - | Tailwind 注入 | Tailwind 注入的实用区代码 |
body{ position: relative; background: #FAFAFA; color: theme('colors.indigo.950'); } | body{...} | 选择器 | 选择各种 HTML 标签,可以是单个,也可是一种类型,此处选择了 HTML 中的 |
body{ position: relative; background: #FAFAFA; color: theme('colors.indigo.950'); } | positionbackgroundcolor | 样式的键 | 此处 position 为定位,background 为背景的简写,color 修改文字颜色,此处将定位修改为 relative,背景颜色修改为#FAFAFA,字体颜色修改为 color-indigo-950 |
body{ position: relative; background: #FAFAFA; color: theme('colors.indigo.950'); } | relative | 样式的值:特定类型 | 包含一组样式的键使用的固定的值。比如 flex-wrap 对应的值,除了通用值只可能是 wrap、nowrap 以及 wrap-reverse 中的一种 |
body{ position: relative; background: #FAFAFA; color: theme('colors.indigo.950'); } | #FAFAFA | 样式的值:数值或字符串 | 包含了 hex(十六进制)、rgb、rgba、integer(整数)、number(数字)、string 等等 |
body{ position: relative; background: #FAFAFA; color: theme('colors.indigo.950'); } | theme('colors.indigo.950'); | 样式的值:Tailwind CSS 对象 | 此处取的是项目目录下 tailwind.config.js 及 Tailwind CSS 自带的一系列样式预设 |
4.3.2 认识 Tailwind CSS
如果你接触过前端知识,那么你将非常容易上手 Tailwind CSS;如果你没接触过前端知识,那么现在从 Tailwind CSS 入手了解 CSS 知识更是一件美事。
与上述的 nesting CSS 不同,Tailwind CSS 是关注实用性的、开箱即用的工具的代表之一,也更倾向于当前的 HTML 标准,这意味着你不需要思索命名,也不需要在设计稿、HTML 和 CSS 之间来回切换(或是多开一个窗口、多接一台显示器),大大提升了开发效率的同时,逐行调整 + 统一语法的撰写形式更易于维护,且适配组件开发以及 UI 设计标准。
Tailwind CSS 的又一好处是移动端优先的响应式设计。这意味着用 Tailwind CSS 构建布局与样式的网站不再是传统的由桌面至移动端兼容,这也更符合当下移动互联网时代的需求,为目前市场占有率更大的移动设备带来更好的浏览体验。
相信你已经在文件中发现一堆 class="..."
代码了,它们几乎全是 Tailwind CSS 的预设类(即 Class)。此处以便为理解的 @/components/Background.js 为例:
原始代码
1export default function Background() { 2 return ( 3 <div id="bgContainer" class="absolute size-full"> 4 <div class="absolute w-full h-[125%] overflow-x-hidden overflow-y-visible no-scrollbar"> 5 <div class="absolute flex justify-center items-center size-[35vw] top-[-3vh] left-[-15vw]"> 6 <span class="relative size-full rounded-full bg-gradient-to-tr from-gray-100 to-gray-300"></span> 7 <span class="absolute size-[25%] right-[-5%] bottom-[10%] rounded-full bg-gradient-to-bl from-red-200 to-red-400 animate-infinity-ping lg:scale-75 lg:animate-infinity-ping 2xl:scale-50 2xl:animate-infinity-ping-2xl"></span> 8 <span class="absolute size-[25%] right-[-5%] bottom-[10%] rounded-full bg-gradient-to-bl from-red-200 to-red-400 lg:scale-75 2xl:scale-50"></span> 9 {/* <span class="absolute size-[25%] bottom-[-10%] rounded-full bg-gradient-to-bl from-red-200 to-red-400 origin-[50%_-150%] animate-infinity-spin"></span> */} 10 </div> 11 12 <div class="absolute flex justify-center items-center size-[40vw] top-[calc(10vh+15vw)] right-[-15vw]"> 13 <span class="relative size-full rounded-full bg-gradient-to-tr from-gray-100 to-gray-300"></span> 14 <span class="absolute size-[25%] left-[25%] top-[-10%] rounded-full bg-gradient-to-bl from-sky-200 to-sky-400 animate-infinity-ping lg:scale-75 lg:animate-infinity-ping-lg 2xl:scale-50 2xl:animate-infinity-ping-2xl"></span> 15 <span class="absolute size-[25%] left-[25%] top-[-10%] rounded-full bg-gradient-to-bl from-sky-200 to-sky-400 lg:scale-75 2xl:scale-50"></span> 16 {/* <span class="absolute size-[25%] bottom-[-10%] rounded-full bg-gradient-to-bl from-sky-200 to-sky-400 origin-[50%_-150%] animate-infinity-spin-2"></span> */} 17 </div> 18 </div> 19 20 <div class="absolute w-full h-[200%] top-[150vh] 2xl:max-h-[90rem]"> 21 <span class="relative block size-full bg-gradient-to-b from-sky-100/0 via-sky-100 via-fuchsia-100 to-fuchsia-100/0 opacity-50"></span> 22 </div> 23 </div> 24 ) 25}
渲染结果(宽度为 360 时)
若使用 nesting CSS 撰写上述代码第 3~5 行的样式,除了摈弃上述 Tailwind CSS 的优点以外,还会将内容扩展到如下长度:
1#bgContainer{ 2 position: absolute; 3 width: 100%; 4 height: 100%; 5} 6 7#bgContainer > div:first-child{ 8 position: absolute; 9 width: 100%; 10 height: 125%; 11 overflow-x: hidden; 12 overflow-y: visible; 13 -ms-overflow-style: none; 14 scrollbar-width: none 15} 16 17#bgContainer > div:first-child::-webkit-scrollbar{ 18 display: none; 19} 20 21#bgContainer> div:first-child > div:first-child{ 22 position: absolute; 23 display: flex; 24 justify-content: center; 25 align-items: center; 26 width: 35vw; 27 height: 35vh; 28 top: -3vh; 29 left: -15vh; 30} 31...
以下枚举一些常见的 tailwind CSS 样式:
样式的类 | 对应的 CSS 样式 | 说明 |
---|---|---|
坐标布局 | ||
absolute | position: absolute; | 定位为绝对定位,相当于这一元素没有碰撞体积,后写的标签和父级标签将会无视这个元素的尺寸。设置后,用 top / right / bottom / left 调整坐标 > 写了可以让宽高和坐标正确定位 |
relative | position: relative; | 定位为相对定位,使元素尺寸有碰撞体积,也会在不限定父级宽高的情况下强制撑开父级尺寸默认状态或设置 relative 后,用 margin 调整坐标 > 写了可以让宽高和坐标正确定位 |
显示类型 | ||
hidden | display: hidden; | 不显示元素,且从文档流中删除 |
block | display: block; | 块级元素,默认自动把宽度拉满,并让后一个元素强制换行 |
inline | display: inline; | 行级元素,默认不展开宽度也不换行,使 width 和 height 值无效 |
inline-block | display: inline-block; | 行内块元素,默认不展开也不换行,但可以设置宽高 |
flex | display: flex; | 弹性布局,详见阮一峰的语法日志 - Flex 布局教程:语法篇,或参考 Tailwind CSS 官网相关内容:Flex - Tailwind CSS |
flex-col | flex-direction: column; | 弹性布局:使内容从上到下排列 |
flex-row | flex-direction:row; | 弹性布局:使内容从左到右排列(默认) |
flex-wrap | flex-wrap: wrap; | 弹性布局:内容可换行 |
jusitfy-between | justify-content: between; | 内容在主轴上朝两边分散(row 为水平,col 为垂直) |
items-center | align-items: center; | 内容在副轴上朝中间靠拢(轴线为前者的 90° 夹角) |
宽高、坐标、内外边距 | ||
w-full | width: 100%; | 100% 宽度 |
h-2/5 | height: 40%; | 40% 高度 |
min-w-24 | min-width: 6rem; /96px/ | 限定元素的最小宽度为 6rem> 即便元素内空空如也,甚至父元素内的可用空间已经低于 6rem,该元素依然会强行撑开 |
max-w-screen | max-width: 100vw; | 限定元素的最大宽度为 100 视窗宽度 > 这意味着再怎么设置高度,比如 h-96,如果该值比 100vw 小都会无效,且会导致后续的响应式同样无效 |
max-h-[10rem] | max-height: 10rem; | 限定元素最大高度为 10rem> 此处的中括号内可传入一个可用的值 |
size-16 | width: 3rem; _/48px/_height: 3rem; /48px/ | 3rem 的宽与高。此处的 16 需乘以 4,即 48px,16px=1rem,因此换算为 3rem |
top-1 | top: .25rem; /4px/ | 由父级元素从上至下偏移.25rem> 绝对坐标(absolute)适用,下同 |
right-0 | right: 0; | 由父级元素从右侧固定为 0 偏移 > 由于元素常规至上而下、至左而右排列,此类会使被应用的元素被固定在右侧 |
bottom-1/2 | bottom: 50%; | 由父级元素从下至上偏移 50% 的父级高度 |
-left-4 | left: -1rem; /-16px/ | 由父级元素从左至左偏移 1rem(会使该元素超出父级左侧宽度 1rem) |
p-1 | padding .25rem; /4px/ | 元素内边距,四边各.25rem |
px-2 | padding-left: .5rem; _/8px/_Padding-right .5rem; /8px/ | 元素内边距,x 轴(左右)各.5rem |
py-2 | padding: .5rem; /8px/ | 元素内边距,y 轴(上下)各.5rem |
mt-6 | margin-top: 1.5rem; /24px/ | 元素外边距,顶部(top)1.5rem |
mx-auto | margin: 0 auto; | 元素外边距,左右自动撑开到最大,实现元素水平居中 |
border | border-width: 1px; | 元素边框,默认是四边黑色 1px> 四边 1px 的边框会导致元素内部尺寸对应-2px*2px |
border-2 | border-width: 2px; | 元素边框宽度设置为 2px |
border-white | border-color: white; | 元素边框颜色设置为白色 |
文字、字体 | ||
text-xl | font-size: 1.25rem;line-height: 1.75rem; | 文字大小设置为 1.25rem,行间距设置为 1.75rem |
text-white | color: white; | 文字设置为白色 |
text-center | text-align: center; | 文字居中对齐 > 需注意文字是否为块元素,且是否宽度已展开 |
font-medium | font-weight: 500; | 字重(字体粗细)设置为中等 |
颜色、透明度 | ||
bg-white | background-color: white; | 背景颜色设置为白色 |
bg-gradient-to-tr | background-image: linear-gradient(to right, var(--tw-gradient-stops); | 背景图片设置为线性渐变,由左下至右上 |
from-... | 详见 https://tailwindcolor.com/获取颜色信息 | 渐变色从...开始 |
via... | 渐变色至...变换 | |
to... | 渐变色至...结束 | |
opacity-80 | opacity: .8; | 透明度设置为 80% |
动画、伪类与状态 | ||
duration-300 | transition-duration: .3s; /300ms/ | 元素的动画时间为 300 毫秒 |
ease-linear | transition-timing-function: linear; | 元素的动画被设置为线性 |
before:content-['test'] | :before{ content: 'test'; } | 元素的 before 的内容为'test' |
after:text-white | :after{ color: white; } | 元素的 after 的字色为'white' |
hover:text-white | :hover{ color: white} | 指针悬停在元素上时,字色变更为白色 |
响应式 | ||
sm:... | @media(min-width:640px){...} | 窗口宽度达到 640px 时生效 |
md:... | @media(min-width:768px){...} | 窗口宽度大于 768px 时生效 |
lg:... | @media(min-width:1024px){...} | 窗口宽度达到 1024px 时生效 |
xl:... | @media(min-width:1280px){...} | 窗口宽度达到 1280px 时生效 |
2xl:... | @media(min-width:1536px){...} | 窗口宽度达到 1536px 时生效 |
如果你对了解 Tailwind CSS 的优势感兴趣,详见Adam Wathan的博客文章:CSS Utility Classes and “Separation of Concerns”
4.3.3 Class 变更
上面我们已经着重介绍了 Tailwind CSS 的优势和常见的 Class ,那么现在就让我们看看 Tailwind CSS 的 Class 是怎么在 Next.js 中工作的,且要如何修改样式。
前端代码
1<p class=" 2 max-w-2xl 3 mx-auto 4 mt-10 5 text-center 6 xl:text-lg">如你已具备一定的开发能力,或是阅读了这篇教程并实现了网站部署,想要进一步学习技术栈可跳转至博文专辑: 7 <a href="#" target="_blank" class=" 8 relative 9 mx-1 10 text-indigo-600 11 12 before:absolute 13 before:w-full 14 before:h-px 15 before:left-0 16 before:-bottom-0.5 17 before:bg-indigo-300/[.67] 18 19 after:absolute 20 after:w-0 21 after:h-px 22 after:left-0 23 after:-bottom-0.5 24 after:bg-indigo-600 25 after:duration-300 26 after:ease 27 28 hover:after:w-full">《Next.js + Strapi + Tailwind CSS 全套实战教学》</a>,以查看完整教程。 29</p>
渲染结果
如果你想要文字居左,且链接为红色的话,修改部分内容即可:
前端代码
1<p class=" 2 max-w-2xl 3 mx-auto 4 mt-10 5 text-left 6 xl:text-lg">如你已具备一定的开发能力,或是阅读了这篇教程并实现了网站部署,想要进一步学习技术栈可跳转至博文专辑: 7 <a href="#" target="_blank" class=" 8 relative 9 mx-1 10 text-red-600 11 12 before:absolute 13 before:w-full 14 before:h-px 15 before:left-0 16 before:-bottom-0.5 17 before:bg-red-300/[.67] 18 19 after:absolute 20 after:w-0 21 after:h-px 22 after:left-0 23 after:-bottom-0.5 24 after:bg-red-600 25 after:duration-300 26 after:ease 27 28 hover:after:w-full">《Next.js + Strapi + Tailwind CSS 全套实战教学》</a>,以查看完整教程。 29</p>
渲染结果
以此类推,按你的喜好不断修改样式,直到合适为止。
✨✨第四章 课间休息🎉🎉
恭喜!站点已经完成,只差部署和发布了!🥳🥳
请不要忘了适度放松,多多活动身体并眺望远处的绿植哦!
五、发布网站
5.1 部署常识
所谓的“网址”即域名(Domain),需要经由专门的代理机构进行注册,并解析至相关的服务器公网 IP,最后由服务器系统中的 web 服务器进行域名解析配置,就可以将我们的域名展示在互联网上了。
开始之前,让我们先了解一些建站必备的基础名词:云服务商、云服务器、web 服务器、公网 IP、域名、域名解析、SSL 证书等。
- 云服务商:指提供了互联网应用或网站所需的各类项目的服务商,常见服务有域名注册、SSL 证书签发、云服务器、云存储、云数据库租赁等,国内比较知名的云服务商有华为云、腾讯云、阿里云、天翼云等等。
- 云服务器:指物理服务器经由云服务商托管,用户直接通过互联网链接访问操作的云端服务器。你可简单理解为云服务商提供了一台随时随地供你远程控制的电脑。
- web 服务器:此处与云服务器不同,指的是一个运行在服务器系统上的服务,常见用途为放置网页项目并解析域名共公网浏览,也处理访问端的请求,可以选择性地开放上传权限。你可以理解为云服务器是一座房子,而 web 服务器就是一扇向公众开放的大门;常见的 web 服务器有 nginx、apache 等等。
- 公网 IP:一台设备在公网上的地址,这和他的国家及其对应的代理商有关系,代理商获得入网许可然后将随机 IP 分配到各个设备上(你可以于百度搜索“IP”获知你的公网 IP 地址)。然而作为服务器,IP 地址必须是固定的。
- 域名:一种定位标识,因为公网 IP 不便于记忆所以使用域名代替,域名有一二三级之分,其中一级为后缀(.com,.net,.cn 等),二级为一级后缀的前一个字符串(如 rainydesign.cn),三级则再往前(如 www.rainydesign.cn)。
- 域名解析:通过将域名解析到相关 IP,我们得以在访问一个站点域名的时候连接到公网 IP 所在的服务器,以存取其 web 服务器上的信息。
- SSL 证书:首先,SSL 作为一种安全协议,具备身份验证和数据传输加密功能,在同时拥有已注册的域名与租赁的服务器的情况下可申请 SSL 证书,由受信任的数字证书颁发机构 CA 在验证服务器身份后颁发,并在服务器上端解析完毕,最后由 web 服务器配置 SSL 文件、使用 https 协议,之后通过该协议的域名访问就能一定程度地提升安全性。
5.2 域名注册
- 访问腾讯云首页,在右上角搜索“域名”并点击进入页面:
- 选择“产品&解决方案”,点击“立即注册”按钮:
- 输入你想要注册的二级域名字符并搜索:
- 如图所示,被抢注的域名就不能再注册了。这里推荐好好想一下自己的域名,常见的由和品牌或个人 IP 相结合,此处随便输入一个二级域名做示范:
- 可以看到一级域名都可以抢注,商用建议拿下.com、.cn、.net 和.co 四个域名,个人使用的话哪个便宜选哪个就好,此处以.com 为例,点击“添加购物车”按钮并点击“立即购买”:
- 准备好你的信息模板购买即可,之后可以在控制台中查看已有的域名(在上方搜索栏中“域名”并跳转至“域名注册/我的域名”即可)。
5.3 服务器租赁
我们可以根据项目的大小按需选择想要的服务器类型,对于网建而言,轻量应用服务器就很够用了。
轻量应用服务器(推荐) | 云服务器 | 虚拟主机 | |
---|---|---|---|
平均负载能力(一般情况下) | 一般 | 较高 | 较低 |
存储空间 | 一般(数十至上百 GB) | 按需 | 较小(几百 MB 至数 GB) |
操作系统 | 可自由选择操作系统 | 可自由选择操作系统 | 有一定限制 |
租赁价格 | 一般 | 较高 | 较低 |
- 确定完你想要采购的服务器类型后,访问轻量应用服务器页面进行采购,此处依旧以腾讯云为例:
- 选择一个套餐进行采购:
- 推荐租赁一年起订,如果你没有开发基础,也不会在 linux 下使用命令行部署系统环境的话,建议选择 windows server。
- 所有内容确认完毕后,点击购买即可,之后我们能在控制台 - 轻量应用服务器中确认已采购的服务器:
- 按需进入查看即可。
5.4 域名解析
- 回到控制台 - 轻量应用服务器 - 服务器列表,选择域名解析选项卡,点击“添加域名解析”:
- 将二级域名及三级域名添加到解析列表(如 rainydesign.cn 和 www.rainydesign.cn):
- 点击确认提交。
5.5 SSL 证书
将域名解析到服务器后便可以申请 SSL 证书了。
- 控制台中搜索 SSL 证书并打开:
- 点击“免费申请证书”进行申请:
- 输入你的域名和邮箱,点提交按钮进行验证:
- 跳转至控制台 - 我的域名页面,进入域名,点击“解析”:
- 点击“添加记录”按钮,将“记录类型”修改为“CNAME”,添加上面第 3 步提交验证后出现的“主机记录”和“记录值”,点击“确认”按钮保存:
- 回到证书页面进行手动验证,等待验证完成即可。
5.6 连接到服务器
通过使用 windows 自带的 mstsc,我们可以轻松地远程访问 windows 服务器(mac OS 需要安装 Microsoft Remote Desktop)。
- 来到控制台 - 轻量应用服务器 - 服务器内:
- 如果你在租赁服务器时没有设置密码,此时可能需要手动修改一下,点击上图箭头所示的“重置密码”进行重置:
- 接着查看“防火墙”选项卡:
- 确保 80 与 443 端口开启,点击“添加规则”按钮,新建一个“3000”端口:
- 然后回到“概要”选项卡,复制左上角的公网地址,之后按下
windows徽标键
+R
,输入“mstsc”,回车: - 点击“编辑”,在弹出对话框中点击“更多选项”,如果当前 windows 用户不是 Administrator,则需再点击“选择其他账户”,至此账户与密码框都可以编辑,输入刚才保存的账号密码即可:
- 填写完毕后,点击“确认”,并连接到服务器(如弹出安全性警告可以无视并继续连接):
接下来就可以开始部署网站项目了。
5.7 项目部署
- 将远程控制窗口最小化,然后回到项目文件夹(d:\project\),将本地项目文件夹内除了node_modules和.next文件夹以外的文件复制一份到my_website,就像这样:
- 接下来需要下载 SSL 证书并替换到 nginx 目录下;访问腾讯云 - SSL 证书页面,刚才的证书申请应该已经成功了,点击下载并选择 nginx:
- 下载完毕后,将压缩包复制粘贴进项目文件夹里的
nginx\nginx-1.25.3\conf\cert
目录,解压到当前目录,并修改nginx\nginx-1.25.3\conf\
目录下的nginx.conf
文件中的参数: - 在 VSCode 中依次修改上述高亮文本内容,使其对应你的域名和 SSL 证书文件。仔细校对、确认无误后,在文件管理器里头将上述内容打个包,就像这样:
- 复制文件,回到远程控制的服务器上,创建一个 project 目录,然后在目录内粘贴并解压,就像这样(别忘了校对项目目录名:my_website,不然等下一定报错):
- 确认目录无误后,在服务器上重新跑一遍二、准备工作的操作事项,不过这次只用装 Node.js、不用装 VSCode,所以可以将 Node.js 安装包一并传到服务器、安装,然后直接用 powershell 跑指令即可,直到在服务器端的 powershell 中正常启动 Next.js 项目为止:
- 现在你应该能通过公网 ip 后加 3000 端口号直接访问网站了,就像我们的官网一样:
- 不过迄今为止网站都运行在开发模式,你需要使用打包指令将其打包并转入生产模式。在上述的 powershell 中按下 Ctrl+C 停止 Next.js(一次没反应就按两次,直到出现目录为止),然后运行
cnpm run build
进行打包,等待打包完毕后,运行cnpm run start
: - 如看到项目成功 start,最后启动 web 服务器即可,来到桌面上的
Project\nginx\nginx-1.25.3
目录,双击 nginx.exe 启动; - 在底部任务栏右键菜单中选择任务管理器,输入 nginx,如看到 nginx 正常运行,则可以在浏览器内输入网址访问你的网站了:
- 如图所示,网站已经可以正常访问了。Enjoy!
✨✨课程已完结🎉🎉
恭喜!现在你可以把网址分享给他人观看了!🥳🥳
如果这篇文档对你有帮助,别忘了按下 Ctrl+D 收藏,并转发分享给有需要的朋友哦!
六、常见疑问解答
按照B站站友、公众号留言与其他渠道的提问顺序依次解答。
视频将在FAQ内容达到一定数量后制作(做视频真的很累的 T.T)
- 方便出一期Vercel、Cloudflare、Netlify等网站托管服务教程吗?
- 当然,我们很愿意做一套前沿的部署教程,但国内最大的问题是大部分人不会科学上网,而这期教程又是面向零基础的宝子们(本教程的资源甚至包括一个可选下载的、完整的依赖包文件夹——node_module,就是考虑到cnpm -i都拉不下来的情况),而那问题不方便公开讨论,所以我们这里仅提供国内的云服务商。
等到下一期正式教程,我们就默认观看的宝子们都是业内伙伴了,会在第一章明确声明学习该课程所需的知识储备与硬性条件,前者就包括了遇到问题可以自行谷歌、无障碍浏览StackOverflow、HTML5 + CSS3 + Vanilla JavaScript精通等基本要求。
下一期课程我们粗估了一下,大概有30+基础课与20+进阶课,按网站开发顺序一Part一Part发上来,届时会在课程的后半段讲到。相关课程博客请点击查看:《Next.js + Strapi + Tailwind CSS全套实战教学》,目前先更新个大纲,内容正在按照顺序生产了,敬请期待哦。
- 当然,我们很愿意做一套前沿的部署教程,但国内最大的问题是大部分人不会科学上网,而这期教程又是面向零基础的宝子们(本教程的资源甚至包括一个可选下载的、完整的依赖包文件夹——node_module,就是考虑到cnpm -i都拉不下来的情况),而那问题不方便公开讨论,所以我们这里仅提供国内的云服务商。
- Adobe XD 我并不会用,能使用其他热门一点的图片编辑软件,比如Photoshop吗?
- 当然可以,我可是从平面设计转行过来的哟😘。不过PS的话,编辑起来会稍微有一点麻烦,我这边也提供了一个Adobe XD设计稿转换过来的Photoshop设计稿件,会在这两天传到下载链接上,里头同样包含了操作指南,之后有空我也会出一期Adobe XD教程哟。
这里我还是要疯狂安利一下XD的:对于未掌握PS的伙伴而言,Adobe XD的轻量级+对齐前端逻辑的设计理念更适合用户上手。与其说XD具备平滑的学习曲线,更不如说XD没什么学习门槛,而掌握了PS的同学上手XD更是开箱即用。
这一点甚至体现在我们网建收尾的售后服务之中:我们会要求客户指派的运营人员掌握Adobe XD,无论对方是否有过设计经验,以生产对齐VIS的图片资源,如博客与视频封面,因为XD学起来实在是太快了。以下是XD模版化设计的各种功能优势:- Drag-to-replace:图片拖入即换;
- Plugin Market:插件广场,常用的包括图标库、Logo与图片搜索、一键批量填充头像、根据数据生成图表、随机彩色、批量命名等;
- Ctrl / Command + R:连续重复图层;
- Ctrl / Command + E:导出所选资源;
- 以及:Ctrl / Command + Enter ↩︎:实时预览项目动画等等。
是的,Adobe XD是一款ui设计软件自然少不了动画和交互,毕竟是对标Sketch的软件。
不方便访问figma,或是使用Windows的小伙伴们推荐使用。
- 当然可以,我可是从平面设计转行过来的哟😘。不过PS的话,编辑起来会稍微有一点麻烦,我这边也提供了一个Adobe XD设计稿转换过来的Photoshop设计稿件,会在这两天传到下载链接上,里头同样包含了操作指南,之后有空我也会出一期Adobe XD教程哟。
- 图片替换不太懂,具体要换啥?
- 如果是用Next.js直接生成的静态页面,那么Next.js的公共图片会在根目录的
/public
目录下。你在网站项目中看到了哪张想换的图片,找到对应图片直接替换就好啦。具体要换的图片也都在设计稿中命名好了,替换完图片直接导出即可。
- 如果是用Next.js直接生成的静态页面,那么Next.js的公共图片会在根目录的
- 我可以用Yarn管理项目么?
- 当然!Rainy Design Studio的小伙伴们默认使用Yarn进行项目管理,因此我们自然也十分推荐,简单地在VSCode的终端中使用
yarn
、yarn add
、yarn remove
与yarn dev
以完成开发阶段的大多数管理事项。不过国内还是老问题——科学上网,这节课又面向零基础,所以到了面向业内宝子们的正式课程我们就会用Yarn啦。
- 当然!Rainy Design Studio的小伙伴们默认使用Yarn进行项目管理,因此我们自然也十分推荐,简单地在VSCode的终端中使用
七、结语
(待补充)
八、资源下载
项目资源:蓝奏云下载地址
- 项目文件: Project.zip
- 设计资源: 设计资源包.zip
- 软件安装:访问 www.pesktop.com 并搜索XD
- 如果无法安装依赖请下载: node_modules.zip 并解压到项目目录
- 不习惯使用XD,想用Photoshop进行编辑的请下载:ps设计稿.zip
Rainy Design @ 2024