tailwindcss 官网(五)核心概念:添加新的功能类、函数与指令(@tailwind、@apply、!important、@layer、@variants、@responsive、 theme()、 @screen)、px、em、rem

文章目录

  • tailwindcss 官网(五)核心概念:添加新的功能类、函数与指令(@tailwind、@apply、!important、@layer、@variants、@responsive、 theme()、 @screen)、px、em、rem
    • 1. 添加新的功能类
      • 使用 CSS
        • 生成响应式变体
        • 生成深色模式变体
        • 生成状态变体
      • 使用插件
    • 2. 函数与指令
      • @tailwind
      • @apply
      • @layer
      • @variants
      • @responsive
      • @screen
      • theme()
    • 3. px、em、rem
      • PX
      • EM
      • REM
      • px 与 rem 的选择?

官网:安装 - Tailwind CSS 中文文档

  • !important

    • 这个属性可以让浏览器优选执行这个语句,加上!importanrt可以覆盖父级的样式。

1. 添加新的功能类

使用您的自定义功能类来扩展 Tailwind。

尽管 Tailwind 提供了相当全面的开箱即用的功能类集,您仍可能会遇到需要添加一些自己的功能类的情况。

确定扩展框架的最佳方法非常不易,因此这里有一些最佳实践,可以帮助您以最惯用的方式添加自己的功能类。


使用 CSS

将自己的功能类添加到 Tailwind 的最简单的方式是直接添加到您的 CSS 中。

@tailwind base;
@tailwind components;
@tailwind utilities;@layer utilities {.scroll-snap-none {scroll-snap-type: none;}.scroll-snap-x {scroll-snap-type: x;}.scroll-snap-y {scroll-snap-type: y;}
}

通过使用 @layer 指令, Tailwind 将自动把这些样式移动到 @tailwind utilities 相同的位置,以避免出现意外的未知问题。

使用 @layer 指令也会指示 Tailwind 在清除 功能类 层时考虑这些样式。阅读我们的 生产优化文档以了解更多信息。

生成响应式变体

如果您想根据您的 tailwind.config.js 定义的断点创建功能类的变体,请将您的功能类放在 @variants 指令中,并把 responsive 添加到变体列表中。

@tailwind base;
@tailwind components;
@tailwind utilities;@layer utilities {@variants responsive {.scroll-snap-none {scroll-snap-type: none;}.scroll-snap-x {scroll-snap-type: x;}.scroll-snap-y {scroll-snap-type: y;}}
}

Tailwind 将自动生成每个自定义功能类的前缀版本,您可以有条件地应用这些样式到不同的断点上:

<!-- Use `scroll-snap-type: none` by default, then use `scroll-snap-type: x` on medium screens and up -->
<div class="scroll-snap-none md:scroll-snap-x"></div>

在 响应式设计文档 了解更多响应式功能类的信息。

生成深色模式变体

如果您想生成您自己的功能类的 dark mode variants,首先确保在您的 tailwind.config.js 文件中 darkMode 被设置为 media 或者 class

// tailwind.config.js
module.exports = {darkMode: 'media'// ...
}

下一步,将您的功能类放在 @variants 指令中,并且把 dark 添加到变体列表中。

@tailwind base;
@tailwind components;
@tailwind utilities;@layer utilities {@variants dark {.filter-none {filter: none;}.filter-grayscale {filter: grayscale(100%);}}
}

Tailwind 将自动生成每个自定义功能类的前缀版本,您可以有条件地应用这些样式到不同的状态上:

<div class="filter-grayscale dark:filter-none"></div>

在 响应式设计文档 中了解更多关于响应式功能类的信息。

生成状态变体

如果您想为您的功能类生成 状态变体,请将您的功能类放在 @variants 指令中,并列出您想启用的变体:

@tailwind base;
@tailwind components;
@tailwind utilities;@layer utilities {@variants hover, focus {.filter-none {filter: none;}.filter-grayscale {filter: grayscale(100%);}}
}

Tailwind 将自动生成每个自定义功能类的前缀版本,您可以有条件地应用这些样式到不同的状态上:

<div class="filter-grayscale hover:filter-none"></div>

状态变体的生成顺序与您在 @variants 指令中列出的顺序相同,因此,如果您希望一个变体优先于另一个变体,请确保这个变体最后被列出:

/* Focus will take precedence over hover */
@variants hover, focus {.filter-grayscale {filter: grayscale(100%);}/* ... */
}/* Hover will take precedence over focus */
@variants focus, hover {.filter-grayscale {filter: grayscale(100%);}/* ... */
}

在 状态变体文档 中了解更多关于状态变体的信息。


使用插件

除了直接在 CSS 文件中添加新的功能类外,您还可以通过编写自己的插件将功能类添加到 Tailwind :

// tailwind.config.js
const plugin = require('tailwindcss/plugin')module.exports = {plugins: [plugin(function({ addUtilities }) {const newUtilities = {'.filter-none': {filter: 'none',},'.filter-grayscale': {filter: 'grayscale(100%)',},}addUtilities(newUtilities, ['responsive', 'hover'])})]
}

如果您想把您的自定义功能类作为一个库发布,或者使其更容易跨项目分享,这是一个不错的选择。

在 功能插件文档 中了解更多信息。

2. 函数与指令

Tailwind 向您的 CSS 的暴露的函数和指令的参考说明。

@tailwind

使用 @tailwind 指令向您的 CSS 添加 Tailwind 的 base, components, utilitiesscreens 样式。

/*** 这会注入 Tailwind 的基本样式和插件注册的任何基本样式。*/
@tailwind base;/*** 这会注入 Tailwind 的组件类和插件注册的任何组件类。*/
@tailwind components;/*** 这会注入 Tailwind 的实用程序类和插件注册的任何实用程序类。*/
@tailwind utilities;/*** 使用此指令来控制 Tailwind 在何处注入每个实用程序的响应变体。* 如果省略,Tailwind 将默认将这些类附加到样式表的最后。*/
@tailwind screens;

@apply

使用 @apply 将任何现存的功能类内联到您的自定义 CSS 中。

当您在您的 HTML 里找到您想要提取到一个新组件的通用的功能模式时,这非常有用。

.btn {@apply font-bold py-2 px-4 rounded;
}
.btn-blue {@apply bg-blue-500 hover:bg-blue-700 text-white;
}

注意,类是根据其在原始 CSS 中的位置而不是根据在 @apply 指令之后列出它们的顺序来应用的。这是为了确保使用 @apply 提取类列表时得到的行为与直接在 HTML 中列出的类的行为相匹配。

/* Input */
.btn {@apply py-2 p-4;
}/* Output */
.btn {padding: 1rem;padding-top: 0.5rem;padding-bottom: 0.5rem;
}

如果您要对功能类的应用顺序进行细粒度的控制,请使用多个 @apply 语句:

/* Input */
.btn {@apply py-2;@apply p-4;
}/* Output */
.btn {padding-top: 0.5rem;padding-bottom: 0.5rem;padding: 1rem;
}

您还可以将 @apply 声明与常规 CSS 声明混合使用:

/* Input */
.btn {transform: translateY(-1px);@apply bg-black;
}/* Output */
.btn {background-color: #000;transform: translateY(-1px);
}

默认情况下,任何使用 @apply 内联的规则中的 !important 将被删除,以避免出现特异性问题。

/* Input */
.foo {color: blue !important;
}.bar {@apply foo;
}/* Output */
.foo {color: blue !important;
}.bar {color: blue;
}

如果您想使用 @apply 内联一个已经存在的类,并且为其设置 !important,只需要把 !important 添加到声明的结尾即可。

/* Input */
.btn {@apply font-bold py-2 px-4 rounded !important;
}/* Output */
.btn {font-weight: 700 !important;padding-top: .5rem !important;padding-bottom: .5rem !important;padding-right: 1rem !important;padding-left: 1rem !important;border-radius: .25rem !important;
}

注意,如果您使用的是 Sass/SCSS,则您需要使用 Sass 的插值功能才能使其正常工作。

.btn {@apply font-bold py-2 px-4 rounded #{!important};
}

@layer

使用 @layer 指令告诉 Tailwind 一组自定义样式应该属于哪个 “bucket”。可用的层有 base, componentsutilities

@tailwind base;
@tailwind components;
@tailwind utilities;@layer base {h1 {@apply text-2xl;}h2 {@apply text-xl;}
}@layer components {.btn-blue {@apply bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded;}
}@layer utilities {@variants hover, focus {.filter-none {filter: none;}.filter-grayscale {filter: grayscale(100%);}}
}

Tailwind会自动将 @layer 指令中的所有 CSS 移至与相应 @tailwind 规则相同的位置,因此您不必担心以特定顺序编写 CSS 来避免特定性问题。

@layer 指令中包装的任何自定义 CSS 也会告诉 Tailwind 在清除该层时考虑那些样式。阅读 关于生产优化的文档 来了解更多详情。


@variants

您可以通过在 @variants 指令中声明自己的功能类来生成他们的 responsive, hover, focus, active 及其它 变体。

@variants focus, hover {.rotate-0 {transform: rotate(0deg);}.rotate-90 {transform: rotate(90deg);}
}

这将生成以下 CSS:

.rotate-0 {transform: rotate(0deg);
}
.rotate-90 {transform: rotate(90deg);
}.focus\:rotate-0:focus {transform: rotate(0deg);
}
.focus\:rotate-90:focus {transform: rotate(90deg);
}.hover\:rotate-0:hover {transform: rotate(0deg);
}
.hover\:rotate-90:hover {transform: rotate(90deg);
}

请务必注意,变体是按照您指定的顺序生成的。

例如,如果您希望 focus 功能类优先于 hover 功能类,请确保列表中的 focus 应该在 hover 之后:

/* Input */
@variants hover, focus {.banana {color: yellow;}
}/* Output */
.banana {color: yellow;
}
.hover\:banana:hover {color: yellow;
}
.focus\:banana:focus {color: yellow;
}

@variants 规则支持您配置文件中 variants 部分支持的所有值,以及通过插件添加的 自定义变体。


@responsive

您可以通过在 @responsive 指令中声明他们的定义来生成您自己的类的响应式变体。

@responsive {.bg-gradient-brand {background-image: linear-gradient(blue, green);}
}

这是 @variants responsive { ... } 的简写方式,同样起作用。

使用默认断点,这将生成以下类:

.bg-gradient-brand {background-image: linear-gradient(blue, green);
}/* ... */@media (min-width: 640px) {.sm\:bg-gradient-brand {background-image: linear-gradient(blue, green);}/* ... */
}@media  (min-width: 768px) {.md\:bg-gradient-brand {background-image: linear-gradient(blue, green);}/* ... */
}@media (min-width: 1024px) {.lg\:bg-gradient-brand {background-image: linear-gradient(blue, green);}/* ... */
}@media (min-width: 1280px) {.xl\:bg-gradient-brand {background-image: linear-gradient(blue, green);}/* ... */
}

响应式变体将在您的样式表的结尾被添加到 Tailwind 的已经存在的媒体查询中。这将确保那些带有响应式前缀的类优先级会高于同样 CSS 属性的非响应式的类。


@screen

@screen 指令允许您创建通过名称引用断点的媒体查询,而不是在您的 CSS 中复制他们的值。

例如,假设有一个名为 sm640px 的断点,您只需要写一些自定义的指向这个断点的 CSS。

而不是编写一个复制那些值的原始的媒体查询,如下所示:

@media (min-width: 640px) {/* ... */
}

…您可以使用 @screen 指令,然后根据名称引用这个断点:

@screen sm {/* ... */
}

theme()

使用 theme() 函数可以通过点符号来获取 Tailwind 配置的值。

当您想要引用一个您主题配置中的一部分声明的值时,这是一个 @apply 的有用的替代方式。

.content-area {height: calc(100vh - theme('spacing.12'));
}

如果您想获取一个含有点的值(像间距比例中的 2.5),则可以使用方括号。

.content-area {height: calc(100vh - theme('spacing[2.5]'));
}

因为 Tailwind 使用 嵌套对象语法 来定义其默认调色板,因此请确保使用点符号来访问嵌套的颜色。

获取嵌套的颜色值时不要使用破折号语法

.btn-blue {background-color: theme('colors.blue-500');
}

使用点符号获取嵌套的颜色值

.btn-blue {background-color: theme('colors.blue.500');
}

3. px、em、rem

PX

px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。

PX特点

  • \1. IE无法调整那些使用px作为单位的字体大小;
  • \2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位;
  • \3. Firefox能够调整px和em,rem,但是96%以上的中国网民使用IE浏览器(或内核)。

EM

em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。

EM特点

  • \1. em的值并不是固定的;
  • \2. em会继承父级元素的字体大小。

**注意:**任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了。

所以我们在写CSS的时候,需要注意两点:

  • \1. body选择器中声明Font-size=62.5%;
  • \2. 将你的原来的px数值除以10,然后换上em作为单位;
  • \3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明。

也就是避免1.2 * 1.2= 1.44的现象。比如说你在#content中声明了字体大小为1.2em,那么在声明p的字体大小时就只能是1em,而不是1.2em, 因为此em非彼em,它因继承#content的字体高而变为了1em=12px。

REM

rem是CSS3新增的一个相对单位(root em,根em),这个单位引起了广泛关注。这个单位与em有什么区别呢?区别在于使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。这个单位可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。目前,除了IE8及更早版本外,所有浏览器均已支持rem。对于不支持它的浏览器,应对方法也很简单,就是多写一个绝对单位的声明。这些浏览器会忽略用rem设定的字体大小。下面就是一个例子:

p {font-size:14px; font-size:.875rem;}

注意: 选择使用什么字体单位主要由你的项目来决定,如果你的用户群都使用最新版的浏览器,那推荐使用rem,如果要考虑兼容性,那就使用px,或者两者同时使用。

px 与 rem 的选择?

对于只需要适配少部分手机设备,且分辨率对页面影响不大的,使用px即可 。

对于需要适配各种移动设备,使用rem,例如只需要适配iPhone和iPad等分辨率差别比较挺大的设备。

tailwindcss 官网(五)核心概念:添加新的功能类、函数与指令(@tailwind、@apply、!important、@layer、@variants、 theme())、px、em、rem相关推荐

  1. tailwindcss 官网(六)定制:配置( `tailwind.config.js `、-p、important、核心插件、`resolveConfig`)、主题 `theme` 配置

    tailwindcss 官网(六)定制:配置( tailwind.config.js.-p.important.核心插件.resolveConfig).主题 theme 配置 文章目录 tailwin ...

  2. Vue3核心概念、新特性及与Vue2的区别

    大家好,我是前端岚枫,一枚二线城市的程序媛,上篇主要跟分享了<VUE系列-Vue中组件的应用(三)>,今天主要跟大家分享我整理的vue3的相关核心概念及其新特性,与Vue3的区别,主要包括 ...

  3. tailwindcss 官网(二)生产优化(purge)、浏览器支持、智能感知

    tailwindcss 官网(二)生产优化(purge).浏览器支持.智能感知 文章目录 tailwindcss 官网(二)生产优化(purge).浏览器支持.智能感知 1. 生产优化 概览 编写可清 ...

  4. 爬虫实战6:爬取英雄联盟官网五个位置的综合排行榜保存到excel

    申明:资料来源于网络及书本,通过理解.实践.整理成学习笔记. 文章目录 英雄联盟官网 获取一个位置的综合排行榜所有数据(上单为例) 获取所有位置的综合排行榜所有数据 英雄联盟官网 获取一个位置的综合排 ...

  5. vue2 + vuex 高度还原 饿了么 App,用真实数据登陆官网,并实现购物车、下单功能

    前言 vue2的发布后自己也研究了一段时间,奈何公司的技术栈是以react为主,没有机会好好利用vue2去做一个完整的项目.虽然写了几个demo,但和写一个完整的项目还是有很大差别的.于是自己想着用空 ...

  6. Objective-C 编程语言官网文档(二)-对象,类以及消息

    声明:本文档仅为个人学习过程中顺手翻译之作,方便开发的同胞借鉴参考.如有觉得译的不好不到位的地方,欢迎指正,将及时做出更正 尽量尊重原文档,因为首次Objective-C,有些地方可能直译了没有注意该 ...

  7. 官网消息【iPlayer外挂字幕】功能开发中!有图

    刚才逛着官方网看到的,发现iPlayer官网更新了首页.增加了新闻动态的版块.以下是官网原文 ,该来的还是会来的,偶刚刚买了一周感觉字幕的确需要个清晰的,不然有些大分辨率的电影看起来字幕还是有点吃力. ...

  8. linux系统内核官网,五年26个版本:Linux系统内核全程回顾

    五年26个版本:Linux系统内核全程回顾 出处:快科技 2010-11-04 16:53:56     作者:上方文Q 编辑:上方文Q[爆料] 收藏文章 Phoronix.com今天将他们对Linu ...

  9. 博弈Ai官网ChatGPT4和3.5的真实功能测评

    生活是我们每个人都必须面对的现实.它涵盖了各种方面,包括我们的工作.家庭.朋友和爱好等等.在这个充满挑战和机遇的世界中,我们必须学会如何平衡自己的需求和责任,并适应不断变化的环境.无论你处于生命的哪个 ...

最新文章

  1. php是否区分大小写
  2. 类对象和类指针深入分析与对比
  3. NLP、CV、ML全覆盖,这份私藏论文清单你一定要看看
  4. 每天都用手机,你对麦克风了解吗?
  5. 29th, Dec 2011 求人不如求己
  6. 使用JQuery快速高效制作网页交互特效第六章课后
  7. Alexa技能开发从创建到发布
  8. html看汉字选拼音小游戏
  9. visio2013如何画箭头
  10. android 测试 内存,Android性能测试之内存(二)
  11. java微服务Nacos配置管理
  12. sql 分组求和 、分组求平均
  13. 中国电热水器行业发展现状及趋势分析,头部厂商市场份额进一步上升「图」
  14. 中科红旗开始新一轮招聘,服务器、桌面研发工程师、测试工程师
  15. centos7安装并使用licode四:下载licode并使用
  16. 快乐想象识字法最新破解注册完美版
  17. 教师资格证计算机科目有哪些内容,中学教师资格证的具体考试科目都有哪些?...
  18. 怎么把PNG格式图片转JPG格式?教你一键转换格式的方法
  19. 如何用maya 渲染论文彩图 (occulusion效果)
  20. 论文笔记notion模板

热门文章

  1. CF Round #679 div2赛后总结
  2. 你需要选择一个什么样的浏览器?
  3. position: fixed如何相对父元素定位
  4. 【数字图像处理】基于opencv的图像采集与拼接
  5. 086《拆掉思维里的墙》简记
  6. 怎么剪切酷狗下载的音乐音频
  7. PHP fuser,HP-UX中umount文件系统时报device busy--之fuser用法
  8. image soure相机的snap采图方式
  9. windows10/11自带的重装方法
  10. IDEA怎么在单独的窗口显示差异和并排两排显示代码?