CSS中的选择( ::selection和user-select)
CSS中的选择( ::selection和user-select)
在网络上,我们出于不同原因选择内容,也许我们想复制文本并在某处引用它。对于移动端来说,选择内容比较难,我不喜欢在移动端选择内容。
在本文中,我将详细介绍CSS中有关选择的所有内容,包括伪类 ::selection 和 user-select。本文的目标是让你了解所有这些技术,并让你知道何时何地使用它们。
根据Mozilla开发人员网络(MDN):
::selection CSS伪元素将样式应用于用户已突出显示的文档部分(例如,在文本上单击并拖动鼠标)。
要使用 ::selection 伪类,只需执行以下操作:
p::selection {
color: #fff;
background-color: #000;
}
::selection支持的属性
值得注意的是 ::selection 仅支持 color,background 和 text-shadow 属性。
自定义选择
如果我们想要自定义选择效果怎么办?例如,控制选择的高度并具有自定义背景?见下图:
这是可能的,但有点棘手。下面是如何做到这一点的解释:
- 我们添加具有相同文本内容的伪元素。然后,我们给它一个50%的高度,并带有白色背景色。
- 伪元素位于原始文本上方。
现在,选择文本后,伪元素将垂直覆盖文本的50%。这模仿了我们所需的效果。
p {
position: relative;
color: #fff;
}
p:after {
content: attr(data-content);
position: absolute;
color: #000;
top: 0;
left: 0;
width: 100%;
height: 50%;
background-color: #fff;
}
p::selection {
background: rgba(76, 125, 225, 0.18);
}
作为另一种选择,我对上述内容进行了调整,而改用CSS渐变。这里的重点是使用白色渐变,高度为50%,并且不重复背景。
h1:after {
content: attr(data-content);
position: absolute;
color: #000;
top: 0;
left: 0;
width: 100%;
background: linear-gradient(#fff, #fff) top/100% 50% no-repeat;
}
请参见下图,以获得直观的说明。
希望现在更加清楚!请参阅CodePen上的demo。
Demo:https://codepen.io/shadeed/pen/5074964e902cd83d96e5ce7ba9ee1423?editors=1100
动画选择
在进行上一个演示时,我问自己一个问题:是否可以对选择进行动画处理?例如,当选择文本并且鼠标没有悬停时,高度为50%,而当鼠标悬停时,高度可以增加到80%。
p {
transition: background 0.3s ease-out;
}
p:hover:after {
background-size: 100% 80%;
}
多行文字
不幸的是,上述解决方案不适用于多行文字。为了使其工作,我们应该使用JavaScript将每个单词包装在一个内联元素(例如<span>)中。一旦每个字都在 <span> 元素中,就应该给每个字添加一个伪元素,也可以使用同样的技术。
请参阅以下脚本,将每个单词包装在 <span> 元素中。
let paragraph = document.querySelector(".text");
const words = paragraph.textContent.split(" ");
paragraph.innerHTML = "";
words.forEach(function (word) {
let wordItem = document.createElement("span");
wordItem.setAttribute("data-word", word);
wordItem.innerHTML = word + " ";
paragraph.appendChild(wordItem);
});
现在,你需要为每个 <span> 元素设置样式,然后为每个元素添加一个伪元素。
span {
position: relative;
font-size: 1.25rem;
line-height: 1.4;
}
span::after {
content: attr(data-word);
position: absolute;
left: 0;
right: 0;
top: -0.28em;
height: 75%;
padding-top: 0.14em;
background: #fff;
pointer-events: none;
}
span::selection {
background: rgba(#4C7DE1, 0.18);
}
此解决方案有效,但不适用于所有文本。例如,下面的文本包含一个逗号,数字,大写字母。请注意,选择在所有单词中都不一致。
我想说的是,采用多行选择风格是很棘手的,因此不应在网站上全局使用。如果仅将其用于一个段落,也许完全没问题。
Demo:https://codepen.io/shadeed/pen/c6d187eadc8251fcce7a8f85506a9ee3?editors=1100
通过 ::selection 和 text-shadow 获得创意
由于 text-shadow 是自定义选择受支持的属性之一,因此我们可以通过使用多个文本阴影来获得具有一些有趣效果的创意。
长阴影选择
p::selection {
color: #444444;
background: #ffffff;
text-shadow: 1px 0px 1px #cccccc, 0px 1px 1px #eeeeee, 2px 1px 1px #cccccc, 1px 2px 1px #eeeeee, 3px 2px 1px #cccccc, 2px 3px 1px #eeeeee, 4px 3px 1px #cccccc, 3px 4px 1px #eeeeee, 5px 4px 1px #cccccc, 4px 5px 1px #eeeeee, 6px 5px 1px #cccccc, 5px 6px 1px #eeeeee, 7px 6px 1px #cccccc;
}
轮廓文字选择
根据本文有关CSS技巧的文章,我们可以使用 text-shadow 模拟文本轮廓。
p::selection {
color: #fff;
text-shadow:
-1px -1px 0 #000,
1px -1px 0 #000,
-1px 1px 0 #000,
1px 1px 0 #000;
}
模糊选择
另一个有趣的效果是使所选文字模糊。通过使颜色 transparent,文本阴影将仍然存在并且模仿模糊效果。
p::selection {
color: transparent;
text-shadow: 0 0 3px #fff;
}
而且,我敢肯定,你可以拿出越来越多的例子。
文本阴影和性能
建议不要使用沉重的文本阴影样式,因为它们会导致性能问题。如下示例
霓虹灯效果非常沉重。请注意,在选择文本时,在我选择的时间和所选样式出现的时间之间存在一个延迟。另外,请注意顶部和左侧的故障。请小心使用 text-shadow。
CSS中的选择( ::selection和user-select)的更多相关文章
- CSS中的选择器之html选择器和伪类选择器
1.html选择器(标签选择器) 基本语法: html标签名称{ 属性名:属性值; 属性名:属性值; } 继续在上面的代码中做修改,实例代码: <!DOCTYPE html> <ht ...
- CSS中如何选择ul下li的奇数、偶数行
<style> #Ulist li:nth-of-type(odd){ margin-left: 20px;}奇数行 #Ulist li:nth-of-type(even){margin- ...
- Eclipse插件开发中的选择监听机制(Selection Provider-Listener)
Eclipse插件开发中的选择监听机制(Selection Provider-Listener) 监听机制是eclipse插件开发或rcp应用开发中经常使用的技术,比方点击TableViewer或Tr ...
- css中一些常用技巧
// css中引入字体文件 @font-face { font-family: msyh; /*这里是说明调用来的字体名字*/ src: url('../font/wryh.ttf'); /*这里是字 ...
- 关于css中伪类及伪元素的总结
css中的伪类和伪元素总是混淆,今天参考了很多资料,也查看了部分文档,现将伪类及伪元素总结如下: 一.由来: 伪类和伪元素的引入都是因为在文档树里有些信息无法被充分描述,比如CSS没有"段落 ...
- CSS中的一些内容总结
一.选择器 1.选择器的分组:一个Style可以对多个选择器生效,只用在不同的选择器中间加入逗号即可.如: h1,h2,h3,h4,h5,h6 { color: green; } PS:CSS规定,所 ...
- 纯html+css中实现静态选座位效果技巧(input+label使用小技巧)
很多时候,我们想通过html+css的方式实现排列在后方的代码在选中状态下,能控制排列在前的代码的样式.那么要怎么实现呢?在这里我就要用1个小技巧来完成. 众所周知的,我们css中的选择器通常只能向下 ...
- css3笔记系列-3.css中的各种选择器详解,不看后悔系列
点击上方蓝色字体,关注我 最详细的css3选择器解析 选择器是什么? 比较官方的解释:在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素. 最常见的 CSS 选择器是元素选择器.换句话说 ...
- CSS中一些常见的兼容性问题
CSS中一些兼容性问题就是浏览器兼容,而这些浏览器兼容问题主要是Ie和FF之间的争斗. CSS hack中的一些事: 我们为了让页面形成统一的效果,要针对不同的浏览器或不同版本写出对应可解析的CSS样 ...
- css中“~”和“>”是什么意思?
css中"~"是: 为所有相同的父元素中位于 p 元素之后的所有 ul 元素设置背景: p~ul{ background:#ff0000; } <p>快乐生活&l ...
随机推荐
- Tensorflow 1.X 在windows上的安装
参考:https://blog.csdn.net/weixin_42326479/article/details/105539110 pip install -i https://pypi.douba ...
- pip使用阿里云镜像
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ pip config set install.trust ...
- 安装pytorch报错 ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device
windos安装,报错如下 看了不少回答,大概是缓存和内存满了 我的C盘只给了70G,然后意外发现只剩下3G多了,先用系统自带的清理工具清理了一下,然后腾讯电脑管家"工具箱"中的& ...
- Android悬浮窗全屏不获取焦点但是可以漏出软键盘的办法
addFlags( WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);的作用是在不获取焦点的时候显示软键盘. 接触这个标记 getWindow().c ...
- nodejs 后台运行 forever
一.安装nodejs //安装必要的make以及gcc,gcc-c++编译器 yum -y install make gcc gcc-c++ //获取源码 wget http://nodejs.org ...
- 小程序-扩展能力图片上传Uploader组件
微信小程序中有一些扩展组件可以用,例如其中的图片上传组件,不论样式还是上传时的动画,都比较好,在使用过程中也遇到了一些问题,在这记录一下,也期望能让后来用的人少走弯路. 第一步,首先访问网址,http ...
- vue+element form 动态改变rules校验数据
优化:确定secondRules的数据在secondFlag改变之前进行赋值 可以用$nextTick来执行,不用setTimeOut ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
- .NET 6 + Hangfire 实现后台作业管理
一.环境: ASP.NET Core 6 + Hangfire + MySQL 二.新建ASP.NET Core空项目 项目名称:HangfireExample 框架:.NET 6.0 三.N ...
- Java面向对象之创建对象内存分析
创建对象内存分析 代码 内存分析 属性 属性:字段Field 成员变量 默认初始化: 1.数字: 0 0.0 2.char: u0000 3.boolean:false 4.引用数据类型:null 5 ...
- Linux docker 安装nginx 配置ssl证书
Linux docker 安装nginx 配置ssl证书 如果觉得样式不好:跳转即可 md文件复制过来有些样式会不一样) 原文地址:https://lifengying.site/archives/b ...
