Tailwind CSS浅析与实操
Tailwind CSS
一、Tailwind CSS简介
What is Tailwind CSS
- Tailwind CSS| TailwindCSS中文文档 | TailwindCSS中文网
- 官方解释:只需书写 HTML 代码,无需书写 CSS,即可快速构建美观的网站。本质上是一个工具集,包含了大量类似
flex
、pt-4
、text-center
以及rotate-90
等工具类,可以组合使用并直接在 HTML 代码上实现任何 UI 设计。 - 个人理解:Tailwind CSS 就是一套实用型的 CSS 框架,它不像其他的 CSS 框架一样提供了一些预定义的类来实现常用样式,而是提供了一组可以组合的原子类,可以通过组合这些原子类来定义样式。这些原子类都是非常小的样式类,它们只定义了一个具体的样式细节,例如背景色、文本颜色、字体大小、宽度、高度等。通过将它们组合在一起,可以快速而灵活地创建出各种不同的样式。
- 优点:
- 灵活,高度定制化
- 最终 CSS Bundle 极小,加快渲染速度
- 极大减少命名,设计心智负担
- 劣势:
- 内容样式强耦合,后期维护方面或存在压力
- 一定的学习成本
- Class 串稍长(@apply解决)
- 应用场景:
- 快速开发原型: Tailwind CSS 提供了大量的样式原子类,可以快速构建出漂亮且具有效果的原型。
- 用于大型 Web 应用: Tailwind CSS 的设计理念可以使开发者更快地开发出易于维护的 CSS 代码。同时,它强调样式的规律性,可以防止样式的重复定义,提高代码的可读性和易维护性。
- 与其他框架或库集成: Tailwind CSS 可以与其他框架或库集成,例如 React、Vue、Angular,以及其他的 CSS 框架,例如 Bootstrap。在不同的应用中,它可以作为一种简洁的样式定制解决方案。
- 移动应用开发: Tailwind CSS 的响应式设计可以轻松的应用到移动应用中,开发人员可以根据不同屏幕尺寸来确定相应的样式,提高移动应用的适应性。
Why choose Tailwind CSS
- 使用成本与许可:Tailwind CSS 是一个免费的开源项目,使用 MIT 许可证(MIT License)。这意味着可以免费使用、复制、修改、合并、出版发行、再授权、销售软件及其衍生品。所以从许可证方面来说,使用 Tailwind CSS 是没有直接的费用的,并且可以将其直接用于商业项目。
- 文档资料与学习曲线:Tailwind CSS 提供了详细的文档和示例,使得学习过程更加简化。使用方式类似Bootstrap,且提供了vscode自动补全插件,方便进行快速开发。
- 社区支持和更新频率: Tailwind CSS 社区非常庞大且活跃,拥有许多开发者、设计师和贡献者。可以在官方论坛、GitHub 仓库、Stack Overflow 和社交媒体等平台上找到大量的问题解答、教程、示例代码和实用资源。更新频率高,可以及时获取到 bug 修复、新功能和安全补丁,保持项目的稳定性和安全性。
- 性能和可扩展性:
- Tailwind CSS 在性能表现方面,采用了一种基于原子类的方法,只包含实际使用到的样式。这意味着不会加载不必要的代码,从而减小了文件大小,提高了加载速度。同时Tailwind CSS 提供了一套优化的构建工具和配置选项,无运行时依赖和快速响应式设计,使其具有良好的性能表现。
- Tailwind CSS 使用原子类构建块的方法,通过组合不同的类来定义样式,而不是使用预定义的组件。这种方法使得定制和扩展变得非常简单,可以根据项目需求自由组合和重用样式类。具有高度可定制化的配置选项,提供了插件系统,允许轻松地扩展框架功能;也可以与现有的组件库集成。
二、Tailwind CSS解决的问题
1.类名命名
- 一般标准做法是将CSS和HTML分开来实现关注点分离(separation of concerns),作为程序员,工作中的一大难点就是起名。>_<||
<div class="chat-notification"><div class="chat-notification-logo-wrapper"><img class="chat-notification-logo" src="/img/logo.svg" alt="ChitChat Logo"></div><div class="chat-notification-content"><h4 class="chat-notification-title">ChitChat</h4><p class="chat-notification-message">You have a new message!</p></div>
</div><style>.chat-notification {display: flex;max-width: 24rem;margin: 0 auto;padding: 1.5rem;border-radius: 0.5rem;background-color: #fff;box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);}.chat-notification-logo-wrapper {flex-shrink: 0;}.chat-notification-logo {height: 3rem;width: 3rem;}.chat-notification-content {margin-left: 1.5rem;padding-top: 0.25rem;}.chat-notification-title {color: #1a202c;font-size: 1.25rem;line-height: 1.25;}.chat-notification-message {color: #718096;font-size: 1rem;line-height: 1.5;}
</style>
- 这种做法会起很多无所谓的名字,几周之后回来修改代码时根本搞不清楚样式应用到了哪些元素上,而且很可能在其它地方也会使用同样的类名,当尝试修改时就导致UI无法正常工作。
- 使用Tailwind CSS就不需要再起这些无所谓的类名了。
<div class="p-6 max-w-sm mx-auto bg-white rounded-xl shadow-lg flex items-center space-x-4"><div class="shrink-0"><img class="h-12 w-12" src="/img/logo.svg" alt="ChitChat Logo"></div><div><div class="text-xl font-medium text-black">ChitChat</div><p class="text-slate-500">You have a new message!</p></div>
</div>
- 如果你觉得HTML中类名过多,可以在vscode中安装Inline fold插件,会自动折叠类名。
2.语法冗长
- 使用class定义类名,然后编写代码,如此反复可能会造成很大的代码量,使用Tailwind CSS能大大减少代码量,压缩代码体积。
3.样式定制
Tailwind CSS 和 Bootstrap 都是前端常用的 UI 框架,但它们的设计思路和使用方式存在一些区别:
- 设计哲学: Tailwind CSS 的设计哲学是提供一系列基础工具类,通过组合这些工具类来快速构建页面和 UI。而 Bootstrap 更注重提供各种 UI 组件和样式风格,以便快速搭建现成的页面。
- 样式组织方式: Tailwind CSS 使用原子级别的 CSS 类来构建页面,每个类只负责一个特定的样式,因此它的样式组织方式更加细粒度和灵活。而 Bootstrap 则更倾向于将多个样式组合成一个类,以便快速实现某个组件或效果。
- 自定义程度: Tailwind CSS 更容易进行自定义和扩展,因为它的样式都是单独的类,并且可以通过配置文件进行自定义。而 Bootstrap 设计更为全面和集成,因此在进行自定义时较为困难。
4.僵尸样式
- 使用class编写类名再编写样式,会造成样式冗余,也会出现虽然定义了样式,但是没有被使用到,变成“僵尸样式”
- Tailwind 会在针对生产环境进行构建时自动删除所有未使用到的 CSS 代码,也就是说 你所获得的最终的 CSS 代码包的尺寸是最小的。事实上,大部分 Tailwind 项目所生成的 CSS 代码包都小于 10kB 。
5.暗黑模式
- 使用暗黑模式前,你需要在
tailwind.config.js
中配置:
/** @type {import('tailwindcss').Config} */
module.exports = {darkMode: 'class',// more options...
}
- 然后,你只需要少量的代码,就可以使用暗黑模式了:
<div class="w-32 h-32 bg-blue-500 dark:bg-green-500"></div>
三、Tailwind CSS语法规则
基本规则
- Tailwind CSS 是一种实用且强大的 CSS 框架,它提供了一些预设的样式类,可以让开发者快速地构建出美观的 UI 界面。下面是 Tailwind CSS 的基本使用方法和语法规则:
- 样式类结构:Tailwind CSS 的样式类采用以
类别-属性-值
的结构命名,例如.bg-blue-500
表示背景色为蓝色(blue),并且其颜色值为 500,类别为bg
(背景)。 - 属性值的命名规则:在 Tailwind CSS 中,属性值分为数值、颜色和布尔值三种类型。数值采用数字表示,例如
w-20
表示宽度为 20 像素;颜色采用单词或十六进制颜色值表示,例如bg-red-500
表示红色背景(颜色值为 #EF4444);布尔值则采用true
或false
表示,例如hidden
表示隐藏元素。 - 基础样式类:在 Tailwind CSS 中,有一些基础样式类用于一些常用的样式调整,例如:
.w-10
表示元素的宽度;.text-xl
表示字体大小.mx-auto
表示水平居中;.text-center
表示文本水平居中;.text-red-500
表示字体颜色
- 响应式样式类:在 Tailwind CSS 中,有一些响应式样式类,用于在不同的屏幕尺寸下显示不同的样式。这些样式类命名规则为
{屏幕尺寸}:{属性}-{属性值}
,例如text-center sm:text-left
表示在小屏幕尺寸下文本左对齐,在大屏幕尺寸下文本居中。 - 链接样式类:在 Tailwind CSS 中,有一些链接样式,用于美化页面中的链接效果,例如:
.underline
表示下划线;.no-underline
表示去掉下划线;.hover:underline
表示鼠标悬停时出现下划线;.hover:text-red-500
表示鼠标悬停时文本变为红色;
- 其他常用样式类:在 Tailwind CSS 中,还提供了许多其他常用样式类,例如:
.rounded
表示圆角;.shadow
表示阴影;.bg-gradient-to-r
表示背景渐变。
通过以上的基本使用方法和语法规则,可以让您更加熟悉和了解 Tailwind CSS 的使用,从而更加高效地使用这个强大的 CSS 框架。
语法技巧
- Tailwind CSS 是一个快速、高效且高度可定制的 CSS 框架,它使用一组预定义类来快速构建 UI。以下是一些实用技巧,帮助您更好地利用 Tailwind CSS:
-
自定义颜色:在 tailwind.config.js 文件中,可以使用 theme 属性自定义颜色,这个属性包含一个颜色对象,您可以并据此为您的项目定义新的颜色。
-
响应式设计:Tailwind 提供了一系列响应式类,让您可以根据不同的屏幕尺寸为不同的设备定制 UI,例如:sm,md,lg等。
-
定制样式:Tailwind CSS 提供了许多原始的类,您可以轻松地将它们组合在一起创造出自定义样式的组合。
- 组合实用类:通常情况下,您可以通过多个实用类的组合来实现所需样式。例如,要在元素上添加40个像素的上边距和底边距,您可以将
pt-10
(上边距为10) 和pb-10
(底边距为10)两个实用类组合在一个元素上,即class="pt-10 pb-10"
。 - 扩展现有实用类:您还可以通过添加前缀或后缀来扩展现有的实用类。例如,要创建一个自定义的
bg-opacity-90
类,即给背景添加90%的不透明度,只需将bg-opacity-90
类添加到bg-blue-500
(蓝色背景)的后面,即class="bg-blue-500 bg-opacity-90"
。 - 使用 @apply 来扩展样式:该功能允许您将多个实用类组合成自定义样式,然后将其应用于一个元素。例如,您可以创建一个自定义的
font-bold-uppercase
类,然后使用@apply
将font-bold uppercase
两个类组合在一起:
less复制代码.font-bold-uppercase {@apply font-bold uppercase; }
然后,可以应用该
font-bold-uppercase
类到一个元素中:class="font-bold-uppercase"
。 - 组合实用类:通常情况下,您可以通过多个实用类的组合来实现所需样式。例如,要在元素上添加40个像素的上边距和底边距,您可以将
-
文本样式:Tailwind CSS 提供了一些实用的类,可以快速设置文本的样式,例如: text-center(居中对齐文本)、text-2xl(增加文本大小)。
-
构建网格系统:您可以利用 Tailwind CSS 来构建网格系统,这使得在项目中创建布局变得更加容易。利用网格系统类将组件和元素对池进行行和列的多样化排列,能让您快速定位到您需要的布局。
ini复制代码<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"> <div class="bg-gray-200 p-4">Col 1</div> <div class="bg-gray-200 p-4">Col 2</div> <div class="bg-gray-200 p-4">Col 3</div> </div>
-
定位元素:Tailwind 提供了各种定位元素的类,包括 z-index、position、top、right、bottom、left 等等,使您轻松定位元素的位置和层级。
-
缩放图像:利用 Tailwind CSS,您可以轻松地在UI中缩放图像,只需使用 w-和 h- 后缀来指定图像的宽高。
四、Tailwind CSS实践
1. 安装依赖
- 控制台输入以下命令:
# 初始化package.json文件
npm init -y# 安装tailwind
npm install -D tailwindcss# 创建tailwind.config.js
npx tailwindcss init
- 此时项目结构如下:
- 修改content属性,使其能够定位到文件位置:
// tailwind.config.jsmodule.exports = {//路径注意调整content: ["./**/*.{html,js}"],theme: {extend: {},},plugins: [],
}
2.新建index.html和input.css文件
- 在当前目录下新建index.html
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><!-- 注意这里引入的output.css文件,后面会用到 --><link rel="stylesheet" href="/dist/output.css">
</head><body><h1 class="flex text-3xl font-bold underline text-blue-600">Hello Tailwind CSS!</h1>
</body></html>
- 在当前目录下新建input.css
/* 引入 tailwind 的基础样式 */
@tailwind base;
/* 引入 tailwind 的组件样式 */
@tailwind components;
/* 引入 tailwind 的工具样式 */
@tailwind utilities;
- 创建完文件后的项目结构:
3.tailwind编译
- 使用tailwindcss对当前项目进行编译然后输出css文件:
npx tailwindcss -i ./input.css -o ./dist/output.css
- 执行完命令后的项目结构:
- 在浏览器端预览index.html
- 对于其它项目中的使用可以详见:TailwindCSS的使用,看这一篇就够了!
相关文章:
Tailwind CSS浅析与实操
Tailwind CSS 一、Tailwind CSS简介 What is Tailwind CSS Tailwind CSS| TailwindCSS中文文档 | TailwindCSS中文网官方解释:只需书写 HTML 代码,无需书写 CSS,即可快速构建美观的网站。本质上是一个工具集,包含了大量类似 fle…...
Activiti工作流引擎详解与应用
一、简介 Activiti是一个开源的工作流引擎,基于BPMN2.0标准进行流程定义。它可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN2.0进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程由Activiti进行管…...
New Journal of Physics:不同机器学习力场特征的准确性测试
文章信息 作者:Ting Han1, Jie Li1, Liping Liu2, Fengyu Li1, * and Lin-Wang Wang2, * 通信单位:内蒙古大学物理科学与技术学院、中国科学院半导体研究所 DOI:10.1088/1367-2630/acf2bb 研究背景 近年来,基于DFT数据的机器学…...
ubuntu22.04 x11窗口环境手势控制
ubuntu22.04 x11窗口环境手势控制 ubuntu x11窗口环境的手势控制并不优秀,我们可以使用touchegg去代替 这个配置过程非常简单,并且可以很容易在一定范围内达到你想到的效果,类比mac的手势控制 关于安装 首先添加源,并安装 sud…...
【ARM CoreLink 系列 4 -- NIC-400 控制器详细介绍】
文章目录 1.1 ARM NIC-400(Network interconnect)1.1.1 NIC-400 系统框图1.1.2 NIC-400 Network Interconnect1.2 NIC-400 特点1.2.1 QoS-400 Advanced Quality of Service1.2.2 QVN-400 QoS Virtual Networks1.2.3 TLX-400 Thin Links1.3 NIC-400 Top1.4 NIC-400 Terminology1…...
【生成模型】解决生成模型面对长尾类型物体时的问题 RE-IMAGEN: RETRIEVAL-AUGMENTED TEXT-TO-IMAGE GENERATOR
介绍 尽管最先进的模型可以生成常见实体的高质量图像,但它们通常难以生成不常见实体的图像,例如“Chortai(狗)”或“Picarones(食物)”。为了解决这个问题,我们提出了检索增强文本到图像生成器…...
南美巴西市场最全分析开发攻略,收藏一篇就够了
巴西位于南美洲东部,是南美洲资源最丰富,经济活力和经济实力最强的国家。巴西作为拉丁美洲的出口大国,一直是一个比较有潜力的市场,亦是我国外贸公司和独立外贸人集群的地方。中国长期是巴西主要的合作伙伴,2022年占巴…...
c++中操作符->与 . 的使用与区别
在C中,-> 和 . 是两个不同的成员访问操作符,用于访问类、结构体或联合体的成员。 “->” 操作符: 用于通过指针访问指针所指向对象的成员。当有一个指向对象的指针时,可以使用 -> 操作符来访问该指针所指向对象的成员。…...
golang 编译器 汉化
1、找到左上角file选项,点击选中settings进行单机 2、找到settings中找到plugins选中进行点击 3、再框中输入chinese进行搜索,出结果后找到如下图所示,点击进行安装 4、安装完成后进行重启ide,完美解决...
压缩包系列
1、zip伪加密 一个zip文件由三部分组成:压缩源文件数据区压缩源文件目录区压缩源文件目录结束标志。 伪加密原理:zip伪加密是在文件头中加密标志位做修改,然后在打开时误被识别成加密压缩包。 压缩源文件数据区: 50 4B 03 04&a…...
互联网图片安全风控实战训练营开营!
内容安全风控,即针对互联网产生的海量内容的外部、内部风险做宏观到微观的引导和审核,从内容安全领域帮助企业化解监管风险和社会舆论风险,其核心是识别文本、图片、视频、音频中的有害内容。 由于互联网内容类型繁杂、多如牛毛,加…...
炫酷转换:Java实现Excel转换为图片的方法
摘要:本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在实际开发过程中,经常会有这样的需求:将Excel表格或特定区域转…...
vue elementui <el-date-picker>日期选择框限制只能选择90天内的日期(包括今天)
之前也写过其他限制日期的语句,感觉用dayjs()的subtract()和add()也挺方便易懂的,以此记录 安装dayjs npm install dayjs --save dayjs().add(value : Number, unit : String); dayjs().add(7, day); //在当前的基础上加7天dayjs().subtract(value : N…...
YOLOv5全新Neck改进:BiSPAN 结构独一无二,为目标检测打造全新融合网络,增强定位信号,对于小目标检测的定位具有重要意义
💡本篇内容:YOLOv5全新Neck改进:BiSPAN 结构升级版,为目标检测打造全新融合网络,增强定位信号,对于小目标检测的定位具有重要意义 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv5 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二次创新,YOLOv…...
flutter开发实战-video_player插件播放抖音直播实现(仅限Android端)
flutter开发实战-video_player插件播放抖音直播实现(仅限Android端) 在之前的开发过程中,遇到video_player播放视频,通过查看video_player插件描述,可以看到video_player在Android端使用exoplayer,在iOS端…...
React组件
一、React组件 函数组件 // 函数组件 // 组件的名称必须首字母大写 // 函数组件必须有返回值 如果不需要渲染任何内容,则返回 null function HelloFn () {return <div>这是我的第一个函数组件!</div> }// 定义类组件 function App () {return (<di…...
[动手学深度学习]注意力机制Transformer学习笔记
动手学深度学习(视频):68 Transformer【动手学深度学习v2】_哔哩哔哩_bilibili 动手学深度学习(pdf):10.7. Transformer — 动手学深度学习 2.0.0 documentation (d2l.ai) 李沐Transformer论文逐段精读&a…...
hadoop集群安装并配置
文章目录 1.安装JDK 环境2.系统配置2.1修改本地hosts文件2.2创建hadoop 用户2.2 设置ssh免密(使用hadoop 用户生成) 3.安装 hadoop 3.2.43.1 安装hadoop3.1.1 配置Hadoop 环境变量 3.2配置 HDFS3.2.1 配置 workers 文件3.2.2 配置hadoop-env.sh3.2.3 配置…...
Quarto 入门教程 (3):代码框、图形、数据框设置
简介 本文是《手把手教你使用 Quarto 构建文档》第三期,前两期分别介绍了: 第一期 介绍了Quarto 构建文档的原理;可创建的文档类型;对应的参考资源分享。 第二期 介绍了如何使用 Quarto,并编译出文档(PDF…...
虚拟机Ubuntu18.04安装对应ROS版本详细教程!(含错误提示解决)
参考链接: Ubuntu18.04安装Ros(最新最详细亲测)_向日葵骑士Faraday的博客-CSDN博客 1.4 ROS的安装与配置_哔哩哔哩_bilibili ROS官网:http://wiki.ros.org/melodic/Installation/Ubuntu 一、检查cmake 安装ROS时会自动安装旧版的Cmake3.10.2。所以在…...
#力扣:14. 最长公共前缀@FDDLC
14. 最长公共前缀 一、Java class Solution {public String longestCommonPrefix(String[] strs) {for (int l 0; ; l) {for (int i 0; i < strs.length; i) {if (l > strs[i].length() || strs[i].charAt(l) ! strs[0].charAt(l)) return strs[0].substring(0, l);}…...
Android 13.0 解锁状态下禁止下拉状态栏功能实现
1.前言 在13.0的系统定制化开发中,在关于一些systemui下拉状态栏的定制化功能开发中,对于关于systemui的下拉状态栏 是否可以下拉做了定制,用系统属性来判断是否可以在解锁的情况下可以下拉状态栏布局,虽然11.0 12.0和13.0的关于 下拉状态栏相关分析有区别,可以通过分析相…...
chromium线程模型(1)-普通线程实现(ui和io线程)
通过chromium 官方文档,线程和任务一节我们可以知道 ,chromium有两类线程,一类是普通线程,最典型的就是io线程和ui线程。 另一类是 线程池线程。 今天我们先分析普通线程的实现,下一篇文章分析线程池的实现。ÿ…...
uniapp uni.showToast 一闪而过的问题
问题:在页面跳转uni.navigateBack()等操作的前或后,执行uni.showToast,即使代码中设置2000ms的显示时间,也会一闪而过。 解决:用setTimeout延后navigateBack的执行。...
代理模式介绍及具体实现(设计模式 三)
代理模式是一种结构型设计模式,它允许通过创建一个代理对象来控制对另一个对象的访问 实例介绍和实现过程 假设我们正在开发一个电子商务网站,其中有一个商品库存管理系统。我们希望在每次查询商品库存之前,先进行权限验证,以确…...
【18】c++设计模式——>适配器模式
c的适配器模式是一种结构型设计模式,他允许将一个类的接口转换成另一个客户端所期望的接口。适配器模式常用于已存在的,但不符合新需求或者规范的类的适配。 在c中实现适配器模式时,通常需要一下几个组件: 1.目标接口(…...
mariadb 错误日志中报错:Incorrect definition of table mysql.column_stats:
数据库错误日志出现此错误原因是因为系统表中字段类型或者数据结构有变动导致,一般是因为升级数据库版本后未同步升级系统表结构。 解决方法: 1.如果错误日志过大,直接删除。 2.执行 mysql_upgrade -u[用户名] -p[密码];,这一步…...
【SpringBoot】多环境配置和启动
环境分类,可以分为 本地环境、测试环境、生产环境等,通过对不同环境配置内容,来实现对不同环境做不同的事情。 SpringBoot 项目,通过 application-xxx.yml 添加不同的后缀来区分配置文件,启动时候通过后缀启动即可。 …...
跨qml通信
****Commet.qml //加载其他文件中的组件 不需要声明称Component //1.用loader.item.属性 访问属性 //2.loader.item.方法 访问方法 //3.用loader.item.方法.connect(槽)连接信号 Item { Loader{ id:loader; width: 200; …...
力扣-404.左叶子之和
Idea attention:先看清楚题目,题目说的是左叶子结点,不是左结点【泣不成声】 遇到像这种二叉树类型的题目呢,我们一般还是选择dfs,然后类似于前序遍历的方式加上判断条件即可 AC Code class Solution { public:void d…...
网站开发去哪里找程序员/项目外包平台
版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢! 本文网址:https://sunkuan.blog.csdn.net/article/details/111676037 文章目录 一、uni指令二、数据绑定三、事件的使用本篇博客主要讲解 uni-app 的中指令、数据绑定及事件的使用,只要有 Vue 基…...
微网站做下载链接/成都优化官网公司
在前面一篇文章中介绍了fastfds的简单安装和文件上传功能,以及使用fastdfs自带的http下载功能等;本文中将介绍如何使用fastdfs-apache-module模块整合fastdfs和apahce;整合完毕后,客户端访问apache,apache根据配置&…...
什么网站可以做公共基础知识/河南网站优化
我想说 Java 的「闭包」很蛋疼... 被闭包引用的「域外」变量只能是 final 的,而且可读性很差,引用 guava的一个例子,自己比较下:「二比青年版」:Multiset lengths HashMultiset.create(FluentIterable.from(strings).…...
个人网页设计师/长沙百度快速优化排名
Ⅰ、概述 打开上一篇文章新建的工程,是提取的ST标准库里面源代码文件和UCOS工程包源代码文件。下载过的朋友可能会知道,直接编译那个工程会有大片的错误和警告,原因在于那个工程是没有经过修改源代码的工程,接下来就是讲述一步一步…...
浙江华临建设集团有限公司网站/seo行业网
天龙八部(武侠世界)的源码很可能是天龙八部代码流出后改写的,因为在看了代码中可以找到一些证据,整个客户端分为:一个是编辑器,一个是客户端,采用OGREcegui自写的简单的物理碰撞检测FMOD自写的网络库。 服务器端代码目…...
手机网页制作与网站建设/河北seo推广公司
由于TC2和TC3都有可能用到,个人推荐都安装,但是注意必须是先安装的TwinCAT2,然后安装TwinCAT3,如果反了可能两个都没法用(打开TcSwitchRuntime提示Both TwinCAT are activated,这样你一个也无法禁用&#x…...