首页 > 其他分享 >css用户体验

css用户体验

时间:2023-02-25 22:34:12浏览次数:47  
标签:box right 用户 label background 体验 position shadow css

选择适合的鼠标光标

禁用光标

cursor: not-allowed;

隐藏光标

cursor: url('transparent.gif');
cursor: none;

扩大可点击区域

伪元素:

button {
  position: relative;
}

button::before {
  content: '';
  position: absolute;
  top: -10px;
  left: -10px;
  right: -10px;
  bottom: -10px;
}

自定义复选框

自定义复选框

<input type="checkbox" id="awesome"/>
<label for="awesome">awesome</label>
input[type="checkbox"] {
  position: absolute;
  clip: rect(0, 0, 0, 0);
}
input[type="checkbox"] + label {
  cursor: pointer;
}
input[type="checkbox"] + label::before {
  content: '\a0';
  display: inline-block;
  vertical-align: .2em;
  width: 1em;
  height: 1em;
  margin-right: .2em;
  border-radius: .2em;
  background: silver;
  text-indent: .15em;
  line-height: .65;
  cursor: pointer;
}
input[type="checkbox"]:checked + label::before {
  content: '\2713';
  background: yellowgreen;
}
input[type="checkbox"]:hover + label::before {
  box-shadow: 0 0 .1em .1em #58a;
}

开关式按钮

<input type="checkbox" id="awesome1"/>
<label for="awesome1">awesome</label>
#awesome1 {
	position: absolute;
	clip: rect(0,0,0,0);
}

#awesome1 + label {
	display: inline-block;
	padding: .35em .5em .2em;
	background: #ccc;
	background-image: linear-gradient(#ddd, #bbb);
	border: 1px solid rgba(0,0,0,.2);
	border-radius: .3em;
	box-shadow: 0 1px white inset;
	text-align: center;
	text-shadow: 0 1px 1px white;
	cursor: pointer;
}

#awesome1:checked + label,
#awesome1:active + label {
	box-shadow: .04em .1em .2em rgba(0,0,0,.6) inset;
	border-color: rgba(0,0,0,.3);
	background: #bbb;
}

通过阴影弱化背景

遮罩层

.overlay {
  position: fixed;
  top: 0;
  right: 0;
  left: 0;
  right: 0;
  background-color: rgba(0, 0, 0, .8);
}
.dialog {
  position: absolute;
  z-index: 1;
}

伪元素方案

.dialog::before {
  content: '';
  position: fixed;
  top: 0;
  right: 0;
  left: 0;
  right: 0;
  background-color: rgba(0, 0, 0, .8);
  z-index: -1;
}

存在问题:
点击背景层关闭,对于这种实现起来比较麻烦

box-shadow方案

box-shadow: 0 0 0 50vmax rgba(0,0,0,.8);
position: fixed; // 为了防止滚动页面时遮罩层弹出

存在问题:
box-shadow 只是能引起视觉上的效果 无法阻止鼠标交互(弹出层外背景中的元素仍能被点击)

backdrop方案

dialog::backdrop {
  backgroud: rgba(0,0,0,.8)
}

存在问题:
浏览器不完全支持

通过模糊来弱化背景

main.de-emphasized {
  filter: blur(5px);
}

模糊和阴影结合

main.de-emphasized {
  filter: blur(5px) contrast(.8px) brightness(.8);
}

如果浏览器不支持,看不到任何效果,最好加上box-shadow作为浏览器回退方案。

如果还需支持鼠标在该背景区域上无法交互,使用遮罩层+filter的方式。

滚动提示

在移动端用的比较多,支持向上滚动头部显示“提示”,支持向下滚动底部显示“提示”

  • Ada Catlace
  • Alan Purring
  • Schrödingcat
  • Tim Purrners-
  • Lee
  • Webkitty
  • json
  • void
  • Tim Purrners-
  • Lee
  • Webkitty
  • json
  • void

代码可参考:https://dabblet.com/gist/20205b5fcdd834461e80

交互式的图片对比控件

css Resize 方案

<div class="image-slider">
  <div>
    <img src="/i/l/?n=23&i=blog/3116094/202302/3116094-20230225214134054-1457803797.jpg" alter="before"/>
  </div>
  <img src="/i/l/?n=23&i=blog/3116094/202302/3116094-20230225214134054-1457803797.jpg" alter="after"/>
</div>
.image-slider {
  position: relative;
  display: inline-block;
}
.image-slider > div {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 50%;
  height: 100%;
  overflow: hidden;
  resize: horizontal;
  max-width: 100%; // 防止拉动调节手柄后超出图片大小
}

除此之外,还能通过伪元素改变调节手柄的大小

.image-slider > div::before {
  content: '';
  position: absolute;
  right: 0;
  bottom: 0;
  width: 12px;
  height: 12px;
  padding: 5px;
  background:
    linear-gradient(-45deg, white 50%, transparent);
  background-clip: content-box;
  cursor: ew-resize;
}
.image-slider img {
  display: block;
  user-select: none; // 防止没有点击调节手柄 拖动鼠标 误选图片的情况
}

范围输入控件方案

<input type="range"/>

然后监听Input的值,动态改变第一张图片的宽度。略。
比较推荐这种方案,浏览器支持度更高,不过需要编写额外的js代码。

标签:box,right,用户,label,background,体验,position,shadow,css
From: https://www.cnblogs.com/duanlvxin/p/17155445.html

相关文章