CSS交互
元素外观appearance
CSS3中appearance
属性用于设置元素模仿系统原生控件的外观
appearace: normal | icon | window | button | menu | field
属性值 | 描述 |
---|---|
normal | 设置元素外观为常规元素 |
icon | 设置元素外观呈现为图标或小图片 |
window | 设置元素外观呈现为窗口 |
button | 设置元素外观呈现为按钮 |
menu | 设置元素外观呈现为一套供用户选择的菜单 |
field | 设置元素外观呈现为输入字段 |
Tailwind提供了.appearance-none
工具类用于禁用 元素模仿系统原生控件的外观
工具类 | 属性 |
---|---|
.appearance-none | appearance:none; |
光标外观cursor
CSS的cursor
属性用于规定显示光标的类型或形状,Tailwind提供以.cursor-
前缀的工具类用于控制贯标的显示。
工具类 | 属性 | 描述 |
---|---|---|
.cursor-auto | cursor:auto; | 默认,浏览器设置的光标。 |
.cursor-default | cursor:default; | 默认光标显示为一个箭头 |
.cursor-pointer | cursor:pointer; | 光标呈现为指示链接的指针,即一只小手的图标。 |
.cursor-wait | cursor:wait; | 光标指示某对象可被移动 |
.cursor-text | cursor:wait; | 光标指示为文本 |
.cursor-move | cursor:move; | 光标指示某对象可被移动 |
.cursor-not-allowed | cursor:not-allowed; | 禁用光标指示效果 |
轮廓线条outline
CSS中outline
属性用于绘制元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用。轮廓线不会占据空间,也不一定是矩形。
outline
属性的实际包含三个子属性
outline: outline-color outline-style outline-width;
子属性 | 描述 |
---|---|
outline-color | 设置轮廓线的颜色 |
outline-style | 设置轮廓线的样式 |
outline-width | 设置轮廓线的宽度 |
outline
轮廓线与border
边框线不同之处在于,outline
轮廓线并不会增加边框的宽度,也就是说outline
不会占据布局空间,也不会影响元素的尺寸。
Tailwind为轮廓线新增了.outline-none
工具类,用于移除浏览器默认的轮廓线和元素聚焦效果。
工具类 | 属性 |
---|---|
.outline-none | outline:0; |
指针事件pointer events
CSS中pointer-events
指针事件属性是一个与JavaScript相关的属性,即指定在何种情况下特定图形元素可以设置成为鼠标事件的target
目标。
pointer-events: auto | none | visiblepainted | visiblefill | visiblestroke | visible | painted | fill |stroke | all;
使用pointer-events
属性用来设置事件穿透,即如果给父元素设置了pointer-events:none
属性,那么父元素将不再监听鼠标事件。
pointer-events:none;
当设置元素的pointer-events
属性为none
后会产生如下特性
- 阻止用户点击动作产生的任何效果
- 阻止缺省鼠标指针的显示
- 阻止CSS中的
hover
和active
状态的变化以触发事件 - 阻止JavaScript点击动作触发的事件
使用场景
当页面中使用canvas
绘制雨雪效果,为了避免这些悬浮物遮挡页面而影响鼠标点击,可使用pointer-events:none
,设置悬浮物上方的canvas
画布不会遮挡鼠标事件,让鼠标事件可以穿透上方的canvas
画布来点击页面。
注意事项
- 当设置
pointer-events:none
时,如果元素是绝对定位的,那在它下一层的元素可以被选中。 - 设置
pointer-events:none
只是用来禁用鼠标事件,可通过其它方式绑定的事件还是会触发的,比如键盘事件等。 - 如果将元素的子元素的
pointer-events
设置成非none
值,当点击子元素是会通过事件冒泡的方式触发父级元素的事件。
设置元素的pointerr-events
属性来阻止元素成为鼠标事件目标,并不一定意味着元素上的事件监听器永远不会触发。如果元素后代明确指定了pointer-events
属性并允许其成为鼠标事件的目标,那么指向该元素的任何事件在事件传播过程中都将通过父元素,并以适当的方式触发其上的事件监听器。当然,位于父元素但不再后代元素上的鼠标活动都不会被父元素和后代元素捕获,因为鼠标活动将会传过父元素而指向位于其下的元素。
Tailwind为pointer-events
属性提供了两个常用的工具类
工具类 | 属性 |
---|---|
.pointer-events-none | pointer-events:none; |
.pointer-events-auto | pointer-events:auto; |
- 使用
.pointer-events-auto
工具类可以还原指针事件为默认的浏览器行为 - 使用
.pointer-events-none
工具类可以使元素忽略指针事件,但指针事件仍将会在子元素上触发并出传递到低于目标的元素。
例如:自定义选项组件
<link href="https://unpkg.com/tailwindcss/dist/tailwind.min.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/js/all.min.js" integrity="sha256-KzZiKy0DWYsnwMF+X1DvQngQ2/FxF7MF3Ff72XcpuPs=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.min.js" defer></script>
<div class="container mx-auto my-12">
<!--pointer-events-auto-->
<div class="relative overflow-hidden mb-4">
<select name="" class="block appearance-none px-4 py-3 pr-8 w-full bg-gray-100 border-l border-gray-200 rounded leading-tight text-gray-700 focus:outline-none focus:bg-white focus:border-gray-500">
<option value="">pointer-events-auto</option>
<option value="">appearance-none</option>
<option value="">outline-none</option>
</select>
<div class="absolute inset-y-0 right-0 px-3 bg-gray-300 rounded-r text-gray-700 flex items-center appearance-none pointer-events-auto">
<i class="fas fa-angle-down fill-current w-4 h-4"></i>
</div>
</div>
<!--pointer-events-none-->
<div class="relative overflow-hidden mb-4">
<select name="" class="block appearance-none px-4 py-3 pr-8 w-full bg-gray-100 border-l border-gray-200 rounded leading-tight text-gray-700 focus:outline-none focus:bg-white focus:border-gray-500">
<option value="">pointer-events-none</option>
<option value="">appearance-none</option>
<option value="">outline-none</option>
</select>
<div class="absolute inset-y-0 right-0 px-3 bg-gray-300 rounded-r text-gray-700 flex items-center appearance-none pointer-events-none">
<i class="fas fa-angle-down fill-current w-4 h-4"></i>
</div>
</div>
</div>
源代码效果:https://codepen.io/junchow/pen/NWxRwmX?editors=1000
调整尺寸reseize
CSS的resize
属性用于指定一个元素是否可以由用户调整大小,即可以设置是否允许用户缩放页面中元素的尺寸。
resize: none | both | horizontal | vertical;
属性值 | 描述 |
---|---|
none | 默认值,禁止用户调整元素尺寸。 |
both | 允许用户可调整元素的宽度和高度 |
horizontal | 允许用户可以调整元素的宽度 |
vertical | 允许用户可以调整元素的高度 |
使用注意
-
resize
属性生效需要提前设置元素的overflow
属性,其值可以是auto
、hidden
、scroll
。 - 通过设置
max-width
和max-height
最大宽高加以限制范围 - 当为元素定义了
resize
属性后,元素的右下角会出现允许拖动的标志,用户可以点击右下角拖动来随意改变元素的尺寸。 - 为增强用户体验建议配置
cursor
属性通过设置对应的鼠标样式来增强用户体验感
例如:拖动边框缩放背景图片
<div class="resize"></div>
<style>
.resize{
background-image:url('http://source.unsplash.com/800x800');
background-repeat:no-repeat;
background-position:center;
background-clip:content;
width: 200px;
height: 200px;
max-width: 800px;
max-height:800px;
padding:10px;
border:1px solid #888;
resize:both;
overflow:auto;
}
</style>
Tailwind为resize
属性设置常用的工具类
工具类 | 属性 | 描述 |
---|---|---|
.resize-none | resize:none; | 禁止用户调整尺寸 |
.resize | resize:both; | 允许用户调整宽高尺寸 |
.resize-x | resize:horizontal; | 允许用户调整水平尺寸 |
.resizee-y | resize:vertical; | 允许用户调整垂直尺寸 |
例如:设置文本域可手动调整宽高
<link href="https://unpkg.com/tailwindcss/dist/tailwind.min.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/js/all.min.js" integrity="sha256-KzZiKy0DWYsnwMF+X1DvQngQ2/FxF7MF3Ff72XcpuPs=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.min.js" defer></script>
<div class="container mx-auto my-12 p-12 bg-gray-100">
<textarea class="border rounded resize focus:outline-none focus:shadow-outline"></textarea>
</div>
用户选中user-select
CSS3新增的user-select
属性用于设置用户是否能够选中文本,可用于除替换元素外的所有元素。
user-select: none | text | all | element;
属性值 | 描述 |
---|---|
none | 设置文本不能被选择 |
text | 默认值,设置可以选择文本。 |
all | 当内容作为整体时可被选择,若双击或在上下文上点击子元素,被选中部分将以从该子元素向上回溯到最高祖先元素。 |
element | 可选择文本,但选择范围受元素边界约束。 |
使用场景
-
user-select
之前可用来保护网站内容,不能被选择以禁止复制和转载,进而保护内容的版权,但这种做法对普通用户的体验会造成伤害,而且并不能真正的保护页面内容,通过查看源代码也可以复制。 - 当使用字体图标时,字体图标所在元素会被频繁点击时可添加
user-select:none
以防止图标字体作为文本被选择而影响使用。
Tailwind为user-select
属性提供常用工具类
工具类 | 属性 | 描述 |
---|---|---|
.select-none | user-select:none; | 禁止用户选中文本 |
.select-text | user-select:text; | 允许用户选择文本 |
.select-all | user-select:all; | 允许用户选择上下文 |
.select-auto | user-select:auto; | 自动取值 |