<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>CSS | 锤子前端</title><description>Now vibe coding, so learning hammer FE ?</description><link>https://channel.meo-ai.com</link><item><title>CSS 技巧：防止布局在滚动条出现时横向跳动</title><link>https://channel.meo-ai.com/posts/732</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/732</guid><pubDate>Fri, 30 Oct 2026 01:36:44 GMT</pubDate><content:encoded>&lt;mark class=&quot;highlight&quot;&gt;&lt;span class=&quot;post-title-source&quot;&gt;CSS&lt;/span&gt;&lt;/mark&gt;&lt;span class=&quot;post-title-source&quot;&gt; 技巧：防止布局在滚动条出现时横向跳动。&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23UX&quot; title=&quot;#UX&quot;&gt;#UX&lt;/a&gt;&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;html&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;scrollbar-gutter&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; stable&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href=&quot;https://x.com/denicmarko/status/2115765989883433445?a=o3joFmAEkpM1zSiEQ0k&amp;amp;s=19&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://x.com/denicmarko/status/2115765989883433445?a=o3joFmAEkpM1zSiEQ0k&amp;amp;s=19&quot;&gt;https://x.com/denicmarko/status/2115765989883433445?a=o3joFmAEkpM1zSiEQ0k&amp;amp;s=19&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://x.com/denicmarko/status/2115765989883433445?a=o3joFmAEkpM1zSiEQ0k&amp;amp;s=19&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;CSS tip: stop your layout from jumping sideways when the scrollbar appears.html {  scrollbar-gutter: stable;}The browser reserves space for the scrollbar ahead of time, so nothing shifts.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;X (formerly Twitter)&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Marko Denic (@denicmarko) on X&quot; src=&quot;/static/https://cdn4.telesco.pe/file/e1hxkVaNC_feJewrUXh6NZRij4GQcj1IdREfAMKNxg-TiOcZ86JHTEt7LxVj1dthA-G2BTlIY6tmNA_6c5sgPGQUZzkXGEN0ADW0VPlynyrQbE6v4bKeRgFskDiZU1vC9BtHz0QcvUlm15ZilY_592_qYaGrTBlsa-59YiCF9tXOocMDBunLknmgYVM8Yqy51wqzIGoqDypVFQJFcBXPkcJ1PzeJhcUjde-5O-Ddb0fbt6NyhYItzav3B9pmY5QTYsR1AQRfDQ-r7k0lz-mBurnpxKhLr5i9efQR0E_OSb-M9IYr4C6wJxxxEo0qwS8PqbNuwm9zjIVHLqRZrQA6ag.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;lazy&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Marko Denic (@denicmarko) on X&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;&lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; tip: stop your layout from jumping sideways when the scrollbar appears.&lt;br /&gt;&lt;br /&gt;html {&lt;br /&gt;  scrollbar-gutter: stable;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;The browser reserves space for the scrollbar ahead of time, so nothing shifts.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《CSS 单位完全参考手册》</title><link>https://channel.meo-ai.com/posts/703</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/703</guid><pubDate>Wed, 02 Sep 2026 13:28:01 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《&lt;/span&gt;&lt;mark class=&quot;highlight&quot;&gt;&lt;span class=&quot;post-title-source&quot;&gt;CSS&lt;/span&gt;&lt;/mark&gt;&lt;span class=&quot;post-title-source&quot;&gt; 单位完全参考手册》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;br /&gt;&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91&quot; title=&quot;#前端开发&quot;&gt;#前端开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%93%8D%E5%BA%94%E5%BC%8F%E8%AE%BE%E8%AE%A1&quot; title=&quot;#响应式设计&quot;&gt;#响应式设计&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E6%8E%92%E7%89%88&quot; title=&quot;#Web排版&quot;&gt;#Web排版&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%AE%B9%E5%99%A8%E6%9F%A5%E8%AF%A2&quot; title=&quot;#容器查询&quot;&gt;#容器查询&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%A7%86%E5%8F%A3%E5%8D%95%E4%BD%8D&quot; title=&quot;#视口单位&quot;&gt;#视口单位&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%AD%97%E4%BD%93%E7%9B%B8%E5%AF%B9%E5%8D%95%E4%BD%8D&quot; title=&quot;#字体相对单位&quot;&gt;#字体相对单位&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0&quot; title=&quot;#CSS数学函数&quot;&gt;#CSS数学函数&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;这是一本由 Mykola Ptushchuk 编写的交互式 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 单位参考手册，涵盖从基础像素到现代容器查询单位的所有 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 度量单位。全书共 7 章，每个单位都配有实时浏览器演示，可在线调整参数观察实际效果，并提供完整 PDF 下载。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;&lt;br /&gt;1. 全书结构清晰，覆盖七大单位家族：从绝对单位（px）、字体相对单位（em/rem/ch/cap 等）、视口单位（vw/vh 及小/大/动态视口变体）、容器查询单位（cqi/cqw 等）、百分比、数学函数，到角度单位，形成完整的 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 度量体系地图。&lt;br /&gt;&lt;br /&gt;2. 视口单位家族详解：现代移动端浏览器 UI 会动态收缩/展开，因此视口单位分为默认（等价于大视口）、小视口（sv，假设浏览器控件展开）、大视口（lv，假设控件收起）和动态视口（dv，实时状态）四大家族，解决了 &lt;code&gt;100vh&lt;/code&gt; 在移动端全屏布局中常见的&quot;被地址栏遮挡&quot;难题。&lt;br /&gt;&lt;br /&gt;3. 容器查询单位让组件真正可移植：&lt;code&gt;cqi&lt;/code&gt;/&lt;code&gt;cqw&lt;/code&gt; 等单位测量的是组件所在的&quot;查询容器&quot;而非整个视口，使同一个卡片组件在 300px 侧边栏和 700px 主栏中能自动呈现不同布局，无需媒体查询或额外类名，实现了&quot;组件响应自身上下文&quot;而非&quot;响应整个页面&quot;的范式转变。&lt;br /&gt;&lt;br /&gt;4. 字体相对单位不止 em/rem：除了常见的 &lt;code&gt;em&lt;/code&gt;（当前元素字体大小）和 &lt;code&gt;rem&lt;/code&gt;（根元素字体大小），还有 &lt;code&gt;ch&lt;/code&gt;（数字 0 的字宽，适合设置最佳阅读行宽如 &lt;code&gt;65ch&lt;/code&gt;）、&lt;code&gt;cap&lt;/code&gt;（大写字母高度，适合图标与标题对齐）、&lt;code&gt;lh&lt;/code&gt;（当前行高作为长度）等精细排版单位，以及对应的根元素变体（rch/rex/rcap 等，2026 年 1 月才在 Firefox 中补齐，至此全浏览器支持）。&lt;br /&gt;&lt;br /&gt;5. &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 数学函数是单位的粘合剂：&lt;code&gt;calc()&lt;/code&gt; 可混合不同单位（如 &lt;code&gt;100% - 240px&lt;/code&gt;），&lt;code&gt;clamp()&lt;/code&gt; 实现流体排版（如 &lt;code&gt;clamp(2rem, 5vw + 1rem, 4rem)&lt;/code&gt;），&lt;code&gt;min()/max()&lt;/code&gt; 取极值，还有三角函数（&lt;code&gt;sin/cos/tan&lt;/code&gt;）可用于无 JS 的圆形布局，指数函数（&lt;code&gt;pow/sqrt&lt;/code&gt;）可构建模块化字号比例系统。&lt;br /&gt;&lt;br /&gt;6. 实用选型建议：正文用 &lt;code&gt;rem&lt;/code&gt; 尊重用户偏好，组件内部比例用 &lt;code&gt;em&lt;/code&gt; 保持缩放一致性，&lt;code&gt;line-height&lt;/code&gt; 推荐无单位写法（如 &lt;code&gt;1.5&lt;/code&gt;）以便作为乘数继承，&lt;code&gt;clamp()&lt;/code&gt; 的流体值中务必包含 &lt;code&gt;rem&lt;/code&gt; 项以确保缩放无障碍性。&lt;br /&gt;&lt;br /&gt;7. 交互式学习体验：每个单位都配有可拖拽、可滑动的实时演示，直接在浏览器中观察单位变化效果，将抽象概念转化为直观体验，并支持下载完整 PDF 离线阅读。&lt;br /&gt;&lt;br /&gt;URL：&lt;br /&gt;&lt;a href=&quot;https://cssunits.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://cssunits.com/&quot;&gt;https://cssunits.com/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://cssunits.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;A complete interactive reference to every CSS measurement unit. From the basics of px and rem to the nuances of svh, dvh, and cqw.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;CSS Units&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;CSS Units — The Complete Reference&quot; src=&quot;/static/https://cdn4.telesco.pe/file/AT6h8pjfCkp_NRrPaD5TkS-87t7UrKQHXNF-NoWZhC1pDd2HlAyJu29y8zrNUSI82Uu4vmjOKmJ65DbVIkgB6uqrGGa-ZuTI3f-39CT-anyXVvjvGsSdF_tocD3xH_AiGgJd3mLLtOLdqEeHS5nz7RYNXG7MzBU1uUM26Jj87nW5fExS5Wf2N0XTxn_zUVx8joWV_wnZmH10otZqAeKHqBiqwtXjV-99EFtl3BiB1VU9OPiiBARJAypdJ9hDcE8Ys3fDSdSXMKR8GPU6Ruy0DvDyvBoyp59ibi5_PX-X4KQrI0-ZueMxN-GdN_e5wlBs2MbhxplSQWiuq8cov38NdQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;lazy&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;&lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; Units — The Complete Reference&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;A complete interactive reference to every &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; measurement unit. From the basics of px and rem to the nuances of svh, dvh, and cqw.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《Color.js：认真对待颜色这件事》</title><link>https://channel.meo-ai.com/posts/684</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/684</guid><pubDate>Fri, 24 Jul 2026 15:51:25 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《Color.js：认真对待颜色这件事》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Web%E5%BC%80%E5%8F%91&quot; title=&quot;#Web开发&quot;&gt;#Web开发&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23ColorJS&quot; title=&quot;#ColorJS&quot;&gt;#ColorJS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS_Color_Level_4&quot; title=&quot;#CSS_Color_Level_4&quot;&gt;#CSS_Color_Level_4&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E9%A2%9C%E8%89%B2%E7%A9%BA%E9%97%B4%E8%BD%AC%E6%8D%A2&quot; title=&quot;#颜色空间转换&quot;&gt;#颜色空间转换&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%89%B2%E5%9F%9F%E6%98%A0%E5%B0%84&quot; title=&quot;#色域映射&quot;&gt;#色域映射&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23DeltaE&quot; title=&quot;#DeltaE&quot;&gt;#DeltaE&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TreeShakeable&quot; title=&quot;#TreeShakeable&quot;&gt;#TreeShakeable&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23NPM%E5%BA%93&quot; title=&quot;#NPM库&quot;&gt;#NPM库&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE&quot; title=&quot;#开源项目&quot;&gt;#开源项目&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Lea_Verou&quot; title=&quot;#Lea_Verou&quot;&gt;#Lea_Verou&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E9%A2%9C%E8%89%B2%E6%8F%92%E5%80%BC&quot; title=&quot;#颜色插值&quot;&gt;#颜色插值&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;由CSS颜色规范编辑者Lea_Verou和Chris_Lilley打造的专业颜色处理库，支持Lab/LCh、OKLab/OKLCh、Display_P3等海量颜色空间，完整兼容CSS_Color_Level_4。提供真正的色域映射、多种DeltaE色差算法和色度适应方法，API清晰易用且支持链式操作。模块化设计可tree-shake，零依赖，已被Sass、Open_Props、axe等知名项目采用，NPM累计下载超2.46亿次。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 出身&quot;正规军&quot;——两位作者正是CSS颜色规范的编辑者，对颜色科学的理解刻在DNA里，不是随便写写的玩具库&lt;br /&gt;2. 颜色空间全家桶——Lab/LCh、OKLab/OKLCh、sRGB家族、Display_P3、Jzazbz、REC.2100等统统支持，转换随心所欲&lt;br /&gt;3. 科学严谨不糊弄——真正的色域映射而非粗暴裁剪，多种DeltaE色差计算和色度适应算法，专业度拉满&lt;br /&gt;4. API好用又灵活——面向对象+静态函数双模式，链式操作丝滑流畅，还能按需引入模块做tree-shake，包体积可控&lt;br /&gt;5. 业界认可度超高——浏览器用它测试CSS_Color_4/5实现，Sass、Open_Props、axe都在用，NPM下载量突破2.46亿&lt;br /&gt;6. 生态还在扩张中——除了核心库，还在孵化Color_Elements网页组件、Color_Apps工具集和Color_Palettes配色研究项目&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://colorjs.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://colorjs.io&quot;&gt;https://colorjs.io&lt;/a&gt;</content:encoded></item><item><title>《shadcn/typeset 发布：为HTML内容打造统一排版系统》</title><link>https://channel.meo-ai.com/posts/679</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/679</guid><pubDate>Sun, 19 Jul 2026 14:08:25 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《shadcn/typeset 发布：为HTML内容打造统一排版系统》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23shadcn&quot; title=&quot;#shadcn&quot;&gt;#shadcn&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS%E6%8E%92%E7%89%88&quot; title=&quot;#CSS排版&quot;&gt;#CSS排版&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Markdown%E6%B8%B2%E6%9F%93&quot; title=&quot;#Markdown渲染&quot;&gt;#Markdown渲染&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%B5%81%E5%BC%8F%E5%86%85%E5%AE%B9&quot; title=&quot;#流式内容&quot;&gt;#流式内容&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;shadcn/typeset 是一个面向 HTML 和 Markdown 的轻量排版系统，只需一个 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 文件和一个 &lt;code&gt;typeset&lt;/code&gt; 类，即可为博客、文档、聊天流等场景提供统一且可灵活调节的文本样式，专为流式输出场景优化。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 开箱即用：只需在容器上添加 &lt;code&gt;typeset&lt;/code&gt; 类，内部所有 HTML 元素（标题、段落、列表、表格、代码块等）自动获得优雅排版&lt;br /&gt;2. 三旋钮控制：通过 &lt;code&gt;--typeset-size&lt;/code&gt;（字号）、&lt;code&gt;--typeset-leading&lt;/code&gt;（行高）、&lt;code&gt;--typeset-flow&lt;/code&gt;（间距）三个 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 变量，轻松为不同场景（聊天、文档、博客）定制专属节奏&lt;br /&gt;3. 流式友好：设计上避免了新内容块插入时导致已有内容样式重排的问题，非常适合 AI 聊天、流式输出等实时渲染场景&lt;br /&gt;4. 完全可控：文件直接存在于你的项目中，无额外依赖包或配置层，真正做到了&quot;你拥有它&quot;&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://ui.shadcn.com/docs/changelog/2026-07-typeset&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://ui.shadcn.com/docs/changelog/2026-07-typeset&quot;&gt;https://ui.shadcn.com/docs/changelog/2026-07-typeset&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://ui.shadcn.com/docs/changelog/2026-07-typeset&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;A complete typography system for HTML, from blog posts to streaming chat. One CSS file you own.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Shadcn&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;July 2026 - Introducing shadcn/typeset&quot; src=&quot;/static/https://cdn4.telesco.pe/file/P3vpd47EB-LfgY7nz8oty8yeu0zqOTJIPYScgmHMUBLtXJyqXQMChAUbcBeXvGnSWfZ5qHCm0cMQ3W-5nM0h_Gt8kVoNVWopDO9XUNW_RYIF1Cg_H_nYt0Sz26qseWNZJ8VoycwR0DpZXjHWcSzQBHTg-Yqz723iZ34FVoXla7Xq6Ztr-TXhgq31SPkSf0Wkr5y7omcm265hrj1jUBL4xPq94gCoJMUO-DS0pt-rEdD9lKA7BPI5jhvKciicSvYoeDcqYwi1dy_1er0cUDmh8wBvChyyivPOIR6puWyDw69VOkpfM4W0UrPhVPoQIR55ykctK8FV9U4xXM0qBcwCRw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;lazy&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;July 2026 - Introducing shadcn/typeset&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;A complete typography system for HTML, from blog posts to streaming chat. One &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; file you own.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《用 Web Components 构建框架无关的设计系统（实践指南）》</title><link>https://channel.meo-ai.com/posts/650</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/650</guid><pubDate>Sat, 30 May 2026 00:08:24 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《用 Web Components 构建框架无关的设计系统（实践指南）》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23WebComponents&quot; title=&quot;#WebComponents&quot;&gt;#WebComponents&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%AE%BE%E8%AE%A1%E7%B3%BB%E7%BB%9F&quot; title=&quot;#设计系统&quot;&gt;#设计系统&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Elena&quot; title=&quot;#Elena&quot;&gt;#Elena&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23VitePress&quot; title=&quot;#VitePress&quot;&gt;#VitePress&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%97%A0%E9%9A%9C%E7%A2%8D&quot; title=&quot;#无障碍&quot;&gt;#无障碍&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;本文是一份超详细的实战教程，手把手教你用 Web Components（通过 Elena 库）和 VitePress 搭建一个框架无关、可发布的设计系统。核心思路是&quot;最低可行层级&quot;——用 web 标准直接写原子组件，避免框架锁定；组件保持&quot;最笨&quot;状态，把复杂业务逻辑留给应用层。文章涵盖 monorepo 结构搭建、Elena 组件脚手架、条件渲染、&lt;a href=&quot;https://t.me/scope&quot; target=&quot;_blank&quot; title=&quot;@scope&quot;&gt;@scope&lt;/a&gt; 样式隔离、&lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 自定义属性主题化，以及通过 JSDoc + Custom Elements Manifest 自动生成 Props 表格的文档工作流。最终产出的是一个可独立发布的组件包 + 可部署的静态文档站。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 设计系统从第一天就绑定特定框架（如 React）是&quot;令人费解的&quot;——web 标准组件才是可移植、可组合、经得起时间考验的选择&lt;br /&gt;2. Elena 是&quot;刚好够用的抽象&quot;：处理跨框架的 prop/attribute 同步、事件委托等脏活，但不掩盖 web 标准本质&lt;br /&gt;3. 组件应保持&quot;最笨&quot;——被告知显式状态和内容的声明式组件，比内置复杂状态管理的&quot;聪明&quot;组件更健康&lt;br /&gt;4. 设计决策应该在代码中而非 Figma 中完成：现代色彩空间、相对单位、对数排版比例等，设计工具只能模拟浏览器的很小一部分能力&lt;br /&gt;5. 用 &lt;a href=&quot;https://t.me/scope&quot; target=&quot;_blank&quot; title=&quot;@scope&quot;&gt;@scope&lt;/a&gt; 实现样式隔离 + 组件级 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 自定义属性作为&quot;最终层 token&quot;，既保证封装又有主题化回退&lt;br /&gt;6. JSDoc 注释即文档：Elena 自动生成 custom-elements.json，VitePress 通过 data loader 直接渲染 PropsTable 和 ComponentHeader&lt;br /&gt;7. 文档即测试场：在 VitePress 中实时预览组件，确保跨框架可移植性；开发时 concurrent 运行 watch + docs:dev 实现热更新&lt;br /&gt;8. 条件渲染示例：同一个组件通过 href prop 自动切换 button/a 标签，CTA 链接按钮的常见需求也能语义化实现&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://piccalil.li/blog/framework-agnostic-design-systems-part-1/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://piccalil.li/blog/framework-agnostic-design-systems-part-1/&quot;&gt;https://piccalil.li/blog/framework-agnostic-design-systems-part-1/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://piccalil.li/blog/framework-agnostic-design-systems-part-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Baking framework lock-in into your design system from day one is a recipe for obsolescence. Component documentation is often tedious and out-of-sync with development. Let’s build a documentation-first, framework-agnostic component library using web standards…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Piccalilli&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Framework-agnostic design systems: a practical approach to web components&quot; src=&quot;/static/https://cdn4.telesco.pe/file/c5MKnRW_4RxCmUAd723zvjHh4L-nLO0G5lNM1Rh-VVrBb9er230bEw9ZYF4VsuuvxN0BVi0YyOXkUFWq_AH9w49QAI6VMwvxXkDpdbB0gIDD7JCyX5AuJ-Ny1v7brQ_shLRPNX7gf8Ay5l_SATf0p3zFlSNh8IGQdLmviOU5QsWPjJRhu8kA0x5HjeMOkTFPFRTGasUhlk6IDbOVvfbHOqbHmEPWU6n08YbW6SS-PHyBD2nmeqUrbZ2UZL9gZQztNv7Dn7GUuYzet9bvQl3-ds-AwqZZkw1-Bv37QOg9VeUCezZYVhY90R8b3s7XeNV8n08Fs1UfIk9tOVbATrIxUQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Framework-agnostic design systems: a practical approach to web components&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Baking framework lock-in into your design system from day one is a recipe for obsolescence. Component documentation is often tedious and out-of-sync with development. Let’s build a documentation-first, framework-agnostic component library using web standards…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《CSS 与 JavaScript 动画性能之争》</title><link>https://channel.meo-ai.com/posts/648</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/648</guid><pubDate>Sat, 30 May 2026 00:02:44 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《&lt;/span&gt;&lt;mark class=&quot;highlight&quot;&gt;&lt;span class=&quot;post-title-source&quot;&gt;CSS&lt;/span&gt;&lt;/mark&gt;&lt;span class=&quot;post-title-source&quot;&gt; 与 JavaScript 动画性能之争》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS%E5%8A%A8%E7%94%BB&quot; title=&quot;#CSS动画&quot;&gt;#CSS动画&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23JavaScript%E5%8A%A8%E7%94%BB&quot; title=&quot;#JavaScript动画&quot;&gt;#JavaScript动画&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23WebAnimationsAPI&quot; title=&quot;#WebAnimationsAPI&quot;&gt;#WebAnimationsAPI&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96&quot; title=&quot;#性能优化&quot;&gt;#性能优化&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23GSAP&quot; title=&quot;#GSAP&quot;&gt;#GSAP&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Motion&quot; title=&quot;#Motion&quot;&gt;#Motion&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;本文通过交互式演示拆解了 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 与 JS 动画的性能差异真相：&lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; Keyframes 和 Transitions 运行在独立线程，主线程阻塞时依然流畅；而传统 JS 动画（如 requestAnimationFrame 循环）与主线程争抢资源，容易卡顿。但 Motion 库通过底层调用 Web Animations API（WAAPI）绕过了这一限制，实现了与 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 同级别的流畅度。作者建议优先使用原生 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;，遇到 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 无法覆盖的场景时选择 Motion 等 WAAPI 方案，而非直接上 GSAP 这类纯主线程库。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 动画的核心优势不是&quot;计算快&quot;，而是运行在独立线程，主线程再忙也不影响动画流畅度&lt;br /&gt;2. 传统 JS 动画（requestAnimationFrame）每帧都在主线程计算，React 重渲染或 fetch 解析时容易掉帧&lt;br /&gt;3. Motion 库（原 Framer Motion）底层使用 Web Animations API，能接入与 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 相同的底层动画引擎，主线程阻塞时照样丝滑&lt;br /&gt;4. GSAP 功能极其强大，但坚持在主线程运行，是&quot;能力换性能&quot;的取舍，适合复杂序列动画而非简单过渡&lt;br /&gt;5. 现代 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 已经很能打，View Transitions、linear()、Animation Timeline 等新 API 大幅减少了必须上 JS 的场景&lt;br /&gt;6. 选型建议：能用 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 就不用库 → &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 搞不定优先选 Motion/WAAPI → 只有复杂时间线控制才考虑 GSAP&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://www.joshwcomeau.com/animation/css-vs-javascript/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.joshwcomeau.com/animation/css-vs-javascript/&quot;&gt;https://www.joshwcomeau.com/animation/css-vs-javascript/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://joshwcomeau.com/animation/css-vs-javascript&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;There are a bunch of JavaScript animation libraries out there, and you might have wondered whether there’s a performance cost compared to traditional CSS transitions and keyframe animations. In this blog post, we’ll compare the same animation across several…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Joshwcomeau&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;CSS vs. JavaScript • Josh W. Comeau&quot; src=&quot;/static/https://cdn4.telesco.pe/file/j6pHpHOiid85hW-PiHO5RbHQNhUfz8DCzWKspZ6INAOvz1cGOLiCr4icJdVWszb3YD9dLs05A3Hd7EFas5ZsW-R5_tDkwte5eHWsZo06if-Y-ojVVBb0HKR_g1VBbjGnA1nk7Kyp-2o2HK7w6SuzPySg8h20PO-8_JlOyaHI8ygvgqC0LS2hxasm1JN8YYC7N-QeaC7370uBuBtmrggiIKtw04s15QlT-AMhl02e04AH8vKNK16Cz7YPZjODUVKtBj5CVEz9ewIhA6qLKjtE9Rkz7wYZ4b2SmiUD1QH0shZkEmvzzws7oAszCWv_aKZ5rF4-0UBBxvgvcF1jYGDb7g.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;&lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; vs. JavaScript • Josh W. Comeau&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;There are a bunch of JavaScript animation libraries out there, and you might have wondered whether there’s a performance cost compared to traditional &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; transitions and keyframe animations. In this blog post, we’ll compare the same animation across several…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《告别Tailwind，重新学习组织CSS》</title><link>https://channel.meo-ai.com/posts/642</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/642</guid><pubDate>Sun, 24 May 2026 00:07:06 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《告别Tailwind，重新学习组织CSS》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TailwindCSS&quot; title=&quot;#TailwindCSS&quot;&gt;#TailwindCSS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS%E6%9E%B6%E6%9E%84&quot; title=&quot;#CSS架构&quot;&gt;#CSS架构&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E5%93%8D%E5%BA%94%E5%BC%8F%E8%AE%BE%E8%AE%A1&quot; title=&quot;#响应式设计&quot;&gt;#响应式设计&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E8%AF%AD%E4%B9%89%E5%8C%96HTML&quot; title=&quot;#语义化HTML&quot;&gt;#语义化HTML&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;1. 作者从Tailwind迁移到语义化HTML+原生CSS，发现Tailwind其实教会了她很多系统性思维（如重置样式、配色、字体层级），现在正把这些系统用原生CSS重新实现。&lt;br /&gt;2. 采用&quot;组件化&quot;CSS架构：每个组件有独立类名和文件，CSS互不覆盖，编辑时只需关注100行左右的局部代码，大幅降低心智负担。&lt;br /&gt;3. 保留Tailwind的实用系统：直接复制preflight重置样式，沿用配色变量和字体尺寸变量，让原生CSS也能像Tailwind一样快速决策&quot;要大一点就用xl&quot;。&lt;br /&gt;4. 响应式设计新思路：减少媒体查询，改用CSS Grid的auto-fit和grid-template-areas实现自适应布局，这是Tailwind难以做到的&quot;奇怪玩法&quot;。&lt;br /&gt;5. 迁移原因：新版Tailwind强依赖构建工具；作者CSS能力提升后想突破Tailwind的限制；受《Tailwind与CSS的女性气质》一文影响，决定认真对待CSS这门技术而非逃避它。&lt;br /&gt;&lt;br /&gt;URL：&lt;a href=&quot;https://jvns.ca/blog/2026/05/15/moving-away-from-tailwind--and-learning-to-structure-my-css-/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://jvns.ca/blog/2026/05/15/moving-away-from-tailwind--and-learning-to-structure-my-css-/&quot;&gt;https://jvns.ca/blog/2026/05/15/moving-away-from-tailwind--and-learning-to-structure-my-css-/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://jvns.ca/blog/2026/05/15/moving-away-from-tailwind--and-learning-to-structure-my-css-&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Hello! 8 years ago, I wrote excitedly about discovering Tailwind.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Julia Evans&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;Moving away from Tailwind, and learning to structure my &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Hello! 8 years ago, I wrote excitedly about discovering Tailwind.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>《编写可维护CSS的实践指南》</title><link>https://channel.meo-ai.com/posts/624</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/624</guid><pubDate>Wed, 06 May 2026 05:40:40 GMT</pubDate><content:encoded>&lt;span class=&quot;post-title-source&quot;&gt;《编写可维护CSS的实践指南》&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;标签：&lt;a href=&quot;/search/result?q=%23%E5%89%8D%E7%AB%AF&quot; title=&quot;#前端&quot;&gt;#前端&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23TailwindCSS&quot; title=&quot;#TailwindCSS&quot;&gt;#TailwindCSS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23AtomicCSS&quot; title=&quot;#AtomicCSS&quot;&gt;#AtomicCSS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23StyleX&quot; title=&quot;#StyleX&quot;&gt;#StyleX&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSSModules&quot; title=&quot;#CSSModules&quot;&gt;#CSSModules&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS_Scoping&quot; title=&quot;#CSS_Scoping&quot;&gt;#CSS_Scoping&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS_Variables&quot; title=&quot;#CSS_Variables&quot;&gt;#CSS_Variables&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS_Layers&quot; title=&quot;#CSS_Layers&quot;&gt;#CSS_Layers&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Fluid_Typography&quot; title=&quot;#Fluid_Typography&quot;&gt;#Fluid_Typography&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23StyleLint&quot; title=&quot;#StyleLint&quot;&gt;#StyleLint&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23Component_Scoped_CSS&quot; title=&quot;#Component_Scoped_CSS&quot;&gt;#Component_Scoped_CSS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;总结：&lt;br /&gt;两位前端老兵Wes Bos和Scott Tolinski畅聊如何让CSS不变成&quot;垃圾场&quot;。核心思路是选一个系统坚持到底、用变量代替硬编码、保持组件独立可移植，并善用现代CSS原生能力（如@scope、&lt;a href=&quot;https://t.me/layer&quot; target=&quot;_blank&quot; title=&quot;@layer&quot;&gt;@layer&lt;/a&gt;、clamp流体排版）减少媒体查询的重复劳动。他们还对比了Tailwind、StyleX、&lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; Modules等主流方案，强调好CSS要&quot;有弹性&quot;——能自适应容器变化，而不是在每个断点重写一遍样式。&lt;br /&gt;&lt;br /&gt;文章要点：&lt;br /&gt;- **样式别&quot;漏&quot;出去**：好CSS要像密封舱，组件拆下来放在白纸上照样好看；如果样式太宽泛、到处泄漏，代码很快就会腐烂发臭&lt;br /&gt;- **变量是救命稻草**：颜色、字体、阴影全进变量里，别写死数值；不然一年后你会在代码里挖出40种不同的灰色，改起来想哭&lt;br /&gt;- **给CSS分层控权**：用`&lt;a href=&quot;https://t.me/layer&quot; target=&quot;_blank&quot; title=&quot;@layer&quot;&gt;@layer&lt;/a&gt;`把重置、主题、组件样式分楼层，告别&quot;加权重、加!important&quot;的 specificity 战争，心里踏实多了&lt;br /&gt;- **原生作用域来了**：`&lt;a href=&quot;https://t.me/scope&quot; target=&quot;_blank&quot; title=&quot;@scope&quot;&gt;@scope&lt;/a&gt;`已经登陆主流浏览器，甚至可以把`&amp;lt;style&amp;gt;`直接丢进组件里自动限定范围，Vue和Svelte用户听了直呼&quot;终于等到你&quot;&lt;br /&gt;- **流体排版超省心**：用`clamp()`做字体大小，让文字在手机和桌面之间丝滑缩放，很多时候连媒体查询都可以省了&lt;br /&gt;- **Tailwind vs &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; Modules vs StyleX**：Tailwind像速记本，上手快但类名堆成山；&lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; Modules稳扎稳打；StyleX走构建时优化路线，但媒体查询语法劝退不少人——选哪个不重要，关键是别混着用&lt;br /&gt;- **上StyleLint当&quot;坏人&quot;**：让工具自动拦住&quot;用硬编码颜色&quot;这类操作，比你在PR里当挑刺老哥体面多了，团队协作必备&lt;br /&gt;&lt;br /&gt;文章URL：&lt;a href=&quot;https://syntax.fm/show/999/writing-maintainable-css/transcript&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://syntax.fm/show/999/writing-maintainable-css/transcript&quot;&gt;https://syntax.fm/show/999/writing-maintainable-css/transcript&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://syntax.fm/show/999/writing-maintainable-css/transcript&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;syntax.fm&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Transcript: Writing Maintainable CSS - Syntax #999&quot; src=&quot;/static/https://cdn4.telesco.pe/file/HrukEFwfD7zg7qnG1GcoNTY0F9ssQ7SkeTktwX7iwWGyZFBzhUkdeFzo5WYvZbV8TtOfUc_A23cROlRTTx_-ARCxMo9aG8A50YX520H9DH8X7-zf6W80I5ms6wdQZ4lrfNaSF_edx2EznIQVqRsRF-Oy23UGtuIHFuvziQ96hghiEDJR0YzVvKTap_h185ggKum8mmzZKUyKduSnXBeXaLj0raLyfHN9DbhXnZOS1eL_Lii9KjXgBjpZo1vULmfYaScewJhP7uIR8adLVEleo8MikjK-6G5LboF0SL1mjyD9UNH7noqGndRlA34ymb3to1BtrkW5DlTbCPnWwiS_Bw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Transcript: Writing Maintainable &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; - Syntax #999&lt;/div&gt;
  
&lt;/a&gt;</content:encoded></item><item><title>#CSS </title><link>https://channel.meo-ai.com/posts/516</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/516</guid><pubDate>Fri, 14 Nov 2025 03:11:38 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.stefanjudis.com/today-i-learned/pathlength-makes-makes-svg-path-animations-easier-to-manage/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.stefanjudis.com/today-i-learned/pathlength-makes-makes-svg-path-animations-easier-to-manage/&quot;&gt;https://www.stefanjudis.com/today-i-learned/pathlength-makes-makes-svg-path-animations-easier-to-manage/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://stefanjudis.com/today-i-learned/pathlength-makes-makes-svg-path-animations-easier-to-manage&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Use the &amp;quot;pathLength` attribute to make animating &amp;quot;stroke-dasharray&amp;quot; and &amp;quot;stroke-dashoffset&amp;quot; easier.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Stefanjudis&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;pathLength makes makes SVG path animations easier to manage&quot; src=&quot;/static/https://cdn4.telesco.pe/file/Qhi_FvdiOSi1ndwZaAYjUnzNSSFPVQ2mdorKCuIb2WEgN9todnCtlImba3JYsMFvVYNVuKJp9SozQDvrUeLdjqLU7Xq6Jdeeu4Cg1uJIKduOcam32B8iqBP4m3wr8tEKD2mzr7zMgoIuPt1ieXAxcSGry7Bl_E2ImKQLqhAn1ic6cU3jgMgvvSPYK9pP4ftocQcrnXoEkQugJBgtr9ysbwVSTDa5t4MbgAJ9gKkqxdCKdiOA8kjIMpTGn0ygwSq1ZV9SbeRGZ_vzCyy43nu4P_vXy8wKO0eYVy0TbBcMxV01LPH7958SCURcY7XmeTI6Cd23Crlhwx-WyZoxh7U_aw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;pathLength makes makes SVG path animations easier to manage&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Use the &quot;pathLength` attribute to make animating &quot;stroke-dasharray&quot; and &quot;stroke-dashoffset&quot; easier.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#CSS 本文深入解析了 CSS position: sticky 的常见“坑”：粘性元素不能大于滚动容器，也不能被尺寸过小的祖先块限制，尤其在 Flex/Grid 布局中默认的 stretch 对齐会让粘性失效；解决办法是给相关元素设置 align-self: flex-start 或限制高度并内部滚动，确保粘性元素在规范允许的包含块内自由“粘贴”</title><link>https://channel.meo-ai.com/posts/515</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/515</guid><pubDate>Fri, 14 Nov 2025 01:41:27 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; 本文深入解析了 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; &lt;code&gt;position: sticky&lt;/code&gt; 的常见“坑”：粘性元素不能大于滚动容器，也不能被尺寸过小的祖先块限制，尤其在 Flex/Grid 布局中默认的 stretch 对齐会让粘性失效；解决办法是给相关元素设置 &lt;code&gt;align-self: flex-start&lt;/code&gt; 或限制高度并内部滚动，确保粘性元素在规范允许的包含块内自由“粘贴”。 &lt;a href=&quot;https://frontendmasters.com/blog/the-weird-parts-of-position-sticky/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://frontendmasters.com/blog/the-weird-parts-of-position-sticky/&quot;&gt;https://frontendmasters.com/blog/the-weird-parts-of-position-sticky/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://frontendmasters.com/blog/the-weird-parts-of-position-sticky&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Using position: sticky; is one of those CSS features that’s incredibly useful, seemingly simple, and also, frequently frustrating.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Frontend Masters&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;The Weird Parts of position: sticky;&quot; src=&quot;/static/https://cdn4.telesco.pe/file/j_4GsUHEFFm_Gk2q_rwrQ4Ct9oJWfuQ9Ul5RMJyNabgVvJxjUib_3Sy8EK-p1apPZPeDO9liGvTLQyTTyOBw26iD5Oyy9kJorkCWrwz_hc6uAkV9ITAmW8f2bVFf5bgfEHZTxy1WWyBnciOHyZyRRCh5NWxV3LAx2D3RNgsimM-GMFF3v17ccomKSyMpL-UjICE2KP9rWnb0RkQjRpC8DaHmJUfqhXfGdZlkRBwmkvPcQxl1pr00EYR8hD41xj2wb9_bFRmOtlYbl01XW8Lg69uym3Z1rf7yhNn8FHSFG-4nGfnxEko7Sif_WMd752KciocuX7KAsWmCrs6RZzUpYw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;The Weird Parts of position: sticky;&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Using position: sticky; is one of those &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; features that’s incredibly useful, seemingly simple, and also, frequently frustrating.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#CSS CSS 性能榜：只动 transform/opacity+transition/animation 或 WAAPI 最丝滑，别碰会触发 Layout 的几何属性与 setInterval 改样式</title><link>https://channel.meo-ai.com/posts/514</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/514</guid><pubDate>Fri, 14 Nov 2025 01:36:57 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 性能榜：只动 &lt;code&gt;transform/opacity&lt;/code&gt;+&lt;code&gt;transition/animation&lt;/code&gt; 或 &lt;code&gt;WAAPI&lt;/code&gt; 最丝滑，别碰会触发 Layout 的几何属性与 setInterval 改样式。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://motion.dev/blog/web-animation-performance-tier-list&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://motion.dev/blog/web-animation-performance-tier-list&quot;&gt;https://motion.dev/blog/web-animation-performance-tier-list&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://motion.dev/blog/web-animation-performance-tier-list&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Learn what makes web animations fast, slow, and everything in between with our 2025 web animation performance tier list.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Motion&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;The Web Animation Performance Tier List | Motion Magazine&quot; src=&quot;/static/https://cdn4.telesco.pe/file/mtkceR5VFybgmd29epShIBjC8hCflBiCdrzlwwqW7sc4Kf3PhHVY3vxAxBbQ0crne-OTNHsI5O86qkoYIhgAiQ2htsEltalZrUzYabLenCDN7hELDUdL1sMZ62DMP0we77grsZ5MD25tfwGaTzon1C6o_no0jssPXdYQM5zjFhbnjpVIsJC78v5PU8B-E7OT4vnrzVNovSftrZe_KKp89kAhiW2htP-IBb2HeUkRXwGh9DpJ9-tqKO46B2kTh8xZEdIl7JuLvlpcIbQZHNbpYystLpFZNZ6BMeqj17m3HkQ3a4EODLpIcuHM8FgVPIgO1gkJK8S5xrUuIO8GaERSDw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;The Web Animation Performance Tier List | Motion Magazine&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Learn what makes web animations fast, slow, and everything in between with our 2025 web animation performance tier list.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#CSS 后兼容时代：2025 年起 Grid3、Subgrid、Container Queries、@layer 已成新 baseline，可直接用</title><link>https://channel.meo-ai.com/posts/504</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/504</guid><pubDate>Wed, 05 Nov 2025 01:19:14 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; 后兼容时代：2025 年起 Grid3、Subgrid、Container Queries、&lt;a href=&quot;https://t.me/layer&quot; target=&quot;_blank&quot; title=&quot;@layer&quot;&gt;@layer&lt;/a&gt; 已成新 baseline，可直接用。  &lt;br /&gt;- 五大布局模型：Flow、Flexbox、Grid、Container Query、Intrinsic，各司其职。  &lt;br /&gt;- Subgrid 正式可用：子网格继承父网格轨道，一次性解决卡片对齐地狱。  &lt;br /&gt;- Container Queries 全面落地：组件按自身宽度响应，无需再绑死视口。  &lt;br /&gt;- &lt;a href=&quot;https://t.me/layer&quot; target=&quot;_blank&quot; title=&quot;@layer&quot;&gt;@layer&lt;/a&gt; 正式版：显式层叠顺序，告别选择器权重内卷。  &lt;br /&gt;- Flexbox 默认支持 gap：row-gap / column-gap 无需 display:grid 也能优雅间距。  &lt;br /&gt;- 新关键字 safe/unsafe：align/justify-content 增加溢出保护。  &lt;br /&gt;- 四套现成无媒体查询模板：Holy Grail、自适应仪表板、多列文章、一行居中。  &lt;br /&gt;- DevTools 升级：Chrome 可视化 Subgrid，Firefox 仿真容器查询。  &lt;br /&gt;- 2026+ 在途功能：masonry、&lt;a href=&quot;https://t.me/when&quot; target=&quot;_blank&quot; title=&quot;@when&quot;&gt;@when&lt;/a&gt; 条件规则、相对颜色语法。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://2ality.com/2025/10/css-layout.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://2ality.com/2025/10/css-layout.html&quot;&gt;https://2ality.com/2025/10/css-layout.html&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://2ality.com/2025/10/css-layout.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;CSS provides a variety of services for web content: In the previous chapter, we used it to format content: to change colors, typefaces, etc. In this chapter, we will use it to lay out content: to place HTML elements on a page.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;2Ality&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;[Web dev for beginners] &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; layout: flexbox, grid, media queries and container queries&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;&lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; provides a variety of services for web content: In the previous chapter, we used it to format content: to change colors, typefaces, etc. In this chapter, we will use it to lay out content: to place HTML elements on a page.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#文章 #CSS 文章示范了用容器查询、:has()、clamp()等现代 CSS，让“头部+卡片网格”这一简单布局随卡片数量与宽度自动切换形态</title><link>https://channel.meo-ai.com/posts/503</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/503</guid><pubDate>Mon, 03 Nov 2025 01:31:57 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; 文章示范了用容器查询、&lt;code&gt;:has()&lt;/code&gt;、&lt;code&gt;clamp()&lt;/code&gt;等现代 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;，让“头部+卡片网格”这一简单布局随卡片数量与宽度自动切换形态。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://ishadeed.com/article/modern-css-section-layout/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://ishadeed.com/article/modern-css-section-layout/&quot;&gt;https://ishadeed.com/article/modern-css-section-layout/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://ishadeed.com/article/modern-css-section-layout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Building a typical section design with modern CSS.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Ishadeed&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Solved By Modern CSS: Section Layout&quot; src=&quot;/static/https://cdn4.telesco.pe/file/Urwb90-FWrxSrFB48B95N5A6Y914sWMTuGhAGrVXFWuwmvg8sOlFkrvco0QaXTv9_gshB0NPaHr0H2nGbh-JCYnWcvORnU8aUUxgN1D59LdA4GdEndouQT8MEzt2a-LqkthAyRT5UBqLLjJGopewYyGJ6msqZ4gTAooZs7vEpSjomyehvV_pRNQdK8pkOACYKOcjK1U0KMAokeWcjq7un2Twxg6E_d_Op1ZKzhPY6APj6ig-Up3ZsLD8cM5ynwV1CXXlkX-aOavX_SvGaIPp9iEphAcB1qeKQDM0-3F5tq_2bRDO9heMKVspSZZyCjK9hugAJDFox32DkHbEug-uGw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Solved By Modern &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;: Section Layout&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Building a typical section design with modern &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#CSS CSS 新增 linear() 时间函数，用“连点成线”方式原生实现弹簧、弹跳动画，免 JS，但需工具生成数据且要注意中断与回退</title><link>https://channel.meo-ai.com/posts/497</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/497</guid><pubDate>Wed, 29 Oct 2025 13:07:24 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 新增 &lt;code&gt;linear()&lt;/code&gt; 时间函数，用“连点成线”方式原生实现弹簧、弹跳动画，免 JS，但需工具生成数据且要注意中断与回退。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.joshwcomeau.com/animation/linear-timing-function/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.joshwcomeau.com/animation/linear-timing-function/&quot;&gt;https://www.joshwcomeau.com/animation/linear-timing-function/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://joshwcomeau.com/animation/linear-timing-function&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;The “linear()” timing function is a game-changer; it allows us to model physics-based motion right in vanilla CSS! That said, there are some limitations and quirks to be aware of. I’ve been experimenting with this API for a while now, and in this post, I’ll…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Joshwcomeau&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Springs and Bounces in Native CSS • Josh W. Comeau&quot; src=&quot;/static/https://cdn4.telesco.pe/file/bYAAEUp85lyVI1qDvBzhdA03SPGxYsX0lkMWRVywHFWSMPAsM2lBYXy3muXJONhqrtQqWDkZ17D5oto56TJB77ZJlQi7OV1H4AUpA-XxZjdAr95ZZErVJZRgHYgdE3dHulqkHpQvTH0EpBtZ9obxO0VNPmhxuE5X73uMooBDKOdcVuKGTqCdIUedo2BLee5K2se_rkI2oxMt5fNvyt3ut9_A49M0c4NFqKYcGfj1tJtwyeiLMdOFMQoAvUoH6EFYgtCjzABlovuZOukfH7wUMXlW3LP8eex1-LGoMwi0FDM4NCEbMCmcwe8j7lZQ-XiX0voL5z9tcWdt2qsosa8CoQ.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Springs and Bounces in Native &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; • Josh W. Comeau&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;The “linear()” timing function is a game-changer; it allows us to model physics-based motion right in vanilla &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;! That said, there are some limitations and quirks to be aware of. I’ve been experimenting with this API for a while now, and in this post, I’ll…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#CSS Styled-Components 维护模式：一个 40%更快的分支：Styled-Components 目前处于维护模式，Sanity 团队分支了它，并利用 React 18 的 useInsertionEffect 钩子（以及其他因素）使其速度大幅提升</title><link>https://channel.meo-ai.com/posts/465</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/465</guid><pubDate>Thu, 18 Sep 2025 11:39:14 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; Styled-Components 维护模式：一个 40%更快的分支：Styled-Components 目前处于维护模式，Sanity 团队分支了它，并利用 React 18 的 useInsertionEffect 钩子（以及其他因素）使其速度大幅提升。Sanity 和 Linear 都在使用这个分支作为临时解决方案，直到他们完全迁移到更好的方案。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.sanity.io/blog/cut-styled-components-into-pieces-this-is-our-last-resort&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.sanity.io/blog/cut-styled-components-into-pieces-this-is-our-last-resort&quot;&gt;https://www.sanity.io/blog/cut-styled-components-into-pieces-this-is-our-last-resort&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://sanity.io/blog/cut-styled-components-into-pieces-this-is-our-last-resort&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;After styled-components entered maintenance mode, we forked it with React 18&apos;s useInsertionEffect. Result: 40% faster renders for Linear. Open source solution.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Sanity.io&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;styled-components maintenance mode: A 40% faster fork | Sanity&quot; src=&quot;/static/https://cdn4.telesco.pe/file/gz_m14gONYeayhBRlmAsZaB9a8sPM2UK4wrq1do068t-1pGCda77zPKzmb-O0FaI-5j-y5gCz2hz-wtlykw0YakJyyejeDr5kybXQj9_JGmXoURkbf755UbXoUTPAKvDENj4zAvAWXXF_HsDiTrvAL3rMMm10zN4BmIgn3hqv4MqobnB-YP8Hgbvj3aMwugjmPvdUlKk7VyVa0PsfFmmyPyZQDQeZc9fHW4gWWxOeTZZ-HLINi2pQSd1CP1PP5KBjjD36O1gFoCtkWBPiDgVr08u17_bpXVSQb8rzSBnKhbRALghTNvEo2w7utoLY5fvdbqG1iVfVbn02-zqIpX7iw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;styled-components maintenance mode: A 40% faster fork | Sanity&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;After styled-components entered maintenance mode, we forked it with React 18&apos;s useInsertionEffect. Result: 40% faster renders for Linear. Open source solution.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#CSS #文章 Josh W. Comeau 在《Color Shifting in CSS》中揭示了 CSS 颜色过渡变灰的本质：浏览器用 RGB 插值，即使写的是 HSL；他用 filter: hue-rotate() 绕过限制，实现鲜艳无缝的色调旋转，并叠加闪烁动画，让粒子效果生动又轻盈</title><link>https://channel.meo-ai.com/posts/451</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/451</guid><pubDate>Tue, 09 Sep 2025 01:17:26 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; Josh W. Comeau 在《Color Shifting in &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;》中揭示了 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 颜色过渡变灰的本质：浏览器用 RGB 插值，即使写的是 HSL；他用 &lt;code&gt;filter: hue-rotate()&lt;/code&gt; 绕过限制，实现鲜艳无缝的色调旋转，并叠加闪烁动画，让粒子效果生动又轻盈。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.joshwcomeau.com/animation/color-shifting/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://www.joshwcomeau.com/animation/color-shifting/&quot;&gt;https://www.joshwcomeau.com/animation/color-shifting/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://joshwcomeau.com/animation/color-shifting&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;A little while ago, I was trying to animate an element’s background color, so that it cycled through the rainbow. Seems easy, but it turns out, browsers have a surprisingly big limitation when it comes to color processing! In this tutorial, we’ll dig into…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Joshwcomeau&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Color Shifting in CSS • Josh W. Comeau&quot; src=&quot;/static/https://cdn4.telesco.pe/file/DDJ2IGM8aFDBINgf0yian354BtoSopVU1u_0VDmKvaKXBWnlLiIQziSGkbLHCm3Rfq7igQvFvoZxb-6bpBAj_Wp-Pca2QzuVnXJudt9zw-hROpIeleUOlArhRfzLG1-s_rckBkCxjxiS2LgMlr9srAu9Pk-s2jLAd6eAAo34gLSOZOyncTQnCVUuVNh13e2HgEdgE0geVM1zRh5NwZxQ_SSzVrztDUX9uNd4ktKzwe596mZ49XNsVAoZrU9laUokBSL6OvDhj-kbLr0-54r79ruwsZF0q4fV3JNmrft51b_Yyi2R-CxV_I-8fyk6V9m7kDKFRZpkCD0ZNo1D-xfDVw.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Color Shifting in &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; • Josh W. Comeau&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;A little while ago, I was trying to animate an element’s background color, so that it cycled through the rainbow. Seems easy, but it turns out, browsers have a surprisingly big limitation when it comes to color processing! In this tutorial, we’ll dig into…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#CSS  文章介绍了CSS新特性`scroll-target-group`及其与`:target-current`伪类的结合使用，能够轻松实现滚动侦测效果（如目录高亮）</title><link>https://channel.meo-ai.com/posts/428</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/428</guid><pubDate>Thu, 07 Aug 2025 11:27:34 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt;  文章介绍了CSS新特性`scroll-target-group`及其与`:target-current`伪类的结合使用，能够轻松实现滚动侦测效果（如目录高亮）。该特性目前仅在Chrome 140中支持，可通过`&lt;a href=&quot;https://t.me/supports&quot; target=&quot;_blank&quot; title=&quot;@supports&quot;&gt;@supports&lt;/a&gt;`检测实现渐进式增强，同时在无障碍性方面符合常规要求。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://una.im/scroll-target-group/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://una.im/scroll-target-group/&quot;&gt;https://una.im/scroll-target-group/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://una.im/scroll-target-group&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;scroll-target-group is a new CSS feature that lets you create scroll-spy table of contents with basically 2 lines of CSS.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Una.im&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Creating a scroll-spy with 2 lines of CSS&quot; src=&quot;/static/https://cdn4.telesco.pe/file/XfQZ66SMf02eiHntFNA1usHfbddb12BGRyuq-44iVlml8pO_6_WBRHCrMNYWl4gctksQGCQkH73ZPLgDQduMjJsBYM0trGVnkLQ_MfcXOiuvi5jeD5EljE_Q7eiRlGR3To19WdF3lgrFfEiVOdf0d_BW8M2Yrs7eD5Q-d9Qz6Pc-W_VZd3bUWVFd3JWUppxFEUv-G3HwGP_N3Tgu2dZGkYrimngQHOgs2uGkF_L2GCdsB6Tm9Im52iqxVc5lxXXrJGh6ohmNkwrIEgskxOrjSukXpDAKzrWasWlBgUV7K2_EmKFFuLSRu1c8NBWcbClTngi1WT-KiumzdxylDDKssA.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Creating a scroll-spy with 2 lines of &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;scroll-target-group is a new &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; feature that lets you create scroll-spy table of contents with basically 2 lines of &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#tailwindcss #CSS 《Tailwind 与原生 CSS 结合》Tailwind CSS 4 通过全面转向原生 CSS 变量和改进的配置方式，实现了与传统 CSS 的无缝融合，解决了之前版本的争议性问题</title><link>https://channel.meo-ai.com/posts/426</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/426</guid><pubDate>Thu, 07 Aug 2025 11:22:19 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23tailwindcss&quot; title=&quot;#tailwindcss&quot;&gt;#tailwindcss&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; 《Tailwind 与原生 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 结合》Tailwind &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 4 通过全面转向原生 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 变量和改进的配置方式，实现了与传统 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 的无缝融合，解决了之前版本的争议性问题。它引入了“非病毒”模式(“Non-Viral”)，允许开发者在不影响现有 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 架构或设计系统的情况下灵活使用 Tailwind 的工具类或纯 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;，极大地提升了开发体验，让作者从批评者转变为支持者，标志着 Tailwind 与原生 &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; 的完美结合。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://thathtml.blog/2025/08/tailwind-and-css-friends-at-last/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://thathtml.blog/2025/08/tailwind-and-css-friends-at-last/&quot;&gt;https://thathtml.blog/2025/08/tailwind-and-css-friends-at-last/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://thathtml.blog/2025/08/tailwind-and-css-friends-at-last&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Freely compose UI using native CSS variables &amp;amp; syntax, Tailwind design tokens in CSS, and Tailwind utility classes.&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;That HTML Blog&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;Friends at Last: Tailwind &amp;amp; CSS…whodathunkit?!&quot; src=&quot;/static/https://cdn4.telesco.pe/file/IGVXRskIa03RA4UfCy71rj2Xxa2Fljt2rg8JY8iqxpFdANTNlfpOIy4x_WuDdq8FsN-4d4SlT-oVrZ_0XDXh_u4O0yyS6IwN8XSwI4HDGepb4M8yYNSwySngGgUMJl3OF8F4TwLPMDdeuvAe8quXxVN6zrsffYVnSzBmhCNu7YXnTrZ0xCS2xuEwmagt0el0r0sbOTgfx5rC929R97UrQClHGajh1u3Y12aDnRxudGgoY9tVvXhicuP4LOuflj2p_mLI8BrjrPP9ETJPEp6GG78pjdL6LSrNAOuEvmorp1XnJwb5vIdza1ZfdAHCPuSO5m_0VpiW45CMDHer5ALz2g.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;Friends at Last: Tailwind &amp;amp; &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;…whodathunkit?!&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Freely compose UI using native &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt; variables &amp;amp; syntax, Tailwind design tokens in &lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;, and Tailwind utility classes.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#React #CSS #文章 《如何为 React 应用程序添加样式》文章提到了语义化CSS、设计令牌（Design Tokens）、CSS-in-JS（如styled-components）和Utility-First框架（如Tailwind）四种CSS方案，作者最终推荐Utility-First（如Tailwind），因其通过原子类组合实现高效、低复杂度的组件级样式管理，并强调“复用组件而非样式”的核心原则</title><link>https://channel.meo-ai.com/posts/409</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/409</guid><pubDate>Mon, 07 Jul 2025 16:28:56 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23React&quot; title=&quot;#React&quot;&gt;#React&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; &lt;a href=&quot;/search/result?q=%23%E6%96%87%E7%AB%A0&quot; title=&quot;#文章&quot;&gt;#文章&lt;/a&gt; 《如何为 React 应用程序添加样式》文章提到了语义化CSS、设计令牌（Design Tokens）、&lt;mark class=&quot;highlight&quot;&gt;CSS&lt;/mark&gt;-in-JS（如styled-components）和Utility-First框架（如Tailwind）四种CSS方案，作者最终推荐Utility-First（如Tailwind），因其通过原子类组合实现高效、低复杂度的组件级样式管理，并强调“复用组件而非样式”的核心原则。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://alexkondov.com/full-stack-tao-styling/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://alexkondov.com/full-stack-tao-styling/&quot;&gt;https://alexkondov.com/full-stack-tao-styling/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://alexkondov.com/full-stack-tao-styling&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;We don’t build web applications the same way we did a decade ago. We don’t think of pages, we think of components. We don’t pass data to the template to render…&quot;&gt;
  
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Alexkondov&lt;/div&gt;
  &lt;img class=&quot;link_preview_image&quot; alt=&quot;How to Style a React Application&quot; src=&quot;/static/https://cdn4.telesco.pe/file/M-3sSOzRqc6A2JLA1-ckWIzosbdBLhNJ05Hi9JQ72-FNF1JJ5kvMlDG48YbyDdjt5CNJ037Rd_A1dpK_7zhGmbD-vNxF2tzW-Q9v90pfyj7Qs-oQqLEA9ZocToOTu2Yta37IWtTxprZBfQeccasizI_CizIvVIedDWeyF8DwBz8nw2agBpioJBDzyw4zLQFxFADB1TrIyXu28KUJs5xj_wtV-z-Cbvdql0Pgvm-RjHCpZnA7H11VRCpfaC9iEolfdR_6uplfBYbscTHWVIlTB5A00UIRe6B8l8Mrtwx5sOZaHchS-D4hZaLiVWSNvXeN4AWMkDORe1OKpQ8_-DbwHg.jpg&quot; width=&quot;1200&quot; height=&quot;630&quot; loading=&quot;eager&quot; /&gt;
  &lt;div class=&quot;link_preview_title&quot;&gt;How to Style a React Application&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;We don’t build web applications the same way we did a decade ago. We don’t think of pages, we think of components. We don’t pass data to the template to render…&lt;/div&gt;
&lt;/a&gt;</content:encoded></item><item><title>#CSS margin手动调间距？CSS的gap属性才是现代布局的终极解法！</title><link>https://channel.meo-ai.com/posts/403</link><guid isPermaLink="true">https://channel.meo-ai.com/posts/403</guid><pubDate>Tue, 01 Jul 2025 13:28:39 GMT</pubDate><content:encoded>&lt;a href=&quot;/search/result?q=%23CSS&quot; title=&quot;#CSS&quot;&gt;#CSS&lt;/a&gt; margin手动调间距？CSS的gap属性才是现代布局的终极解法！&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://kyleshevlin.com/prefer-gaps-to-margins/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;https://kyleshevlin.com/prefer-gaps-to-margins/&quot;&gt;https://kyleshevlin.com/prefer-gaps-to-margins/&lt;/a&gt;&lt;a class=&quot;tgme_widget_message_link_preview&quot; href=&quot;https://kyleshevlin.com/prefer-gaps-to-margins&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; title=&quot;Prefer using gaps to margins when it comes to your component layouts.&quot;&gt;
  &lt;i class=&quot;link_preview_right_image&quot; style=&quot;background-image:url(&apos;https://cdn4.telesco.pe/file/PlMk8Z9r1beMx-fmTGSynBdpqfuW34Rc47IgF0Qx95zZpuZCilVj482oz-SC4l3eeOeOYZw8a4-hyZdAWQe0DBFcrbHqoNRc83H7IEzQu1iyuwi8HxRXF8gM3qTMG6sTip515KuDG1I5N0VRxXvYBvQG9X1fcaJrlqME6w-236nUKsc75k9_yx5o-zqj4lmw44omQbcUh2luGYf852meXFlEAyRbgE-g-golsPhDTLMV_cFTORGRdsBqXNb0XILBJeZ5lhFrQSJPQkmwMrCtc3CVEED8V6vjXujhfTmAWM0XSAyg0y7WX4qkc8Uq1b6dyQwan2murqOnEH4sz08XVQ.jpg&apos;)&quot;&gt;&lt;/i&gt;
  &lt;div class=&quot;link_preview_site_name accent_color&quot;&gt;Kyle Shevlin&apos;s Blog&lt;/div&gt;
  
  &lt;div class=&quot;link_preview_title&quot;&gt;Prefer Gaps To Margins | Kyle Shevlin&lt;/div&gt;
  &lt;div class=&quot;link_preview_description&quot;&gt;Prefer using gaps to margins when it comes to your component layouts.&lt;/div&gt;
&lt;/a&gt;</content:encoded></item></channel></rss>