呜啦!日常碎碎念,偶尔掉落优质前端博文推荐、学习资源等
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
联系频道主:@cosine_yu
网页:https://tg.cosine.ren
本频道的搜索Bot 来辣 👉 @cosSearchBot
私聊直接发消息就可以搜索啦~
🔖tags
#优质博文 #资源推荐 #博客更新 #碎碎念 #项目更新 #手工 #书摘 #阮一峰的科技周刊 #新动态
图频:Cosine 🎨 Gallery @CosineGallery
猫片: @cosine_cat
联系频道主:@cosine_yu
#优质博文 #前端 #css
小技巧 | 渐变消失遮罩的多种实现方式
省流:mask实现
今天刚用mask实现类似的羽化效果
三篇推荐博文:
1. 奇妙的 CSS MASK
2. 使用 mask 实现视频弹幕人物遮罩过
3. 小技巧 | 一行代码实现头像与国旗的融合
小技巧 | 渐变消失遮罩的多种实现方式
省流:mask实现
今天刚用mask实现类似的羽化效果
三篇推荐博文:
1. 奇妙的 CSS MASK
2. 使用 mask 实现视频弹幕人物遮罩过
3. 小技巧 | 一行代码实现头像与国旗的融合
#优质博文 #阮一峰的科技周刊 #前端
科技爱好者周刊(第 274 期):加密通信的最后一块拼图
『如果 cloudflare-ech.com 发生故障,或者种种原因无法访问,那么所有 Cloudflare 托管的网站是否都无法访问?
这是很现实的问题,因为 Cloudflare 是世界最大 CDN 服务商,很多网站都放在上面。而且,它对免费用户都启用了 ECH,还无法关闭(这是付费功能),等于是让免费用户当小白鼠。
我今天写这个话题,就是想提醒大家。如果由于 ECH 的问题,托管在 Cloudflare 的网站无法访问,有两个解决办法。
一个是站长向 Cloudflare 付费,关了 ECH;另一个是访问者不要使用加密 DNS,因为 ECH 依赖加密 DNS,没有了它,就不会触发 ECH。』
1. CSS 嵌套来了(英文)📓
以前的 CSS 不支持嵌套的写法。但是,现在 Firefox 和 Safari 的正式版本,都已经支持这种写法了
2. CSS 重置详解(2023版)(英文) 📓 著名 CSS 作者 Chris Coyier 的最新文章,解释浏览器的 CSS 重置(CSS reset)每一行的意思。
3. 我用 Web Components 开发了自己的网站(英文) 📓 作者记录怎么使用 Web Components 这种技术,开发自己的网站,他对结果非常满意。如果你想了解 Web Components,这是一篇不错的参考资料。
4. 我的创业技术栈(英文) 📓 作者记录了自己创业所使用的各种 SaaS 服务,免费的优先。【跟我司很像】
#资源推荐 #tools
1. LocalSend 🧰 一款开源的跨平台文件传送软件,不需要互联网连接,依靠共享 Wifi 分享文件。
2. Mycelite 🧰 一个 SQLite 扩展,用来从一个 SQLite 实例同步到另一个,适合从本地向服务端同步数据。
3. Auto-i18n 🧰 它使用 GitHub Actions 和 ChatGPT,将仓库里面的 Markdown 文件翻译成其他语言,适合制作网站的国际化版本。【这个好诶】#AI #i18n
4. little-rat 🧰 一个 Chrome 插件,用来统计并关闭其他插件发出的 HTTP 请求,可以了解插件是否在偷偷上传数据。
科技爱好者周刊(第 274 期):加密通信的最后一块拼图
『如果 cloudflare-ech.com 发生故障,或者种种原因无法访问,那么所有 Cloudflare 托管的网站是否都无法访问?
这是很现实的问题,因为 Cloudflare 是世界最大 CDN 服务商,很多网站都放在上面。而且,它对免费用户都启用了 ECH,还无法关闭(这是付费功能),等于是让免费用户当小白鼠。
我今天写这个话题,就是想提醒大家。如果由于 ECH 的问题,托管在 Cloudflare 的网站无法访问,有两个解决办法。
一个是站长向 Cloudflare 付费,关了 ECH;另一个是访问者不要使用加密 DNS,因为 ECH 依赖加密 DNS,没有了它,就不会触发 ECH。』
1. CSS 嵌套来了(英文)📓
以前的 CSS 不支持嵌套的写法。但是,现在 Firefox 和 Safari 的正式版本,都已经支持这种写法了
2. CSS 重置详解(2023版)(英文) 📓 著名 CSS 作者 Chris Coyier 的最新文章,解释浏览器的 CSS 重置(CSS reset)每一行的意思。
3. 我用 Web Components 开发了自己的网站(英文) 📓 作者记录怎么使用 Web Components 这种技术,开发自己的网站,他对结果非常满意。如果你想了解 Web Components,这是一篇不错的参考资料。
4. 我的创业技术栈(英文) 📓 作者记录了自己创业所使用的各种 SaaS 服务,免费的优先。【跟我司很像】
#资源推荐 #tools
1. LocalSend 🧰 一款开源的跨平台文件传送软件,不需要互联网连接,依靠共享 Wifi 分享文件。
2. Mycelite 🧰 一个 SQLite 扩展,用来从一个 SQLite 实例同步到另一个,适合从本地向服务端同步数据。
3. Auto-i18n 🧰 它使用 GitHub Actions 和 ChatGPT,将仓库里面的 Markdown 文件翻译成其他语言,适合制作网站的国际化版本。【这个好诶】#AI #i18n
4. little-rat 🧰 一个 Chrome 插件,用来统计并关闭其他插件发出的 HTTP 请求,可以了解插件是否在偷偷上传数据。
看了一下代码,貌似还可以部署到 Vercel ,不过开发者并未提供方法
该项目更新频繁,如果你想做一个工具站,那么可以尝试一下
傲星工具箱 - 一款开源的在线工具箱程序
📮投稿 📢频道 💬群聊
#书摘 #css #前端
《CSS 选择器世界》 默认选项:default伪类
CSS :default伪类选择器只能作用在表单元素上,匹配处于默认状态的表单元素。
虽然:default伪类用来标记默认状态,以避免选择混淆,但实际上,它更有实用价值的应用应该是“推荐标记”。
例如,某产品有多个支付选项,其中商家推荐使用微信支付
以前的做法是默认选中微信支付选项,并在后面加上“(推荐)”。这样实现有一个缺点:如果以后要改变推荐的支付方式,需要修改单选框的checked属性和“(推荐)”文字的位置。
有了:default伪类,可以让它变得更加简洁,也更容易维护。
由于:default伪类的匹配不受之后checked属性值变化的影响,因此“(推荐)”会一直跟在“微信”的后面,功能不会发生变化。这样做之后维护更方便了,例如,如果以后想将推荐支付方式更换为“支付宝”,则直接设置“支付宝”对应的
读者可以手动输入 https://demo.cssworld.cn/selector2/11/1-3.php 体验与学习。
https://memo.cosine.ren/m/401
《CSS 选择器世界》 默认选项:default伪类
CSS :default伪类选择器只能作用在表单元素上,匹配处于默认状态的表单元素。
虽然:default伪类用来标记默认状态,以避免选择混淆,但实际上,它更有实用价值的应用应该是“推荐标记”。
例如,某产品有多个支付选项,其中商家推荐使用微信支付
以前的做法是默认选中微信支付选项,并在后面加上“(推荐)”。这样实现有一个缺点:如果以后要改变推荐的支付方式,需要修改单选框的checked属性和“(推荐)”文字的位置。
有了:default伪类,可以让它变得更加简洁,也更容易维护。
input:default + label::after {
content: '(推荐)';
}
<p><input type="radio" name="pay" id="pay0"> <label for="pay0">支付宝</label></p>
<p><input type="radio" name="pay" id="pay1" checked> <label for="pay1">微信</label></p>
<p><input type="radio" name="pay" id="pay2"> <label for="pay2">银行卡</label></p>
由于:default伪类的匹配不受之后checked属性值变化的影响,因此“(推荐)”会一直跟在“微信”的后面,功能不会发生变化。这样做之后维护更方便了,例如,如果以后想将推荐支付方式更换为“支付宝”,则直接设置“支付宝”对应的
<input> 单选框为checked状态即可,“(推荐)”文字会自动跟在“支付宝”的后面,整个过程我们只需要修改一处代码。读者可以手动输入 https://demo.cssworld.cn/selector2/11/1-3.php 体验与学习。
https://memo.cosine.ren/m/401
#书摘 #css #前端
《CSS 选择器世界》 占位符显示伪类 :placeholder-shown
:placeholder-shown 伪类的匹配和 placeholder 属性密切相关。:placeholder-shown顾名思义就是“占位符显示伪类”,表示当输入框的placeholder内容显示的时候,匹配该输入框。使用场景如下
1.可用于实现Material Design风格占位符交互效果:输入框处于聚焦状态时,输入框的占位符内容以动画形式移动到左上角作为标题存在。
首先,使浏览器默认的 placeholder 效果不可见,只需将 color 设置为 transparent,CSS如下:
然后,用下面的.input-label元素替代浏览器原生的占位符而成为我们看到的占位符。我们可以采用绝对定位:
最后,在输入框聚焦以及占位符不显示的时候对
效果达成!显然,这要比使用JavaScript写各种事件和判断各种场景简单多了。
眼见为实,读者可以手动输入 https://demo.cssworld.cn/selector2/11/1-1.php 体验与学习。
2.:placeholder-shown与空值判断
由于placeholder内容只在空值状态的时候才显示,因此我们可以借助:placeholder- shown伪类来判断一个输入框中是否有值。
例如:
可以看到输入框中尚未输入内容的时候出现了空值提示信息
https://memo.cosine.ren/m/400
《CSS 选择器世界》 占位符显示伪类 :placeholder-shown
:placeholder-shown 伪类的匹配和 placeholder 属性密切相关。:placeholder-shown顾名思义就是“占位符显示伪类”,表示当输入框的placeholder内容显示的时候,匹配该输入框。使用场景如下
1.可用于实现Material Design风格占位符交互效果:输入框处于聚焦状态时,输入框的占位符内容以动画形式移动到左上角作为标题存在。
首先,使浏览器默认的 placeholder 效果不可见,只需将 color 设置为 transparent,CSS如下:
/* 默认placeholder颜色透明不可见 */
.input-fill:placeholder-shown::placeholder {
color: transparent;
}
然后,用下面的.input-label元素替代浏览器原生的占位符而成为我们看到的占位符。我们可以采用绝对定位:
.input-fill-x {
position: relative;
}
.input-label {
position: absolute;
left: 16px; top: 14px;
pointer-events: none;
}
最后,在输入框聚焦以及占位符不显示的时候对
<label> 元素进行重定位(缩小并移动到上方):
.input-fill:not(:placeholder-shown) ~ .input-label,
.input-fill:focus ~ .input-label {
transform: scale(0.75) translate(0, -32px);
}
效果达成!显然,这要比使用JavaScript写各种事件和判断各种场景简单多了。
眼见为实,读者可以手动输入 https://demo.cssworld.cn/selector2/11/1-1.php 体验与学习。
2.:placeholder-shown与空值判断
由于placeholder内容只在空值状态的时候才显示,因此我们可以借助:placeholder- shown伪类来判断一个输入框中是否有值。
例如:
textarea:placeholder-shown + small::before,
input:placeholder-shown + small::before {
content: '尚未输入内容';
color: red;
font-size: 87.5%;
}
<input placeholder=" "> <small></small>
<textarea placeholder=" "></textarea> <small></small>
可以看到输入框中尚未输入内容的时候出现了空值提示信息
https://memo.cosine.ren/m/400
#书摘 #css #前端
《CSS 选择器世界》 :target 伪类与锚点
假设浏览器地址栏中的地址如下:
则
URL锚点可以和页面中id匹配的元素进行锚定,浏览器的默认行为是触发滚动定位,同时进行:target伪类匹配。
举个例子,假设页面有如下HTML代码:
以及如下CSS代码:
则第二行列表的颜色为天蓝色,同时文字加粗显示。
这就是:target伪类的作用——匹配URL锚点对应的元素。
https://memo.cosine.ren/m/399
《CSS 选择器世界》 :target 伪类与锚点
假设浏览器地址栏中的地址如下:
https://www.cssworld.cn/#cs-anchor 则
#cs-anchor 就是“锚点”,对应术语是哈希,即JavaScript中location.hash的返回值。URL锚点可以和页面中id匹配的元素进行锚定,浏览器的默认行为是触发滚动定位,同时进行:target伪类匹配。
举个例子,假设页面有如下HTML代码:
<ul>
<li id="cs-first">第1行,id是cs-first</li>
<li id="cs-anchor">第2行,id是cs-anchor</li>
<li id="cs-last">第3行,id是cs-last</li>
</ul>
以及如下CSS代码:
li:target {
font-weight: bold;
color: skyblue;
}
则第二行列表的颜色为天蓝色,同时文字加粗显示。
这就是:target伪类的作用——匹配URL锚点对应的元素。
https://memo.cosine.ren/m/399
#书摘 #css #前端
《CSS 选择器世界》 姗姗来迟的关联伪类 :has()
:has() 伪类是一个功能非常强大的伪类,它可以实现类似父选择器和前面兄弟选择器的功能。
:has()伪类的语义非常明确,和渲染表现保持一致。举个简单的例子,下面的CSS代码表示如果
类似地,我们还可以使用+或者~这样的选择符实现“前面兄弟选择器”的效果,即根据后面的兄弟元素选择前面的元素。例如:
理论上,有了:has()伪类,页面中任意DOM元素变化都可以被其他DOM元素感知到
https://memo.cosine.ren/m/398
《CSS 选择器世界》 姗姗来迟的关联伪类 :has()
:has() 伪类是一个功能非常强大的伪类,它可以实现类似父选择器和前面兄弟选择器的功能。
:has()伪类的语义非常明确,和渲染表现保持一致。举个简单的例子,下面的CSS代码表示如果
<a> 元素里面有 <img> 元素,则 <a> 元素就匹配:
a:has(img) { display: block; }
类似地,我们还可以使用+或者~这样的选择符实现“前面兄弟选择器”的效果,即根据后面的兄弟元素选择前面的元素。例如:
h5:has(+ p) { font-size: 1rem; }
理论上,有了:has()伪类,页面中任意DOM元素变化都可以被其他DOM元素感知到
https://memo.cosine.ren/m/398
#书摘 #css #前端
《CSS 选择器世界》 实用的优先级调整伪类
的优先级等同于p选择器,参数中的选择器的优先级被完全忽略。
我们可以巧妙地借助这一特性来降低某些全局 CSS 的优先级。相比使用@layer规则降低 CSS 的优先级,使用 :where() 伪类的方法更敏捷且兼容性更好。
https://memo.cosine.ren/m/397
《CSS 选择器世界》 实用的优先级调整伪类
:where():where() 伪类的优先级永远是0,完全忽略其中参数选择器的优先级。例如:
:where(.article, section) p {}
的优先级等同于p选择器,参数中的选择器的优先级被完全忽略。
我们可以巧妙地借助这一特性来降低某些全局 CSS 的优先级。相比使用@layer规则降低 CSS 的优先级,使用 :where() 伪类的方法更敏捷且兼容性更好。
https://memo.cosine.ren/m/397