<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>CSS on Last Stand</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/</link><description>Recent content in CSS on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 18 Nov 2024 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/posts/frontend/css/index.xml" rel="self" type="application/rss+xml"/><item><title>盒子模型</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-001/</link><pubDate>Mon, 30 Sep 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-001/</guid><description>&lt;p&gt;前端盒子模型是网页布局的基础概念，对于前端开发者来说，理解盒子模型是至关重要的。&lt;/p&gt;
&lt;h3 id="1-盒子模型的组成部分"&gt;1. 盒子模型的组成部分&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;内容（Content）&lt;/strong&gt;:&lt;br&gt;&lt;/li&gt;
&lt;li&gt;盒子中实际显示的文本或图像部分。内容区的大小由 &lt;code&gt;width&lt;/code&gt; 和 &lt;code&gt;height&lt;/code&gt; 属性确定。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内边距（Padding）&lt;/strong&gt;:&lt;br&gt;&lt;/li&gt;
&lt;li&gt;内容与边框之间的空间。它用于增加内容与边框之间的距离，可以通过 &lt;code&gt;padding&lt;/code&gt;、&lt;code&gt;padding-top&lt;/code&gt;、&lt;code&gt;padding-right&lt;/code&gt;、&lt;code&gt;padding-bottom&lt;/code&gt; 和 &lt;code&gt;padding-left&lt;/code&gt; 属性进行设置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;边框（Border）&lt;/strong&gt;:&lt;br&gt;&lt;/li&gt;
&lt;li&gt;环绕在内边距和内容周围的边界。可以设置边框的宽度、样式和颜色。相关属性包括 &lt;code&gt;border&lt;/code&gt;、&lt;code&gt;border-width&lt;/code&gt;、&lt;code&gt;border-style&lt;/code&gt; 和 &lt;code&gt;border-color&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;外边距（Margin）&lt;/strong&gt;:&lt;br&gt;&lt;/li&gt;
&lt;li&gt;盒子外部的空间。用于控制元素与元素之间的间距。可以通过 &lt;code&gt;margin&lt;/code&gt;、&lt;code&gt;margin-top&lt;/code&gt;、&lt;code&gt;margin-right&lt;/code&gt;、&lt;code&gt;margin-bottom&lt;/code&gt; 和 &lt;code&gt;margin-left&lt;/code&gt; 属性进行设置。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-标准盒子模型与替代盒子模型"&gt;2. 标准盒子模型与替代盒子模型&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;标准盒子模型（content-box）&lt;/strong&gt;:&lt;br&gt;&lt;/li&gt;
&lt;li&gt;默认的盒子模型。&lt;code&gt;width&lt;/code&gt; 和 &lt;code&gt;height&lt;/code&gt; 只包含内容区，不包括内边距和边框。因此，元素的实际占用空间是 &lt;code&gt;width + padding + border&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;替代盒子模型（border-box）&lt;/strong&gt;:&lt;br&gt;&lt;/li&gt;
&lt;li&gt;通过设置 &lt;code&gt;box-sizing: border-box&lt;/code&gt;，使得 &lt;code&gt;width&lt;/code&gt; 和 &lt;code&gt;height&lt;/code&gt; 包括内边距和边框，这样内容区的大小会自动调整以适应总高度和宽度。这样做通常可以避免许多布局问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="示例"&gt;示例&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;box&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;box-sizing&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;content-box&lt;/span&gt;; &lt;span style="color:#75715e"&gt;/* 默认值 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;padding&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;border&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;solid&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;black&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在标准模型下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;总宽度 = 200px + 20px (左内边距) + 20px (右内边距) + 5px (左边框) + 5px (右边框) = 250px&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;box&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;box-sizing&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;border-box&lt;/span&gt;; &lt;span style="color:#75715e"&gt;/* 替代模型 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;padding&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;border&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;solid&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;black&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在替代模型下：&lt;/p&gt;</description></item><item><title>伪类和伪元素</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-002/</link><pubDate>Tue, 08 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-002/</guid><description>&lt;h2 id="什么是伪类和伪元素"&gt;什么是伪类和伪元素？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;伪类&lt;/strong&gt;：以冒号(:)开头，用于选择处于特定状态的元素。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;伪元素&lt;/strong&gt;：以双冒号(::)开头，用于在文档中插入虚构的元素。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这么说有点抽象，我们来看具体案例。例如下面的伪类语法表达的意思是：&lt;strong&gt;文档里的那些已经被用户访问过的 a 标签，当鼠标悬浮在它上面的时候，颜色为红色。&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;a&lt;/span&gt;:&lt;span style="color:#a6e22e"&gt;visited&lt;/span&gt;:&lt;span style="color:#a6e22e"&gt;hover&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;效果如下：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-002/image-01.webp"&gt;&lt;/p&gt;
&lt;p&gt;可以看到，无论是 &lt;code&gt;visited&lt;/code&gt;还是 &lt;code&gt;hover&lt;/code&gt;，都表示了 a 标签的某种状态，选择器始终选择的是伪类前面的元素，只不过当出现伪类描述的状态时，样式才生效而已。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意，上面使用的是无痕浏览器打开的页面，是不可能出现 visited 状态的，因为无痕不记录访问历史，我们可以点击控制台的 :hov 图标手动勾选 :visited 和 :hover 来模拟 a 标签「已访问」和「悬浮」两种状态。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们再来看一下伪元素的案例，下面的语法表达的意思是： &lt;strong&gt;div 标签里面首字的颜色为红色。&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt;::&lt;span style="color:#a6e22e"&gt;first-letter&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;效果如下：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-002/image-02.webp"&gt;&lt;/p&gt;
&lt;p&gt;与伪类不同的是，首字并不是 div 元素的某种状态，而是浏览器创建出来的一个虚拟的元素，我们可以在上图的右下角看到 &lt;code&gt;Pseudo ::first-letter element&lt;/code&gt;提示，相当于浏览器自动选中了「彻」字。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：::first-letter 伪元素只作用于块状元素上面，如果把 div 换成 span，就无法选中首字了，除非手动设置 span 的 display 属性为 block 或 inline-block 等块状值。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;从上面的案例当中，我们可以得出两个结论：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;伪类用于&lt;strong&gt;向某些已经存在的选择器添加特殊效果（当状态改变时）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;伪元素用于&lt;strong&gt;将特殊效果添加到不存在的虚拟元素中（浏览器自动创建）&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;也就是说伪类的本质还是类（class），作用于标签本身，只不过限定了状态条件；而伪元素的本质是元素（element），作用于该虚拟元素的内容本身。&lt;/p&gt;
&lt;h2 id="伪类有哪些"&gt;伪类有哪些？&lt;/h2&gt;
&lt;p&gt;按照功能，可划分为以下几类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;动态伪类：&lt;code&gt;:visited&lt;/code&gt;、&lt;code&gt;:focus&lt;/code&gt;、&lt;code&gt;:hover&lt;/code&gt;等&lt;/li&gt;
&lt;li&gt;状态伪类：&lt;code&gt;:disabled&lt;/code&gt;、&lt;code&gt;:empty&lt;/code&gt;、&lt;code&gt;:required&lt;/code&gt; 等&lt;/li&gt;
&lt;li&gt;结构伪类：&lt;code&gt;:first-child&lt;/code&gt;、&lt;code&gt;:nth-of-type&lt;/code&gt;等&lt;/li&gt;
&lt;li&gt;其他伪类：&lt;code&gt;:target&lt;/code&gt;、&lt;code&gt;:lang&lt;/code&gt;、&lt;code&gt;:not()&lt;/code&gt;等&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面的表格详细记录了各种伪类及其描述：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;伪类&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;兼容性&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:active&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素处于活动状态时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Aactive"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:focus&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素已获取焦点时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Afocus"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:hover&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素处于悬浮状态时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Ahover"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:link&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;链接未访问时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Alink"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:visited&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;链接已访问时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Avisited"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:first-child&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素是首个子元素时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Afirst-child"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:last-child&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素是最后一个子元素时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Alast-child"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:nth-child()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素是第 n 个子元素时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Anth-child"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:nth-last-child()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素是倒数第 n 个子元素时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Anth-last-child"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:only-child&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素是唯一子元素时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Aonly-child"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:first-of-type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素是首个特定类型的子元素时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Afirst-of-type"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:last-of-type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素是最后一个特定类型的子元素时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Alast-of-type"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:nth-of-type()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素是第 n 个特定类型的子元素时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Anth-of-type"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:nth-last-of-type()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素是倒数第 n 个特定类型的子元素时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Anth-last-of-type"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:only-of-type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素是唯一的特定类型的子元素时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Aonly-of-type"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:not&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;不满足指定条件时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Anot"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:target&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素 id 匹配到哈希值时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Atarget"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:root&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素是文档树的根元素时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Aroot"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:lang()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;匹配到指定语言时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Alang"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:empty&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;元素处于没有子元素状态时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Aempty"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:invalid&lt;/code&gt; 和 &lt;code&gt;:valid&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;表单项是否有效&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Avalid"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:required&lt;/code&gt; 和 &lt;code&gt;:optional&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;表单项是否必填&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Arequired"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:in-range&lt;/code&gt;和 &lt;code&gt;:out-of-range&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;表单项是否超出范围&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Ain-range"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:read-only&lt;/code&gt;和 &lt;code&gt;:read-write&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;表单项是否只读&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Aread-only"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:enabled&lt;/code&gt;和 &lt;code&gt;:disabled&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;表单项是否禁用&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Aenabled"&gt;✅&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:fullscreen&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;当前处于全屏显示模式时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Afullscreen"&gt;⚠️&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:blank&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;输入框处于输入为空状态时&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;:dir()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;匹配到特定文字书写方向时&lt;/td&gt;
&lt;td&gt;&lt;a href="https://caniuse.com/?search=%3Adir"&gt;❌&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;上表中的兼容性表示：&lt;/p&gt;</description></item><item><title>选择器</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-003/</link><pubDate>Tue, 08 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-003/</guid><description>&lt;h2 id="css选取器分类"&gt;CSS选取器分类&lt;/h2&gt;
&lt;h3 id="通配符选择器"&gt;通配符选择器&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;*&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;margin&lt;/span&gt;:&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;padding&lt;/span&gt;:&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="元素标签选择器"&gt;元素（标签）选择器&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;p&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;color&lt;/span&gt;:&lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="类选择器"&gt;类选择器&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;warning&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;color&lt;/span&gt;:&lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="id选择器"&gt;ID选择器&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#warning{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;color&lt;/span&gt;:&lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;优先级&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;!important&amp;gt;行内样式&amp;gt;ID选择器&amp;gt;类、伪类、属性&amp;gt;元素、伪元素&amp;gt;继承&amp;gt;通配符&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="属性选取器"&gt;属性选取器&lt;/h3&gt;
&lt;p&gt;示例html&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;ul&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;li&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;foo&lt;/span&gt;&amp;gt;1&amp;lt;/&lt;span style="color:#f92672"&gt;li&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;li&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;foo&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;abc&amp;#34;&lt;/span&gt;&amp;gt;2&amp;lt;/&lt;span style="color:#f92672"&gt;li&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;li&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;foo&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;abc efj&amp;#34;&lt;/span&gt;&amp;gt;3&amp;lt;/&lt;span style="color:#f92672"&gt;li&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;li&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;foo&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;abcefj&amp;#34;&lt;/span&gt;&amp;gt;4&amp;lt;/&lt;span style="color:#f92672"&gt;li&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;li&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;foo&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;efjabc&amp;#34;&lt;/span&gt;&amp;gt;5&amp;lt;/&lt;span style="color:#f92672"&gt;li&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;li&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;foo&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;ab&amp;#34;&lt;/span&gt;&amp;gt;6&amp;lt;/&lt;span style="color:#f92672"&gt;li&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;ul&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-003/image-01.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[attribute]&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#f92672"&gt;foo&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;:&lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;选择所有带 &lt;code&gt;foo&lt;/code&gt; 属性的元素&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-003/image-02.png"&gt;&lt;/p&gt;
&lt;h4 id="attributevalue"&gt;[attribute=value]&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;选择 attribute=value 的所有元素。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#f92672"&gt;foo&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#f92672"&gt;abc&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;:&lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-003/image-03.png"&gt;&lt;/p&gt;
&lt;h4 id="attributevalue-1"&gt;[attribute~=value]&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;选择 attribute 属性包含单词 value 的所有元素。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#f92672"&gt;foo&lt;/span&gt;&lt;span style="color:#f92672"&gt;~=&lt;/span&gt;&lt;span style="color:#f92672"&gt;abc&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;:&lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-003/image-04.png"&gt;&lt;/p&gt;
&lt;h4 id="attributevalue-2"&gt;[attribute^=value]&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;选择其 attribute 属性值以 value 开头的所有元素。类似正则的 &lt;code&gt;^&lt;/code&gt;,以什么开始&lt;/p&gt;</description></item><item><title>优先级</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-004/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-004/</guid><description>&lt;p&gt;在前端面试中，经常会遇到CSS选择器的问题三连：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;说一下CSS的选择器有哪些&lt;/li&gt;
&lt;li&gt;优先级是怎样的&lt;/li&gt;
&lt;li&gt;权重计算方式&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;今天就来给大家介绍选择器的优先级和权重计算方式。&lt;/p&gt;
&lt;h2 id="优先级是什么有什么用"&gt;优先级是什么？有什么用？&lt;/h2&gt;
&lt;p&gt;先提出一个问题：如果一个元素通过多种方式设置了字体大小，那么浏览器在最后渲染时会使用哪个属性值呢？&lt;/p&gt;
&lt;p&gt;其实，浏览器会通过优先级来判断哪些属性值与一个元素最为相关，从而在该元素上应用这些属性值。优先级是基于不同种类选择器组成的匹配规则。&lt;/p&gt;
&lt;p&gt;换种说法，优先级就是分配给指定的 CSS 声明的一个权重，它由 &lt;strong&gt;匹配的选择器&lt;/strong&gt; 中的 &lt;strong&gt;每一种选择器类型的数值&lt;/strong&gt; 决定。&lt;/p&gt;
&lt;p&gt;总结一下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;权重决定了你css规则怎样被浏览器解析直到生效，css权重关系到你的css规则是怎样显示的。&lt;/li&gt;
&lt;li&gt;当很多的样式被应用到某一个元素上时，权重决定哪种样式生效。&lt;/li&gt;
&lt;li&gt;每个选择器都有自己的权重。你的每条css规则，都包含一个权重级别。 这个级别是由不同的选择器加权计算的，通过权重，不同的样式最终会作用到你的网页中 。&lt;/li&gt;
&lt;li&gt;如果两个选择器同时作用到一个元素上，权重高者生效。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="权重的计算规则"&gt;权重的计算规则&lt;/h2&gt;
&lt;p&gt;接着介绍权重的计算规则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一优先级：&lt;code&gt;!important&lt;/code&gt;会覆盖页面内任何位置的元素样式&lt;/li&gt;
&lt;li&gt;内联样式，如&lt;code&gt;style=&amp;quot;color: green&amp;quot;&lt;/code&gt;，权值为&lt;strong&gt;1000&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;ID选择器，如&lt;code&gt;#app&lt;/code&gt;，权值为&lt;strong&gt;0100&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;类、伪类、属性选择器，如&lt;code&gt;.foo&lt;/code&gt;, &lt;code&gt;:first-child&lt;/code&gt;, &lt;code&gt;div[class=&amp;quot;foo&amp;quot;]&lt;/code&gt;，权值为&lt;strong&gt;0010&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;标签、伪元素选择器，如&lt;code&gt;div::first-line&lt;/code&gt;，权值为&lt;strong&gt;0001&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;通配符、子类选择器、兄弟选择器，如&lt;code&gt;*, &amp;gt;, +&lt;/code&gt;，权值为&lt;strong&gt;0000&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;继承的样式没有权值&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;权值计算公式：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;权值&lt;/code&gt; = &lt;code&gt;第一等级选择器&lt;/code&gt; x &lt;code&gt;个数&lt;/code&gt;，&lt;code&gt;第二等级选择器&lt;/code&gt; x &lt;code&gt;个数&lt;/code&gt;，&lt;code&gt;第三等级选择器&lt;/code&gt; x &lt;code&gt;个数&lt;/code&gt;，&lt;code&gt;第四等级选择器&lt;/code&gt; x &lt;code&gt;个数&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;选择器&lt;/th&gt;
&lt;th&gt;千位&lt;/th&gt;
&lt;th&gt;百位&lt;/th&gt;
&lt;th&gt;十位&lt;/th&gt;
&lt;th&gt;个位&lt;/th&gt;
&lt;th&gt;优先级&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;h1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0001&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;h1 + p::first-letter&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0003&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;li &amp;gt; a[href*=&amp;ldquo;en-US&amp;rdquo;] &amp;gt; .inline-warning&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0022&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#identifier&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;内联样式&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="权重的比较规则"&gt;权重的比较规则&lt;/h2&gt;
&lt;p&gt;当两个权值进行比较的时候，是从高到低逐级将等级位上的权重值（如 权值 1,0,0,0 对应&amp;ndash;&amp;gt; 第一等级权重值，第二等级权重值，第三等级权重值，第四等级权重值）来进行比较的，而不是简单的 1000个数 + 100个数 + 10个数 + 1个数 的总和来进行比较的，换句话说，低等级的选择器，个数再多也不会越等级超过高等级的选择器的优先级的。&lt;/p&gt;</description></item><item><title>font</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/font/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/font/</guid><description>&lt;h2 id="什么是-font-属性"&gt;什么是 font 属性？&lt;/h2&gt;
&lt;p&gt;在CSS中， &lt;code&gt;font&lt;/code&gt; 属性是一个简写属性，用于设置字体的多个相关属性，包括字体大小、字体样式、字体粗细、字体系列等。使用 &lt;code&gt;font&lt;/code&gt; 属性可以方便地在一个声明中设置多个字体相关的样式。&lt;/p&gt;
&lt;h2 id="font-属性的语法"&gt;font 属性的语法&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;font&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#f92672"&gt;font-style&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#f92672"&gt;font-variant&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#f92672"&gt;font-weight&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#f92672"&gt;font-size&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#f92672"&gt;line-height&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#f92672"&gt;font-family&lt;/span&gt;&lt;span style="color:#f92672"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="各个属性的详细说明"&gt;各个属性的详细说明&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;font-style&lt;/strong&gt;：设置字体的样式。&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;取值：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;normal&lt;/code&gt;：正常字体（默认值）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;italic&lt;/code&gt;：斜体字。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;oblique&lt;/code&gt;：倾斜字体。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt;font-variant&lt;/strong&gt;：设置字体的变体。&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;取值：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;normal&lt;/code&gt;：正常（默认值）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;small-caps&lt;/code&gt;：小型大写字母。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;strong&gt;font-weight&lt;/strong&gt;：设置字体的粗细。&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;取值：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;normal&lt;/code&gt;：正常粗细（默认值）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bold&lt;/code&gt;：加粗。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bolder&lt;/code&gt;：比父元素更粗。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lighter&lt;/code&gt;：比父元素更细。&lt;/li&gt;
&lt;li&gt;数值：可以使用 100 到 900 的数值，100 为最细，900 为最粗。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="4"&gt;
&lt;li&gt;&lt;strong&gt;font-size&lt;/strong&gt;：设置字体的大小。&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;取值：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;可以使用绝对单位（如 &lt;code&gt;px&lt;/code&gt;、 &lt;code&gt;pt&lt;/code&gt;）或相对单位（如 &lt;code&gt;em&lt;/code&gt;、 &lt;code&gt;rem&lt;/code&gt;、 &lt;code&gt;%&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="5"&gt;
&lt;li&gt;&lt;strong&gt;line-height&lt;/strong&gt;：设置行高。&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;取值：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;可以使用数值、单位（如 &lt;code&gt;px&lt;/code&gt;、 &lt;code&gt;em&lt;/code&gt;）或百分比。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="6"&gt;
&lt;li&gt;&lt;strong&gt;font-family&lt;/strong&gt;：设置字体系列。&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;取值：&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;可以指定多个字体名称，以逗号分隔，浏览器将使用第一个可用的字体。&lt;/li&gt;
&lt;li&gt;例如： &lt;code&gt;&amp;quot;Arial&amp;quot;, &amp;quot;Helvetica&amp;quot;, sans-serif&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="使用-font-属性的注意事项"&gt;使用 font 属性的注意事项&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;font&lt;/code&gt; 属性必须按照特定的顺序书写，尤其是 &lt;code&gt;font-size&lt;/code&gt; 和 &lt;code&gt;font-family&lt;/code&gt;，它们是必需的。&lt;/li&gt;
&lt;li&gt;如果使用 &lt;code&gt;font&lt;/code&gt; 属性，其他相关的字体属性（如 &lt;code&gt;font-size&lt;/code&gt; 和 &lt;code&gt;font-family&lt;/code&gt;）不能单独设置。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="实例使用-font-属性设置文本样式"&gt;实例：使用 font 属性设置文本样式&lt;/h2&gt;
&lt;h3 id="html-代码"&gt;HTML 代码&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;html&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;lang&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;zh&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;head&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;meta&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;charset&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;meta&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;viewport&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;content&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;width=device-width, initial-scale=1.0&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;title&lt;/span&gt;&amp;gt;Font 属性示例&amp;lt;/&lt;span style="color:#f92672"&gt;title&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;link&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;rel&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;href&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;styles.css&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;head&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;h1&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&amp;gt;欢迎来到我的网站&amp;lt;/&lt;span style="color:#f92672"&gt;h1&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;p&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&amp;gt;这是一个关于CSS字体属性的示例，展示如何使用font属性设置文本样式。&amp;lt;/&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;html&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="css-代码stylescss"&gt;CSS 代码（styles.css）&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;body&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;font-family&lt;/span&gt;: Arial, &lt;span style="color:#66d9ef"&gt;sans-serif&lt;/span&gt;; &lt;span style="color:#75715e"&gt;/* 设置全局字体 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;title&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;font&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;bold&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;24&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1.5&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Helvetica Neue&amp;#34;&lt;/span&gt;, Arial, &lt;span style="color:#66d9ef"&gt;sans-serif&lt;/span&gt;; &lt;span style="color:#75715e"&gt;/* 设置标题字体样式 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;color&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#333&lt;/span&gt;; &lt;span style="color:#75715e"&gt;/* 字体颜色 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;description&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;font&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;italic&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;normal&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1.8&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Georgia&amp;#34;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;serif&lt;/span&gt;; &lt;span style="color:#75715e"&gt;/* 设置描述文本字体样式 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;color&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#666&lt;/span&gt;; &lt;span style="color:#75715e"&gt;/* 字体颜色 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="解释"&gt;解释&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;HTML结构&lt;/strong&gt;：我们创建了一个包含标题和描述的简单网页。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS样式&lt;/strong&gt;：&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;在 &lt;code&gt;.title&lt;/code&gt; 类中，使用 &lt;code&gt;font&lt;/code&gt; 属性设置了字体为加粗、24px大、行高为1.5、字体系列为 &lt;code&gt;&amp;quot;Helvetica Neue&amp;quot;&lt;/code&gt;，后备字体为 &lt;code&gt;Arial&lt;/code&gt; 和无衬线字体。&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;.description&lt;/code&gt; 类中，使用 &lt;code&gt;font&lt;/code&gt; 属性设置了字体为斜体、正常粗细、16px大、行高为1.8、字体系列为 &lt;code&gt;&amp;quot;Georgia&amp;quot;&lt;/code&gt;，后备字体为衬线字体。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="结果"&gt;结果&lt;/h2&gt;
&lt;p&gt;通过以上代码，浏览器将展示一个标题和描述文本，标题为加粗大字体，描述为斜体较小字体。这样可以清晰地展示不同文本的样式和视觉层次感。&lt;/p&gt;</description></item><item><title>background</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/background/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/background/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;在日常前端开发中，经常需要进行背景或背景图的处理。但是大多数前端er并未真正清楚背景的正确使用方式。经过本章的学习，相信你一定可以解决99%的背景处理问题。&lt;/p&gt;
&lt;h2 id="一简单使用"&gt;一：简单使用&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;背景颜色和背景图片是可以共同出现的&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;div&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-image&lt;/span&gt;: url(&lt;span style="color:#e6db74"&gt;./imgs/1.jpg&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-repeat&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;no-repeat&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;页面展示&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/background/image-01.webp"&gt;&lt;/p&gt;
&lt;h2 id="一background-repeat"&gt;一：background-repeat&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;background-repeat决定背景图片的平铺方式&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;属性值&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-lua" data-lang="lua"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;background&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;repeat&lt;/span&gt;:&lt;span style="color:#66d9ef"&gt;repeat&lt;/span&gt; (&lt;span style="color:#960050;background-color:#1e0010"&gt;默认值&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;background&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;repeat&lt;/span&gt;:no&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;repeat&lt;/span&gt; (&lt;span style="color:#960050;background-color:#1e0010"&gt;不平铺&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;background&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;repeat&lt;/span&gt;:&lt;span style="color:#66d9ef"&gt;repeat&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;x &lt;span style="color:#960050;background-color:#1e0010"&gt;（水平方向平铺）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;background&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;repeat&lt;/span&gt;:&lt;span style="color:#66d9ef"&gt;repeat&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;y &lt;span style="color:#960050;background-color:#1e0010"&gt;（垂直方向平铺）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;1. repeat&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;默认情况下，如果背景图片不能铺满整个盒子时，系统会在水平和垂直方向同时平铺直到覆盖整个盒子&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-image&lt;/span&gt;: url(&lt;span style="color:#e6db74"&gt;./imgs/1.jpg&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-repeat&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;repeat&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/background/image-02.webp"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.repeat-x&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果背景图片不能将盒子的水平方向铺满，则在水平方向采取平铺处理直到铺满盒子的水平方向。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-image&lt;/span&gt;: url(&lt;span style="color:#e6db74"&gt;./imgs/1.jpg&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-repeat&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;repeat-x&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/background/image-03.webp"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.repeat-y&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果背景图片不能将盒子的垂直方向铺满，则在垂直方向采取平铺处理直到铺满盒子的垂直方向。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-image&lt;/span&gt;: url(&lt;span style="color:#e6db74"&gt;./imgs/1.jpg&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-repeat&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;repeat-y&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/background/image-04.webp"&gt;&lt;/p&gt;
&lt;h2 id="二background-position"&gt;二：background-position&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;background-positiont决定背景图片在盒子区域的定位位置。其方位由水平和垂直决定&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;1.px设置&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;px决定了背景图片在盒子水平和垂直方向偏移指定px的距离。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-image&lt;/span&gt;: url(&lt;span style="color:#e6db74"&gt;./imgs/1.jpg&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-repeat&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;no-repeat&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-position&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/background/image-05.webp"&gt;&lt;/p&gt;</description></item><item><title>position</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/position/</link><pubDate>Tue, 08 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/position/</guid><description>&lt;blockquote&gt;
&lt;p&gt;CSS 中 &lt;code&gt;position&lt;/code&gt; 属性用于指定元素的定位方法的类型（&lt;code&gt;static&lt;/code&gt;、&lt;code&gt;relative&lt;/code&gt;、&lt;code&gt;absolute&lt;/code&gt;、&lt;code&gt;fixed&lt;/code&gt;、&lt;code&gt;sticky&lt;/code&gt;）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="静态定位-position-static"&gt;静态定位 position: static&lt;/h3&gt;
&lt;p&gt;此属性未 HTML 元素默认定位，一个元素没有以任何特殊的方式定位，它总是按照页面的正常流程定位。&lt;/p&gt;
&lt;p&gt;在此属性下，属性值 &lt;code&gt;top&lt;/code&gt;、&lt;code&gt;left&lt;/code&gt;、&lt;code&gt;right&lt;/code&gt;、&lt;code&gt;bottom&lt;/code&gt; 和 &lt;code&gt;z-index&lt;/code&gt; 对HTML元素没有影响。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;parent&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;child&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;sibling&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;style&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;type=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;text/css&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .parent {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; width: 480px;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; height: 320px;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: #008800;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .child {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; width: 240px;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; height: 160px;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: #ff0000;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .sibling {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; width: 240px;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; height: 160px;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: #0000ff;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;效果如图：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/position/image-01.webp"&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;为什么使用它呢？将元素设置为 &lt;code&gt;position: static&lt;/code&gt; 的唯一原因是强制删除应用于无法控制的元素上的某些定位。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="相对定位-position-relative"&gt;相对定位 position: relative&lt;/h3&gt;
&lt;p&gt;此属性相对于其正常位置的，在不改变布局的情况下根据元素的当前位置定位元素。&lt;/p&gt;</description></item><item><title>position: sticky</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/position-sticky/</link><pubDate>Sat, 09 Nov 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/position-sticky/</guid><description>&lt;p&gt;如果问，CSS 中 position 属性的取值有几个？大部分人的回答大概是 &lt;code&gt;static&lt;/code&gt;、&lt;code&gt;relative&lt;/code&gt;、&lt;code&gt;absolute&lt;/code&gt;、&lt;code&gt;fixed&lt;/code&gt;，实际上MDN上还有一个 &lt;code&gt;sticky&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;今天我们就来给大家介绍这个容易被忽视的position属性值 &lt;code&gt;sticky&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;先来看看MDN上对于 &lt;code&gt;sticky&lt;/code&gt; 的介绍：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;粘性定位元素（stickily positioned element）是计算后位置属性为 sticky 的元素。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;粘性定位可以被认为是相对定位和固定定位的混合。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;什么是结合两种定位功能于一体呢？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;元素在跨越特定阈值前为相对定位，之后为固定定位。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;也就是元素先按照普通文档流定位，然后相对于该元素在流中的 &lt;code&gt;flow root（BFC）&lt;/code&gt;和 &lt;code&gt;containing block&lt;/code&gt;（最近的块级祖先元素）定位。&lt;/p&gt;
&lt;p&gt;元素定位表现为在跨越特定阈值前为相对定位，之后为固定定位。&lt;/p&gt;
&lt;p&gt;这个特定阈值指的是 top、right、bottom 或 left 之一，换言之，指定 top、right、bottom 或 left 四个阈值其中之一，才可使粘性定位生效。否则其行为与相对定位相同。&lt;/p&gt;
&lt;h2 id="示例"&gt;示例&lt;/h2&gt;
&lt;p&gt;上面的文字描述估计还是很难理解，看看下面这张 GIF 图，想想要实现的话，使用 &lt;code&gt;JS + CSS&lt;/code&gt; 的方式该如何做：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/position-sticky/image-01.gif"&gt;&lt;/p&gt;
&lt;p&gt;按照常规做法，大概是监听页面 &lt;code&gt;scroll&lt;/code&gt; 事件，判断每一区块距离视口顶部距离，超过了则设定该区块 &lt;code&gt;position:fixed&lt;/code&gt;，反之去掉。&lt;/p&gt;
&lt;p&gt;而使用 &lt;code&gt;position:sticky&lt;/code&gt; ，则可以非常方便的实现：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;sticky-box&amp;#34;&lt;/span&gt;&amp;gt;内容1&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;sticky-box&amp;#34;&lt;/span&gt;&amp;gt;内容2&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;sticky-box&amp;#34;&lt;/span&gt;&amp;gt;内容3&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;sticky-box&amp;#34;&lt;/span&gt;&amp;gt;内容4&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;container&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#eee&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;600&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1000&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;margin&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;auto&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;sticky-box&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;position&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;sticky&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;60&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;margin-bottom&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;30&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#ff7300&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;top&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;font-size&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;30&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;text-align&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;center&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;color&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#fff&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;line-height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;60&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;看看上面的 CSS 代码，只是给每个内容区块加上&lt;/p&gt;</description></item><item><title>布局技巧</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-009/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-009/</guid><description>&lt;h3 id="1普通流常规流"&gt;1、普通流（常规流）&lt;/h3&gt;
&lt;p&gt;文档流（流式布局）分为 普通流、定位流、浮动流，不同流内的块级元素和行内元素的布局方式不同，布局方式用 FC（格式化上下文，含有 块级格式化上下文、内联格式化上下文、层叠格式化上下文、灵活格式化上下文等）来命名；&lt;/p&gt;
&lt;p&gt;普通流中的布局规则默认为块级盒子从上到下，垂直排列；内联盒子从左到右，水平排列等；（书写模式（writing-mode）会对流布局产生影响；&lt;/p&gt;
&lt;h3 id="2position"&gt;2、position&lt;/h3&gt;
&lt;p&gt;属性有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;static：默认值，元素依然按照 普通流 的定位规则定位；&lt;/li&gt;
&lt;li&gt;relative&lt;/li&gt;
&lt;li&gt;absolute&lt;/li&gt;
&lt;li&gt;sticky&lt;/li&gt;
&lt;li&gt;fixed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用 position 会脱离常规流，成为定位流，并有其自己的定位规则；&lt;/p&gt;
&lt;h3 id="3float"&gt;3、float&lt;/h3&gt;
&lt;p&gt;属性有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;left&lt;/li&gt;
&lt;li&gt;right&lt;/li&gt;
&lt;li&gt;none&lt;/li&gt;
&lt;li&gt;inherit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用 float 会脱离常规流，成为浮动流，并有其自己的定位规则；&lt;/p&gt;
&lt;h3 id="4table"&gt;4、table&lt;/h3&gt;
&lt;p&gt;使用 HTML 标签来布局；&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;table&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;   &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;th&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;th&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;   &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;th&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;th&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;   &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;        &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;table&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="5flex"&gt;5、flex&lt;/h3&gt;
&lt;p&gt;2009 年 W3C 提供的方案，注意只有 IE 10+ 支持 flex；&lt;/p&gt;
&lt;p&gt;重要的概念：flex 容器，flex 项目，主轴，交叉轴；&lt;/p&gt;
&lt;p&gt;设置某个元素的属性 &lt;code&gt;display: flex;&lt;/code&gt;，此元素就成了 flex 容器，flex 容器内的元素是 flex 项目；&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;flex 容器的属性：&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;flex-direction&lt;/li&gt;
&lt;li&gt;flex-wrap&lt;/li&gt;
&lt;li&gt;flex-flow&lt;/li&gt;
&lt;li&gt;justify-content&lt;/li&gt;
&lt;li&gt;align-items&lt;/li&gt;
&lt;li&gt;align-content&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="2"&gt;
&lt;li&gt;flex 项目的属性&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;flex （flex-grow、flex-shrink、flex-basis）&lt;/li&gt;
&lt;li&gt;order&lt;/li&gt;
&lt;li&gt;align-self&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="6grid"&gt;6、grid&lt;/h3&gt;
&lt;p&gt;二维布局方式，相对于使用 HTML 结构实现的 table 布局，grid 布局都是在 CSS 中完成的；&lt;/p&gt;</description></item><item><title>z-index</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/z-index/</link><pubDate>Sat, 09 Nov 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/z-index/</guid><description>&lt;p&gt;大家可能觉得，&lt;code&gt;z-index&lt;/code&gt; 是一个很简单的属性，你给它设置哪个值，元素就会位于 &lt;code&gt;y&lt;/code&gt; 轴的哪个位置。但它实际上并没有我们想象的这么简单，这个属性背后是一系列决定元素所在层级的规则。&lt;/p&gt;
&lt;p&gt;在进行今天的介绍前，我们先列出三个问题，如果你能一眼看出它们的解决方案，那么恭喜你掌握了&lt;code&gt;z-index&lt;/code&gt;，也就不需要阅读本文了；如果不行，那么耐心看完本文，相信能找到答案。&lt;/p&gt;
&lt;h2 id="三个自测问题"&gt;三个自测问题&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;问题一：为什么&lt;code&gt;z-index&lt;/code&gt; 数值更大，但 &lt;code&gt;Content&lt;/code&gt; 没有在 &lt;code&gt;Box 2&lt;/code&gt; 之上？&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;box1&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Box 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Content &amp;lt;&lt;span style="color:#f92672"&gt;br&lt;/span&gt;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; z-index: 2;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;box2&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Box 2 &amp;lt;&lt;span style="color:#f92672"&gt;br&lt;/span&gt;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; z-index: 1;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;padding&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;25&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;font-size&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;larger&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#box1 {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;chocolate&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;margin-bottom&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;-50&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#content {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;gold&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;z-index&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#box2 {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;cyan&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;margin-top&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;-50&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;z-index&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/z-index/image-01.png"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;问题二：明明 &lt;code&gt;z-index&lt;/code&gt; 数值更小，为什么 &lt;code&gt;Content&lt;/code&gt; 这次反而在&lt;code&gt;Box 2&lt;/code&gt; 之上了？&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;box1&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Box 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Content &amp;lt;&lt;span style="color:#f92672"&gt;br&lt;/span&gt;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; transform: rotate(90deg); &amp;lt;&lt;span style="color:#f92672"&gt;br&lt;/span&gt;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; z-index: 1;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;id&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;box2&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;br&lt;/span&gt;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Box 2 &amp;lt;&lt;span style="color:#f92672"&gt;br&lt;/span&gt;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; z-index: 2;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;padding&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;25&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;font-size&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;larger&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#box1 {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;chocolate&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;margin-bottom&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;-10&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#content {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;gold&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;250&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;z-index&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;transform&lt;/span&gt;: rotate(&lt;span style="color:#ae81ff"&gt;90&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;deg&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#box2 {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;cyan&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;margin-top&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;-10&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;z-index&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/z-index/image-02.png"&gt;&lt;/p&gt;</description></item><item><title>Flexbox</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/flexbox/</link><pubDate>Tue, 08 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/flexbox/</guid><description>&lt;h3 id="一flexbox布局的概念"&gt;一、Flexbox布局的概念&lt;/h3&gt;
&lt;p&gt;Flexbox布局也叫Flex布局，弹性盒子布局。它的&lt;strong&gt;目标&lt;/strong&gt;是提供一个更有效地布局、对齐方式，并且能够使父元素在子元素的大小未知或动态变化情况下仍然能够分配好子元素之间的间隙。&lt;strong&gt;主要思想&lt;/strong&gt;是使父元素能够调整子元素的宽度、高度、排列方式，从而更好的适应可用的布局空间。设定为flex布局的元素能够放大子元素使之尽可能填充可用空间，也可以收缩子元素使之不溢出。 ​&lt;/p&gt;
&lt;p&gt;Flex布局更适合小规模的布局，可以简便、完整、响应式的实现各种页面布局。但是，设为Flex布局以后，其子元素的&lt;code&gt;float&lt;/code&gt;、&lt;code&gt;clear&lt;/code&gt;和&lt;code&gt;vertical-align&lt;/code&gt;属性将失效。Flex弹性盒模型的优势在于只需声明布局应该具有的⾏为，⽽不需要给出具体的实现⽅式，浏览器负责完成实际布局，当布局涉及到不定宽度，分布对⻬的场景时，就要优先考虑弹性盒布局。&lt;/p&gt;
&lt;p&gt;Flex布局是一个完整的模块，它包括了一套完整的属性。其中采用 Flex 布局的元素，称为 Flex 容器，简称&amp;quot;&lt;strong&gt;容器&lt;/strong&gt;&amp;quot;。它的所有子元素就是容器成员，称为 Flex 项目，简称&amp;quot;&lt;strong&gt;项目&lt;/strong&gt;&amp;quot;。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/flexbox/image-01.webp"&gt;&lt;/p&gt;
&lt;p&gt;容器默认存在两个轴：&lt;strong&gt;水平轴&lt;/strong&gt;（main axis）和&lt;strong&gt;垂直轴&lt;/strong&gt;（cross axis），项目默认沿主轴排列（水平轴）：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/flexbox/image-02.webp"&gt;&lt;/p&gt;
&lt;p&gt;这里面涉及到了几个概念，下面来看一下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;main axis&lt;/strong&gt;: Flex 父元素的主轴是指子元素布局的主要方向轴，它由属性flex-direction来确定主轴是水平还是垂直的，默认为水平轴。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;main-start &amp;amp; main-end&lt;/strong&gt;: 分别表示主轴的开始和结束，子元素在父元素中会沿着主轴从main-start到main-end排布。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;main size&lt;/strong&gt;: 单个项目占据主轴的长度大小。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cross axis&lt;/strong&gt;: 交叉轴，与主轴垂直。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cross-start &amp;amp; cross-end&lt;/strong&gt;: 分别表示交叉轴的开始和结束。子元素在交叉轴的排布从cross-start开始到cross-end。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cross size&lt;/strong&gt;: 子元素在交叉轴方向上的大小。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="二父元素属性"&gt;二、父元素属性&lt;/h3&gt;
&lt;p&gt;想要使用flex布局，首先需要给父元素指定为flex布局，这样容器内的元素才能实现flex布局：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#f92672"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;container&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;display&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;flex&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;inline-flex&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里有两种方式可以设置flex布局，使用&lt;code&gt;display: flex;&lt;/code&gt;会生成一个块状的flex容器盒子，使用&lt;code&gt;display: inline-flex;&lt;/code&gt;会生成一个行内的flex容器盒子。如果我们使用块状元素，比如div标签，就可以使用flex，如果使用行内元素，就可以使用inline-flex。多数情况下，我们会使用&lt;strong&gt;display: flex;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;父元素（容器）可以设置以下六个属性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;flex-direction&lt;/li&gt;
&lt;li&gt;flex-wrap&lt;/li&gt;
&lt;li&gt;flex-flow&lt;/li&gt;
&lt;li&gt;justify-content&lt;/li&gt;
&lt;li&gt;align-items&lt;/li&gt;
&lt;li&gt;align-content&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="1-flex-direction"&gt;1. flex-direction&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;flex-direction&lt;/strong&gt;：主轴方向，它决定了容器内元素排列方向，它有四个属性值：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;container&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;flex-direction&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;row&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;row-reverse&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;column&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;column-reverse&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;（1）&lt;code&gt;flex-direction: row&lt;/code&gt;：默认值，沿水平主轴从左到右排列，起点在左沿&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/flexbox/image-03.webp"&gt;&lt;/p&gt;
&lt;p&gt;（2）&lt;code&gt;flex-direction: row-reverse&lt;/code&gt;：沿水平主轴从右到左排列，起点在右沿&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/flexbox/image-04.webp"&gt;&lt;/p&gt;
&lt;p&gt;（3）&lt;code&gt;flex-direction: column&lt;/code&gt;：沿垂直主轴从上到下排列，起点在上沿&lt;/p&gt;</description></item><item><title>Grid布局</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-012/</link><pubDate>Tue, 08 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-012/</guid><description>&lt;h2 id="grid-布局是什么"&gt;Grid 布局是什么？&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Grid&lt;/code&gt; 布局即网格布局，是一种新的 &lt;code&gt;CSS&lt;/code&gt; 布局模型，比较擅长将一个页面划分为几个主要区域，以及定义这些区域的大小、位置、层次等关系。号称是最强大的的 &lt;code&gt;CSS&lt;/code&gt; 布局方案，是目前唯一一种 &lt;code&gt;CSS&lt;/code&gt; 二维布局。利用 &lt;code&gt;Grid&lt;/code&gt; 布局，我们可以轻松实现类似下图布局，&lt;a href="https://codepen.io/gpingfeng/pen/qBbveKB?editors=1100"&gt;演示地址&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-012/image-01.webp"&gt;&lt;/p&gt;
&lt;h2 id="grid-布局和-flex-布局"&gt;Grid 布局和 flex 布局&lt;/h2&gt;
&lt;p&gt;讲到布局，我们就会想到 &lt;code&gt;flex&lt;/code&gt; 布局，甚至有人认为竟然有 &lt;code&gt;flex&lt;/code&gt; 布局了，似乎没有必要去了解 &lt;code&gt;Grid&lt;/code&gt; 布局。但 &lt;code&gt;flex&lt;/code&gt; 布局和 &lt;code&gt;Grid&lt;/code&gt; 布局有实质的区别，那就是 &lt;strong&gt;&lt;code&gt;flex&lt;/code&gt; 布局是一维布局，&lt;code&gt;Grid&lt;/code&gt; 布局是二维布局&lt;/strong&gt;。&lt;code&gt;flex&lt;/code&gt; 布局一次只能处理一个维度上的元素布局，一行或者一列。&lt;code&gt;Grid&lt;/code&gt; 布局是将容器划分成了“行”和“列”，产生了一个个的网格，我们可以将网格元素放在与这些行和列相关的位置上，从而达到我们布局的目的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Grid&lt;/code&gt; 布局远比 &lt;code&gt;flex&lt;/code&gt; 布局强大！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;flex布局示例:&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-012/image-02.webp"&gt;&lt;/p&gt;
&lt;p&gt;Grid 布局示例：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-012/image-03.webp"&gt;&lt;/p&gt;
&lt;h2 id="grid-的一些基础概念"&gt;Grid 的一些基础概念&lt;/h2&gt;
&lt;p&gt;我们使用 Grid 实现一个小例子，演示 Grid 的一些基础概念，&lt;a href="https://codepen.io/gpingfeng/pen/QWyoexm?editors=1100"&gt;演示地址&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;wrapper&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;one item&amp;#34;&lt;/span&gt;&amp;gt;One&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;two item&amp;#34;&lt;/span&gt;&amp;gt;Two&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;three item&amp;#34;&lt;/span&gt;&amp;gt;Three&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;four item&amp;#34;&lt;/span&gt;&amp;gt;Four&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;five item&amp;#34;&lt;/span&gt;&amp;gt;Five&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;six item&amp;#34;&lt;/span&gt;&amp;gt;Six&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;wrapper&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;margin&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;60&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;/* 声明一个容器 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;display&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;grid&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;/* 声明列的宽度 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;grid-template-columns&lt;/span&gt;: &lt;span style="color:#a6e22e"&gt;repeat&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;/* 声明行间距和列间距 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grid-gap: &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;/* 声明行的高度 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;grid-template-rows&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;one&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#19CAAD&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;two&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#8CC7B5&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;three&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#D1BA74&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;four&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#BEE7E9&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;five&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#E6CEAC&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;six&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#ECAD9E&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;item&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;text-align&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;center&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;font-size&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;%&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;color&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#fff&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-012/image-04.webp"&gt;&lt;/p&gt;</description></item><item><title>浮动、清除浮动和BFC</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-013/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-013/</guid><description>&lt;p&gt;浮动、清除浮动和BFC是前端开发中常见的概念，它们对于页面布局及美化至关重要。&lt;/p&gt;
&lt;h2 id="浮动"&gt;浮动&lt;/h2&gt;
&lt;p&gt;在网页设计中，浮动是一种常见的布局技术，可以让元素脱离文档流，我们来看看它有什么作用吧！&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;使文字环绕&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;代码示例如下：&lt;/p&gt;
&lt;p&gt;html结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;&amp;lt;div class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;box&amp;#34;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;&amp;lt;div class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;text&amp;#34;&amp;gt;一段文字&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;css样式：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;box&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;coral&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;若不加浮动，则页面是这样的效果：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-013/image-01.webp"&gt;&lt;/p&gt;
&lt;p&gt;但若是在box加上float: left;(向左浮动)，则能使文字环绕box这个盒子：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;box&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;coral&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;float&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;left&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-013/image-02.webp"&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt;让块级元素同行显示&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;块级元素本身是占据一整行的，但浮动能让多个块级元素处于同一行，示例如下：&lt;/p&gt;
&lt;p&gt;若不加浮动，则多个块级元素各自占据一行：&lt;/p&gt;
&lt;p&gt;html结构：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;ul&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;li&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;li&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;li&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;li&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;li&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;3&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;li&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;ul&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;css样式：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;margin&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;padding&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ul&lt;/span&gt; &lt;span style="color:#f92672"&gt;li&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;list-style&lt;/span&gt;:&lt;span style="color:#66d9ef"&gt;none&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;200&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;100&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;font-size&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;li&lt;/span&gt;:&lt;span style="color:#a6e22e"&gt;nth-child&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;{&lt;span style="color:#75715e"&gt;/*子容器选择器 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: rgb(&lt;span style="color:#ae81ff"&gt;227&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;149&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;149&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;li&lt;/span&gt;:&lt;span style="color:#a6e22e"&gt;nth-child&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;2&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: rgb(&lt;span style="color:#ae81ff"&gt;205&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;139&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;197&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;li&lt;/span&gt;:&lt;span style="color:#a6e22e"&gt;nth-child&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;3&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: rgb(&lt;span style="color:#ae81ff"&gt;145&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;212&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;227&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;页面如图：&lt;/p&gt;</description></item><item><title>单位</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-014/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-014/</guid><description>&lt;p&gt;说起CSS单位，我们最熟悉的可能就是像素单位（px），它是一个绝对单位，也就是说一个10px的文字，放在哪里都是一样大的。单位可以影响颜色、距离、尺寸等一系列的属性。CSS中单位的形式有很多种，下面就分别来看看这些单位。 &lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-014/image-01.webp"&gt;&lt;/p&gt;
&lt;h3 id="1-相对单位"&gt;1. 相对单位&lt;/h3&gt;
&lt;p&gt;相对单位就是相对于另一个长度的长度。CSS中的相对单位主要分为两大类：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;字体相对单位，他们都是根据font-size来进行计算的。常见的字体相对单位有：em、rem、ex、ch；&lt;/li&gt;
&lt;li&gt;视窗相对单位，他们都是根据视窗大小来决定的。常见的视窗相对单位有vw、vh、vmax、vmin。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面就来看看这些常见的CSS单位。&lt;/p&gt;
&lt;h4 id="1em-和-rem"&gt;（1）em 和 rem&lt;/h4&gt;
&lt;p&gt;em是最常见的相对长度单位，适合基于特定的字号进行排版。根据CSS的规定，1em 等于元素的font-size属性的值。&lt;/p&gt;
&lt;p&gt;em 是相对于父元素的字体大小进行计算的。如果当前对行内文本的字体尺寸未进行显示设置，则相对于浏览器的默认字体尺寸。当DOM元素嵌套加深时，并且同时给很多层级显式的设置了font-size的值的单位是em，那么就需要层层计算，复杂度会很高。&lt;/p&gt;
&lt;p&gt;当然，上面的这个说法是不严谨 的。来看一个例子：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#f92672"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color:#f92672"&gt;html&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;html&lt;/span&gt; &lt;span style="color:#f92672"&gt;lang&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;en&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;head&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;meta&lt;/span&gt; &lt;span style="color:#f92672"&gt;charset&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;title&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;Document&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;title&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;style&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;parent&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;width&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;300&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;font-size&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;child&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;border&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;em&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;solid&lt;/span&gt; ;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;style&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;head&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#f92672"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;parent&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#f92672"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;child&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;子元素&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#f92672"&gt;html&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里给父元素设置了字体大小为20px，然后给子元素的border宽度设置为1em，这时，子元素的border值为20px，确实是相对于父元素的字体大小设置的：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-014/image-02.webp"&gt;&lt;/p&gt;
&lt;p&gt;那如果我们给子元素的字体设置为30px：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;child&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;font-size&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;30&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;border&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;em&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;solid&lt;/span&gt; ;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这时可以看到，子元素的边框宽度就是30px，它是相对自己大小进行计算的：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-014/image-03.webp"&gt;&lt;/p&gt;
&lt;p&gt;所以，可以得出结论：&lt;strong&gt;如果自身元素是没有设置字体大小的，那么就会根据其父元素的字体大小作为参照去计算，如果元素本身已经设置了字体，那么就会基于自身的字体大小进行计算&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;em单位除了可以作用于 font-size之外，还可以运用于其他使用长度的属性，比如border-width、width、height、margin、padding、text-shadow等。&lt;/p&gt;
&lt;p&gt;所以，em的使用还是比较复杂的，它可能会继承任意一级父元素的字体大小。需要谨慎使用。&lt;/p&gt;
&lt;p&gt;rem相对于em就简单了很多，它是根据页面的根元素（根元素）的字体大小来计算的。来对上面的例子进行修改：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;child&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;font-size&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;30&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;border&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;rem&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;solid&lt;/span&gt; ;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;html&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;font-size&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;25&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;效果如下，可以看到，边框的长度变成了25px，它是根据根元素html的字体大小计算的：&lt;/p&gt;</description></item><item><title>BFC</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/bfc/</link><pubDate>Sat, 09 Nov 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/bfc/</guid><description>&lt;p&gt;&lt;code&gt;BFC&lt;/code&gt; 是前端面试中经常会被问到的一个知识点，今天就来带大家深入了解下什么是 &lt;code&gt;BFC&lt;/code&gt; 以及它的作用。&lt;/p&gt;
&lt;h2 id="文档流"&gt;文档流&lt;/h2&gt;
&lt;p&gt;在介绍BFC之前，需要先给大家介绍一下文档流。&lt;/p&gt;
&lt;p&gt;我们常说的文档流其实分为&lt;code&gt;定位流&lt;/code&gt;、&lt;code&gt;浮动流&lt;/code&gt;、&lt;code&gt;普通流&lt;/code&gt;三种。&lt;/p&gt;
&lt;h2 id="绝对定位absolute-positioning"&gt;绝对定位(Absolute positioning)&lt;/h2&gt;
&lt;p&gt;如果元素的属性 &lt;code&gt;position&lt;/code&gt; 为 &lt;code&gt;absolute&lt;/code&gt; 或 &lt;code&gt;fixed&lt;/code&gt;，它就是一个绝对定位元素。&lt;/p&gt;
&lt;p&gt;在绝对定位布局中，元素会整体脱离普通流，因此绝对定位元素不会对其兄弟元素造成影响，而元素具体的位置由绝对定位的坐标决定。&lt;/p&gt;
&lt;p&gt;它的定位相对于它的包含块，相关CSS属性：&lt;code&gt;top&lt;/code&gt;、&lt;code&gt;bottom&lt;/code&gt;、&lt;code&gt;left&lt;/code&gt;、&lt;code&gt;right&lt;/code&gt;；&lt;/p&gt;
&lt;p&gt;对于 &lt;code&gt;position: absolute&lt;/code&gt;，元素定位将相对于上级元素中最近的一个&lt;code&gt;relative、fixed、absolute&lt;/code&gt;，如果没有则相对于body；&lt;/p&gt;
&lt;p&gt;对于 &lt;code&gt;position:fixed&lt;/code&gt;，正常来说是相对于浏览器窗口定位的，但是当&lt;strong&gt;元素祖先的 &lt;code&gt;transform&lt;/code&gt; 属性非 &lt;code&gt;none&lt;/code&gt; 时，会相对于该祖先进行定位&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="浮动-float"&gt;浮动 (float)&lt;/h2&gt;
&lt;p&gt;在浮动布局中，元素首先按照普通流的位置出现，然后根据浮动的方向尽可能的向左边或右边偏移，其效果与印刷排版中的文本环绕相似。&lt;/p&gt;
&lt;h2 id="普通流-normal-flow"&gt;普通流 (normal flow)&lt;/h2&gt;
&lt;p&gt;普通流其实就是指BFC中的FC。FC(&lt;code&gt;Formatting Context&lt;/code&gt;)，直译过来是格式化上下文，它是页面中的一块渲染区域，有一套渲染规则，决定了其子元素如何布局，以及和其他元素之间的关系和作用。&lt;/p&gt;
&lt;p&gt;在普通流中，元素按照其在 HTML 中的先后位置至上而下布局，在这个过程中，行内元素水平排列，直到当行被占满然后换行。块级元素则会被渲染为完整的一个新行。&lt;/p&gt;
&lt;p&gt;除非另外指定，否则所有元素默认都是普通流定位，也可以说，普通流中元素的位置由该元素在 HTML 文档中的位置决定。&lt;/p&gt;
&lt;h2 id="bfc-概念"&gt;BFC 概念&lt;/h2&gt;
&lt;p&gt;先看下MDN上关于BFC的定义：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;块格式化上下文（&lt;code&gt;Block Formatting Context&lt;/code&gt;，&lt;code&gt;BFC&lt;/code&gt;） 是Web页面的可视CSS渲染的一部分，是块盒子的布局过程发生的区域，也是浮动元素与其他元素交互的区域。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;具有 &lt;code&gt;BFC&lt;/code&gt; 特性的元素可以看作是隔离了的独立容器，容器里面的元素不会在布局上影响到外面的元素，并且 &lt;code&gt;BFC&lt;/code&gt; 具有普通容器所没有的一些特性。&lt;/p&gt;
&lt;p&gt;通俗一点来讲，可以把 &lt;code&gt;BFC&lt;/code&gt; 理解为一个封闭的大箱子，箱子内部的元素无论如何翻江倒海，都不会影响到外部。&lt;/p&gt;
&lt;p&gt;除了 BFC，还有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;IFC&lt;/code&gt;（行级格式化上下文）- &lt;code&gt;inline&lt;/code&gt; 内联&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GFC&lt;/code&gt;（网格布局格式化上下文）- &lt;code&gt;display: grid&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FFC&lt;/code&gt;（自适应格式化上下文）- &lt;code&gt;display: flex&lt;/code&gt;或&lt;code&gt;display: inline-flex&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：同一个元素不能同时存在于两个 &lt;code&gt;BFC&lt;/code&gt; 中。&lt;/p&gt;</description></item><item><title>动画</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-016/</link><pubDate>Tue, 08 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-016/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;CSS中有几个特别相近的几个属性。他们是&lt;code&gt;transition&lt;/code&gt;,&lt;code&gt;transform&lt;/code&gt;,&lt;code&gt;animation&lt;/code&gt;。可能还有人对&lt;code&gt;translate&lt;/code&gt;是什么也不清楚，那我们先给个简单的介绍。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;属性&lt;/th&gt;
&lt;th&gt;含义&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;transition 过渡&lt;/td&gt;
&lt;td&gt;用于设置元素的样式过度，和animation有着类似的效果，但细节上有很大的不同&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;transform 变形&lt;/td&gt;
&lt;td&gt;用于元素进行旋转、缩放、移动或倾斜，和设置样式的动画并没有什么关系，就相当于color一样用来设置元素的“外表”&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;animation 动画&lt;/td&gt;
&lt;td&gt;css动画属性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;translate 移动&lt;/td&gt;
&lt;td&gt;只是transform的一个属性值，即移动。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="transition-过渡"&gt;transition 过渡&lt;/h2&gt;
&lt;p&gt;字面意思上来讲，就是元素从这个属性(color)的某个值(red)过渡到这个属性(color)的另外一个值(green)，这是一个状态的转变，需要一种条件来触发这种转变，比如我们平时用到的:hoever、:focus、:checked、媒体查询或者JavaScript。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;一条transition规则，是可以定义多个属性的变化的，中间用逗号隔开，如果是全部属性变化则用“all”即可。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;语法：&lt;strong&gt;&lt;code&gt;transition: property duration timing-function delay;&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;值&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;transition-property&lt;/td&gt;
&lt;td&gt;规定设置过渡效果的 CSS 属性的名称&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;transition-duration&lt;/td&gt;
&lt;td&gt;规定完成过渡效果需要多少秒或毫秒&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;transition-timing-function&lt;/td&gt;
&lt;td&gt;规定速度效果的速度曲线&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;transition-delay&lt;/td&gt;
&lt;td&gt;定义过渡效果何时开始&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;我发现简写时候的顺序并不一定就是写死的，经过测试在chrome上只要delay在duration后面即可。当然按照标准写是最好的。&lt;/p&gt;
&lt;h2 id="demo"&gt;Demo&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;!DOCTYPE html&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;html lang&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;en&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;head&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;title&amp;gt;transition&amp;lt;/title&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;style&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#box {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; height: 100px;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; width: 100px;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background: green;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; transition: transform 1s ease-in 1s;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#box:hover {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; transform: rotate&lt;span style="color:#f92672"&gt;(&lt;/span&gt;180deg&lt;span style="color:#f92672"&gt;)&lt;/span&gt; scale&lt;span style="color:#f92672"&gt;(&lt;/span&gt;.5, .5&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/style&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/head&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;body&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;div id&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;box&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/body&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/html&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;效果&lt;/p&gt;</description></item><item><title>transition</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/transition/</link><pubDate>Tue, 08 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/transition/</guid><description>&lt;p&gt;CSS &lt;code&gt;transition&lt;/code&gt; 提供了一种在更改 CSS 属性时控制动画速度的方法。其可以让属性变化成为一个持续一段时间的，而不是立即生效的过程。&lt;/p&gt;
&lt;p&gt;比如，将一个元素的颜色从白色改为黑色，通常这个改变是立即生效的，使用 CSS 过渡后该元素的颜色将按照一定的曲线速率从白色变化为黑色。这个过程可以自定义。&lt;/p&gt;
&lt;p&gt;通常将两个状态之间的过渡称为&lt;strong&gt;隐式过渡&lt;/strong&gt;，因为开始与结束之间的状态由浏览器决定。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/transition/image-01.webp"&gt;&lt;/p&gt;
&lt;p&gt;CSS 过渡可以决定哪些属性发生动画效果（通过明确地列出这些属性），何时开始（通过设置延时），持续多久（通过设置时长）以及如何动画（通过定义缓动函数，如线性或先快后慢）。比如在不同的伪元素之间切换，像是 &lt;code&gt;:hover&lt;/code&gt;，&lt;code&gt;:active&lt;/code&gt; 或者通过 JavaScript 实现的状态变化。&lt;/p&gt;
&lt;p&gt;开发者可以定义哪一属性需以何种方式用于动画，由此允许创造复杂的过渡。然而因为为某些属性赋予动画无意义，所以这些属性无动画性。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;备注： auto 值常常较复杂，规范指出不要在它上动画。一些用户代理，比如基于 Gecko 的，实现了这个需求；然而另外一些用户代理，比如基于 WebKit 的，没有这么严格限制。在 auto 上使用动画，取决于浏览器及其版本，可能会导致非预期结果，应当避免使用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="属性"&gt;属性&lt;/h2&gt;
&lt;p&gt;以下 &lt;code&gt;transition&lt;/code&gt; 属性，若有多个属性值，则以&lt;code&gt;,&lt;/code&gt;（逗号）衔接。&lt;/p&gt;
&lt;h3 id="transition-property"&gt;transition-property&lt;/h3&gt;
&lt;p&gt;指定哪个或哪些 CSS 属性名称用于过渡。只有指定的属性才会在过渡中发生动画，其他属性仍如通常那样瞬间变化。如果指定简写属性（比如 &lt;code&gt;background&lt;/code&gt;），那么其完整版中所有可以动画的属性都会被应用过渡。&lt;/p&gt;
&lt;p&gt;取值如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;none&lt;/code&gt;：没有过渡动画。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;all&lt;/code&gt;（&lt;strong&gt;初始值&lt;/strong&gt;）：所有可被动画的属性都表现出过渡动画。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;custom-ident&amp;gt;&lt;/code&gt;：属性名称。由小写字母 a 到 z，数字 0 到 9，下划线（_）和破折号（-）。第一个不能为非破折号字符或数字。同时，不能以两个破折号开头。通俗来说就是可以是自定义名称也可以是css规范中的属性名。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="transition-duration"&gt;transition-duration&lt;/h3&gt;
&lt;p&gt;表示过渡属性从旧的值转变到新的值所需要的时间。你可以为所有属性指定一个值，或者指定多个值，或者为每个属性指定不同的时长。&lt;/p&gt;
&lt;p&gt;该属性值以秒（s）或毫秒（ms）为单位指定过渡动画所需的时间。默认值为 &lt;strong&gt;0s&lt;/strong&gt;，表示不会呈现过渡动画，属性会瞬间完成转变。不接受负值。&lt;/p&gt;
&lt;p&gt;可以指定多个时长，每个时长会被应用到由 &lt;code&gt;transition-property&lt;/code&gt; 指定的对应属性上。&lt;/p&gt;
&lt;p&gt;如果某个属性的值列表小于 &lt;code&gt;transition-property&lt;/code&gt; 的属性值数量，那么时长列表会重复，重复规则是按照现有值进行重复。例如：&lt;/p&gt;
&lt;p&gt;如3s，则重复多个3s&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;transition-property&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;opacity&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;left&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;top&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;transition-duration&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将视为：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;transition-property&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;opacity&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;left&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;top&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;transition-duration&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;s&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;s&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;s&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果是3s，5s，则会重复多个3s，5s。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;transition-property&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;opacity&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;left&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;top&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;height&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;transition-duration&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;s&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将视为：&lt;/p&gt;</description></item><item><title>响应式设计</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-018/</link><pubDate>Tue, 08 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-018/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;响应式布局指的是同一页面在不同屏幕尺寸下有不同的布局。传统的开发方式是PC端开发一套，手机端再开发一套，而使用响应式布局只要开发一套就够，缺点就是&lt;code&gt;CSS&lt;/code&gt;比较重。下面是博客网站对不同设备适配后的结果，分别是&lt;code&gt;iPhone5/SE&lt;/code&gt;,&lt;code&gt;iphone6/7/8&lt;/code&gt;,&lt;code&gt;iphone 6/7/8 plus&lt;/code&gt;,&lt;code&gt;ipad pro&lt;/code&gt;,&lt;code&gt;dell台式宽屏(1440 X 900)&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;响应式设计与自适应设计的区别：响应式开发一套界面，通过检测视口分辨率，针对不同客户端在客户端做代码处理，来展现不同的布局和内容；自适应需要开发多套界面，通过检测视口分辨率，来判断当前访问的设备是pc端、平板、手机，从而请求服务层，返回不同的页面。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-018/image-01.webp"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-018/image-02.webp"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-018/image-03.webp"&gt;&lt;/p&gt;
&lt;h2 id="响应式布局的实现方案"&gt;响应式布局的实现方案&lt;/h2&gt;
&lt;h3 id="1-媒体查询"&gt;1. 媒体查询&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;CSS3&lt;/code&gt;媒体查询可以让我们针对不同的媒体类型定义不同的样式，当重置浏览器窗口大小的过程中，页面也会根据浏览器的宽度和高度重新渲染页面。&lt;/p&gt;
&lt;h4 id="如何选择屏幕大小分割点"&gt;如何选择屏幕大小分割点&lt;/h4&gt;
&lt;p&gt;如何确定媒体查询的分割点也是一个开发中会遇到的问题，下面是市场上的移动设备和电脑屏幕分辨率的分布情况，可以发现不同品牌和型号的设备屏幕分辨率一般都不一样&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-018/image-04.webp"&gt;&lt;/p&gt;
&lt;p&gt;如果我们选择&lt;code&gt;600px&lt;/code&gt;,&lt;code&gt;900px&lt;/code&gt;,&lt;code&gt;1200px&lt;/code&gt;,&lt;code&gt;1800px&lt;/code&gt;作为分割点，可以适配到常见的14个机型：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-018/image-05.webp"&gt;&lt;/p&gt;
&lt;p&gt;当然这只是其中的一种分割方案，我们还可以这样划分：&lt;code&gt;480px&lt;/code&gt;,&lt;code&gt;800px&lt;/code&gt;,&lt;code&gt;1400px&lt;/code&gt;,&lt;code&gt;1400px&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-018/image-06.webp"&gt;&lt;/p&gt;
&lt;p&gt;而作为曾经典型的响应式布局框架，&lt;code&gt;Bootstrap&lt;/code&gt;是怎么进行断点的呢？&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-018/image-07.webp"&gt;&lt;/p&gt;
&lt;p&gt;上面的分割方案不一定满足项目中的实际需求，我们可以先用跨度大的分割点进行分割，如果出现不适配的情况可以再根据实际情况增加新的分割点。&lt;/p&gt;
&lt;h4 id="移动优先-or-pc优先"&gt;移动优先 OR PC优先&lt;/h4&gt;
&lt;p&gt;不管是移动优先还是PC优先，都是依据当随着屏幕宽度增大或减小的时候，后面的样式会覆盖前面的样式。因此，移动端优先首先使用的是&lt;code&gt;min-width&lt;/code&gt;，PC端优先使用的&lt;code&gt;max-width&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;移动优先:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;/* iphone6 7 8 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;body&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;yellow&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;/* iphone 5 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#66d9ef"&gt;media&lt;/span&gt; &lt;span style="color:#f92672"&gt;screen&lt;/span&gt; &lt;span style="color:#f92672"&gt;and&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;max-width&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#f92672"&gt;320px&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;body&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;red&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;/* iphoneX */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#66d9ef"&gt;media&lt;/span&gt; &lt;span style="color:#f92672"&gt;screen&lt;/span&gt; &lt;span style="color:#f92672"&gt;and&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;min-width&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#f92672"&gt;375px&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#f92672"&gt;and&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;-webkit-device-pixel-ratio&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#f92672"&gt;3&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;body&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#0FF000&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;/* iphone6 7 8 plus */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#66d9ef"&gt;media&lt;/span&gt; &lt;span style="color:#f92672"&gt;screen&lt;/span&gt; &lt;span style="color:#f92672"&gt;and&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;min-width&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#f92672"&gt;414px&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;body&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;blue&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;/* ipad */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#66d9ef"&gt;media&lt;/span&gt; &lt;span style="color:#f92672"&gt;screen&lt;/span&gt; &lt;span style="color:#f92672"&gt;and&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;min-width&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#f92672"&gt;768px&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;body&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;green&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;/* ipad pro */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#66d9ef"&gt;media&lt;/span&gt; &lt;span style="color:#f92672"&gt;screen&lt;/span&gt; &lt;span style="color:#f92672"&gt;and&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;min-width&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#f92672"&gt;1024px&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;body&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;#FF00FF&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;/* pc */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@&lt;span style="color:#66d9ef"&gt;media&lt;/span&gt; &lt;span style="color:#f92672"&gt;screen&lt;/span&gt; &lt;span style="color:#f92672"&gt;and&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;min-width&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#f92672"&gt;1100px&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;body&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;black&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;PC优先：&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>变量</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-019/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-019/</guid><description>&lt;h2 id="一变量的声明"&gt;一、变量的声明&lt;/h2&gt;
&lt;p&gt;声明变量的时候，变量名前面要加两根连词线（&lt;code&gt;--&lt;/code&gt;）。&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;body&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --foo: &lt;span style="color:#ae81ff"&gt;#7F583F&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --bar: &lt;span style="color:#ae81ff"&gt;#F7EFD2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;上面代码中，&lt;code&gt;body&lt;/code&gt;选择器里面声明了两个变量：&lt;code&gt;--foo&lt;/code&gt;和&lt;code&gt;--bar&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;它们与&lt;code&gt;color&lt;/code&gt;、&lt;code&gt;font-size&lt;/code&gt;等正式属性没有什么不同，只是没有默认含义。所以 CSS 变量（CSS variable）又叫做**&amp;ldquo;CSS 自定义属性&amp;rdquo;**（CSS custom properties）。因为变量与自定义的 CSS 属性其实是一回事。&lt;/p&gt;
&lt;p&gt;你可能会问，为什么选择两根连词线（&lt;code&gt;--&lt;/code&gt;）表示变量？因为&lt;code&gt;$foo&lt;/code&gt;被 Sass 用掉了，&lt;code&gt;@foo&lt;/code&gt;被 Less 用掉了。为了不产生冲突，官方的 CSS 变量就改用两根连词线了。&lt;/p&gt;
&lt;p&gt;各种值都可以放入 CSS 变量。&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;:&lt;span style="color:#a6e22e"&gt;root&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --main-color: &lt;span style="color:#ae81ff"&gt;#4d4e53&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --main-bg: rgb(&lt;span style="color:#ae81ff"&gt;255&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;255&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;255&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --logo-border-color: &lt;span style="color:#66d9ef"&gt;rebeccapurple&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --header-height: &lt;span style="color:#ae81ff"&gt;68&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --content-padding: &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --base-line-height: &lt;span style="color:#ae81ff"&gt;1.428571429&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --transition-duration: &lt;span style="color:#ae81ff"&gt;.35&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;s&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --external-link: &lt;span style="color:#e6db74"&gt;&amp;#34;external link&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --margin-top: calc(&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;vh&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;变量名大小写敏感，&lt;code&gt;--header-color&lt;/code&gt;和&lt;code&gt;--Header-Color&lt;/code&gt;是两个不同变量。&lt;/p&gt;
&lt;h2 id="二var-函数"&gt;二、var() 函数&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;var()&lt;/code&gt;函数用于读取变量。&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;a&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;color&lt;/span&gt;: &lt;span style="color:#a6e22e"&gt;var&lt;/span&gt;(&lt;span style="color:#f92672"&gt;--&lt;/span&gt;foo);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;text-decoration-color&lt;/span&gt;: &lt;span style="color:#a6e22e"&gt;var&lt;/span&gt;(&lt;span style="color:#f92672"&gt;--&lt;/span&gt;bar);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;var()&lt;/code&gt;函数还可以使用第二个参数，表示变量的默认值。如果该变量不存在，就会使用这个默认值。&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;color&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#f92672"&gt;var&lt;/span&gt;&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#f92672"&gt;--foo&lt;/span&gt;&lt;span style="color:#f92672"&gt;,&lt;/span&gt; #7F583F&lt;span style="color:#f92672"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;第二个参数不处理内部的逗号或空格，都视作参数的一部分。&lt;/p&gt;</description></item><item><title>display</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/display/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/display/</guid><description>&lt;h4 id="一display属性介绍"&gt;一、display属性介绍&lt;/h4&gt;
&lt;p&gt;display 属性规定元素应该生成的框的类型。&lt;/p&gt;
&lt;p&gt;以下是一些关于display比较常用的属性值：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;值&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;元素不会显示&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;block&lt;/td&gt;
&lt;td&gt;此元素将显示为块级元素，此元素前后会带有换行符。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inline&lt;/td&gt;
&lt;td&gt;默认。此元素会被显示为内联元素，元素前后没有换行符。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;line-block&lt;/td&gt;
&lt;td&gt;行内块元素。（CSS2.1 新增的值）[IE6/7不支持]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;list-item&lt;/td&gt;
&lt;td&gt;此元素会作为列表显示。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inline-table&lt;/td&gt;
&lt;td&gt;此元素会作为内联表格来显示（类似 table），表格前后没有换行符。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;table&lt;/td&gt;
&lt;td&gt;此元素会作为块级表格来显示（类似 table），表格前后带有换行符。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;table-row&lt;/td&gt;
&lt;td&gt;此元素会作为一个表格行显示（类似 tr）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;table-cell&lt;/td&gt;
&lt;td&gt;此元素会作为一个表格单元格显示（类似 td 和 th）.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;inherit&lt;/td&gt;
&lt;td&gt;规定应该从父元素继承 display 属性的值。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其中我们在前端开发中比较常用的属性值一般是none、block、inline、inline-block。我将按顺序为这些属性值一一讲解。&lt;/p&gt;
&lt;h4 id="二displaynone"&gt;二、display:none&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;将元素与其子元素从普通文档流中移除。这时文档的渲染就像元素从来没有存在过一样，也就是说它所占据的空间消失了。元素的内容也会消失。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="三displayblock"&gt;三、display:block&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;block元素会独占一行，多个block元素会各自新起一行。默认情况下，block元素宽度自动填满其父元素宽度；&lt;/li&gt;
&lt;li&gt;block元素可以设置margin和padding属性；&lt;/li&gt;
&lt;li&gt;block元素可以设置width、height属性。&lt;/li&gt;
&lt;li&gt;块级元素即使设置了宽度，仍然是独占一行。块级元素在设置宽度的情况下，是通过自定义margin-right来自动填满一行，这个时候你设置margin-right是无效的；块级元素在没有设置宽度的时候，margin-right会生效，块级元素的width通过自定义在自动填满一行。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;块级元素在设置宽度的情况下，是通过自定义margin-right来自动填满一行，这个时候你设置margin-right是无效的，如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/display/image-01.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;块级元素在没有设置宽度的时候，margin-right会生效，块级元素的width通过自定义在自动填满一行，如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/display/image-02.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="四displayinline"&gt;四、display:inline&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;inline元素不会独占一行，多个相邻的行内元素会排列在同一行里，直到一行排列不下，才会新换一行，其宽度随元素的内容而变化；&lt;/li&gt;
&lt;li&gt;inline元素设置width、height属性无效；&lt;/li&gt;
&lt;li&gt;inline元素的margin和padding属性，水平方向的padding-left、padding-right、margin-left、margin-right都产生边距效果；但竖直方向的padding-top、padding-bottom、margin-top、margin-bottom不会产生边距效果。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/display/image-03.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id="五displayinline-block"&gt;五、display:inline-block&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;将对象呈现为inline对象，但是对象的内容作为block对象呈现，之后的内联对象会被排列在同一行内。就是集合了block和inline的全部优点。width、height、margin、padding设置都会生效。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/display/image-04.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;原文：&lt;a href="https://juejin.cn/post/6844903781566513160"&gt;https://juejin.cn/post/6844903781566513160&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="常见考点"&gt;常见考点&lt;/h2&gt;
&lt;h3 id="1-基本概念"&gt;1. &lt;strong&gt;基本概念&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;请简述 CSS 中的 &lt;strong&gt;&lt;code&gt;display&lt;/code&gt;&lt;/strong&gt; 属性及其作用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;display&lt;/code&gt;&lt;/strong&gt; 属性的常见值有哪些？请列举并解释其含义。&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;例如：&lt;code&gt;block&lt;/code&gt;、&lt;code&gt;inline&lt;/code&gt;、&lt;code&gt;inline-block&lt;/code&gt;、&lt;code&gt;flex&lt;/code&gt;、&lt;code&gt;grid&lt;/code&gt;、&lt;code&gt;none&lt;/code&gt; 等。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-display-block"&gt;2. &lt;strong&gt;&lt;code&gt;display: block&lt;/code&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;什么是 &lt;strong&gt;&lt;code&gt;display: block&lt;/code&gt;&lt;/strong&gt;？它会给元素带来哪些表现？&lt;/li&gt;
&lt;li&gt;一个块级元素通常具有哪些特点？例如：它的宽度会如何变化？它是否会换行？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-display-inline"&gt;3. &lt;strong&gt;&lt;code&gt;display: inline&lt;/code&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;什么是 &lt;strong&gt;&lt;code&gt;display: inline&lt;/code&gt;&lt;/strong&gt;？它与 &lt;strong&gt;&lt;code&gt;display: block&lt;/code&gt;&lt;/strong&gt; 有什么不同？&lt;/li&gt;
&lt;li&gt;内联元素如何处理宽度和高度？它们是否会占据整个可用宽度？&lt;/li&gt;
&lt;li&gt;如何让一个内联元素变得像块级元素一样换行？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4-display-inline-block"&gt;4. &lt;strong&gt;&lt;code&gt;display: inline-block&lt;/code&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;什么是 &lt;strong&gt;&lt;code&gt;display: inline-block&lt;/code&gt;&lt;/strong&gt;？它结合了 &lt;code&gt;inline&lt;/code&gt; 和 &lt;code&gt;block&lt;/code&gt; 的哪些特点？&lt;/li&gt;
&lt;li&gt;使用 &lt;strong&gt;&lt;code&gt;inline-block&lt;/code&gt;&lt;/strong&gt; 时，元素的宽高如何影响布局？&lt;/li&gt;
&lt;li&gt;&lt;code&gt;inline-block&lt;/code&gt; 元素如何与其他元素对齐？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="5-display-none"&gt;5. &lt;strong&gt;&lt;code&gt;display: none&lt;/code&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;请解释 &lt;strong&gt;&lt;code&gt;display: none&lt;/code&gt;&lt;/strong&gt; 的作用与 &lt;strong&gt;&lt;code&gt;visibility: hidden&lt;/code&gt;&lt;/strong&gt; 的区别。&lt;/li&gt;
&lt;li&gt;使用 &lt;strong&gt;&lt;code&gt;display: none&lt;/code&gt;&lt;/strong&gt; 会有什么样的表现？例如，它对页面布局有何影响？&lt;/li&gt;
&lt;li&gt;当你将一个元素的 &lt;strong&gt;&lt;code&gt;display&lt;/code&gt;&lt;/strong&gt; 设置为 &lt;strong&gt;&lt;code&gt;none&lt;/code&gt;&lt;/strong&gt; 时，它会消失，但仍然存在于 DOM 中。如何通过 JavaScript 使其重新显示？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="6-display-flex"&gt;6. &lt;strong&gt;&lt;code&gt;display: flex&lt;/code&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;display: flex&lt;/code&gt;&lt;/strong&gt; 是什么？它通常用来实现什么样的布局效果？&lt;/li&gt;
&lt;li&gt;在使用 &lt;code&gt;flex&lt;/code&gt; 布局时，如何控制子元素的排列方向、对齐方式等？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;justify-content&lt;/code&gt;&lt;/strong&gt;、&lt;strong&gt;&lt;code&gt;align-items&lt;/code&gt;&lt;/strong&gt;、&lt;strong&gt;&lt;code&gt;flex-direction&lt;/code&gt;&lt;/strong&gt; 等 Flexbox 属性的作用是什么？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="7-display-grid"&gt;7. &lt;strong&gt;&lt;code&gt;display: grid&lt;/code&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;什么是 &lt;strong&gt;&lt;code&gt;display: grid&lt;/code&gt;&lt;/strong&gt; 布局？它与 &lt;strong&gt;&lt;code&gt;flex&lt;/code&gt;&lt;/strong&gt; 布局有何区别？&lt;/li&gt;
&lt;li&gt;在 &lt;strong&gt;&lt;code&gt;grid&lt;/code&gt;&lt;/strong&gt; 布局中，如何设置行和列的大小？如何控制子元素的位置？&lt;/li&gt;
&lt;li&gt;请举例说明 &lt;strong&gt;&lt;code&gt;grid-template-columns&lt;/code&gt;&lt;/strong&gt;、&lt;strong&gt;&lt;code&gt;grid-template-rows&lt;/code&gt;&lt;/strong&gt;、&lt;strong&gt;&lt;code&gt;grid-gap&lt;/code&gt;&lt;/strong&gt; 等属性的使用方法。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="8-display-table"&gt;8. &lt;strong&gt;&lt;code&gt;display: table&lt;/code&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;什么是 &lt;strong&gt;&lt;code&gt;display: table&lt;/code&gt;&lt;/strong&gt;，它如何模仿传统的 HTML &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; 元素？&lt;/li&gt;
&lt;li&gt;使用 &lt;strong&gt;&lt;code&gt;display: table&lt;/code&gt;&lt;/strong&gt; 时，如何控制表格的行和列布局？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;display: table-row&lt;/code&gt;&lt;/strong&gt;、&lt;strong&gt;&lt;code&gt;display: table-cell&lt;/code&gt;&lt;/strong&gt; 和 &lt;strong&gt;&lt;code&gt;display: table-caption&lt;/code&gt;&lt;/strong&gt; 的作用是什么？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="9-布局模型对比"&gt;9. &lt;strong&gt;布局模型对比：&lt;code&gt;block&lt;/code&gt; vs &lt;code&gt;inline&lt;/code&gt; vs &lt;code&gt;flex&lt;/code&gt; vs &lt;code&gt;grid&lt;/code&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;你如何选择使用 &lt;strong&gt;&lt;code&gt;block&lt;/code&gt;&lt;/strong&gt;、&lt;strong&gt;&lt;code&gt;inline&lt;/code&gt;&lt;/strong&gt;、&lt;strong&gt;&lt;code&gt;flex&lt;/code&gt;&lt;/strong&gt; 或 &lt;strong&gt;&lt;code&gt;grid&lt;/code&gt;&lt;/strong&gt; 布局？&lt;/li&gt;
&lt;li&gt;在实际项目中，什么时候使用 &lt;code&gt;flex&lt;/code&gt; 布局，什么时候使用 &lt;code&gt;grid&lt;/code&gt; 布局？&lt;/li&gt;
&lt;li&gt;请比较 &lt;code&gt;flex&lt;/code&gt; 和 &lt;code&gt;grid&lt;/code&gt; 布局的优缺点及应用场景。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="10-display"&gt;10. &lt;strong&gt;&lt;code&gt;display&lt;/code&gt; 与其他布局属性&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;在使用 &lt;strong&gt;&lt;code&gt;display: flex&lt;/code&gt;&lt;/strong&gt; 或 &lt;strong&gt;&lt;code&gt;display: grid&lt;/code&gt;&lt;/strong&gt; 布局时，如何与其他布局属性（如 &lt;code&gt;position&lt;/code&gt;、&lt;code&gt;float&lt;/code&gt; 等）配合使用？&lt;/li&gt;
&lt;li&gt;如何解决使用 &lt;strong&gt;&lt;code&gt;display: flex&lt;/code&gt;&lt;/strong&gt; 或 &lt;strong&gt;&lt;code&gt;display: grid&lt;/code&gt;&lt;/strong&gt; 布局时遇到的常见布局问题，例如元素溢出、对齐等？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="11-display-none"&gt;11. &lt;strong&gt;&lt;code&gt;display: none&lt;/code&gt; 与性能&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;display: none&lt;/code&gt;&lt;/strong&gt; 对页面性能有何影响？如何通过 JavaScript 动态控制显示/隐藏元素以提高性能？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="12-display-contents"&gt;12. &lt;strong&gt;&lt;code&gt;display: contents&lt;/code&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;什么是 &lt;strong&gt;&lt;code&gt;display: contents&lt;/code&gt;&lt;/strong&gt;？它是如何工作的？它与其他 &lt;strong&gt;&lt;code&gt;display&lt;/code&gt;&lt;/strong&gt; 值有什么区别？&lt;/li&gt;
&lt;li&gt;请举例说明 &lt;strong&gt;&lt;code&gt;display: contents&lt;/code&gt;&lt;/strong&gt; 的应用场景及可能的问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="13-display"&gt;13. &lt;strong&gt;&lt;code&gt;display&lt;/code&gt; 的继承性&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;display&lt;/code&gt;&lt;/strong&gt; 属性是否继承？如果没有，如何通过样式继承的方式控制多个元素的 &lt;strong&gt;&lt;code&gt;display&lt;/code&gt;&lt;/strong&gt; 属性？&lt;/li&gt;
&lt;li&gt;你如何在多个嵌套元素中保持一致的布局设置？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="14-display"&gt;14. &lt;strong&gt;&lt;code&gt;display&lt;/code&gt; 的可见性与布局&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;display&lt;/code&gt; 属性会影响元素的布局、渲染和可见性。请简要解释 &lt;strong&gt;&lt;code&gt;display: none&lt;/code&gt;&lt;/strong&gt; 和 &lt;strong&gt;&lt;code&gt;visibility: hidden&lt;/code&gt;&lt;/strong&gt; 的区别，它们对页面的影响不同吗？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="15-实际应用"&gt;15. &lt;strong&gt;实际应用&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;请描述一个你在实际开发中使用 &lt;strong&gt;&lt;code&gt;display&lt;/code&gt;&lt;/strong&gt; 属性解决布局问题的案例。&lt;/li&gt;
&lt;li&gt;如果需要在一个响应式设计中调整元素的布局，如何根据屏幕尺寸调整 &lt;code&gt;display&lt;/code&gt; 属性？&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>预处理器</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/</guid><description>&lt;h3 id="前言"&gt;前言&lt;/h3&gt;
&lt;p&gt;花样不断的前端，貌似多技术方案并行，已经成了家常便饭。&lt;/p&gt;
&lt;p&gt;从大的框架开始，已经分裂react与vue派系。两者思维上虽然有相互不断的借鉴，但在大的方向思维上却是截然不同。而在react与vue的竞争以及相互较量的过程中，往往把其他的对手都干倒了，现在市场angular，jQuery等都逐步没落。&lt;/p&gt;
&lt;p&gt;预编译css也同样，曾经也有多个派系。而后在sass与less的不断竞争中，stylus等其他的编译器也逐步退出市场。本文的重点，对比预编译css，scss与less对比。&lt;/p&gt;
&lt;h3 id="基本介绍"&gt;基本介绍&lt;/h3&gt;
&lt;p&gt;先一起看看官方是如何定义或者介绍他们。&lt;/p&gt;
&lt;h4 id="sass"&gt;Sass&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;官方定义：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sass是一种基于Ruby的CSS预处理器，它可以扩展CSS语言，并添加许多其他功能，如变量、嵌套规则、Mixin、函数等。Sass文件以“.scss”扩展名保存，与标准CSS文件兼容，并且可以使用普通CSS代码和语法。Sass也有一个较早的语法格式，以“.sass”扩展名保存，使用缩进的语法来代替括号和分号，但它现在已经不那么流行了。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;个人理解：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;sass是&lt;strong&gt;第一个&lt;/strong&gt;流行的CSS预处理器，在2006年产生，这也为后续他用户量第一埋下伏笔。&lt;/p&gt;
&lt;h4 id="scss"&gt;Scss&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;官方定义：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scss也是一种基于Ruby的CSS预处理器，它与Sass有很多相似之处，但是它的语法更接近标准CSS，使用花括号和分号。它是一种非常流行的CSS预处理器，与Sass相比，它更容易学习和使用，并且与现有的CSS代码更兼容。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;个人理解：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scss是Sass的一种语法格式，由2007推出。这还要从sass的规范语法说起，最典型的就是Sass使用缩进来表示代码块。这使部分使用者比较别扭。而产生了Scss，基于花括号和分号的CSS语法格式，使得它更易于阅读和理解。随着时间的推移，Scss逐渐取代了Sass作为Sass的主要语法格式。&lt;/p&gt;
&lt;h4 id="less"&gt;Less&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;官方定义：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Less是一种基于JavaScript的CSS预处理器，它与Sass和Scss有很多相似之处，但它使用类似CSS的语法，并且更容易学习和使用。Less支持变量、Mixin、嵌套规则等功能，并且可以在客户端和服务器端使用。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;个人理解：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Less由2009推出，也是提供了一套完整的生态链。它的语法跟sass不同。Less的学习成本更低，更容易理解和编写。此外，Less的编译速度比Sass更快。&lt;/p&gt;
&lt;h4 id="stylus"&gt;Stylus&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;官方定义：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stylus是一种基于JavaScript的CSS预处理器，它与Less、Sass和Scss有很多相似之处，但它的语法非常灵活，可以自由选择使用缩进或花括号来表示嵌套和块。Stylus还支持变量、Mixin、函数等功能，并且具有非常强大的插件系统，可以轻松地扩展其功能。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;个人理解：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stylus也是曾经一个比较完善的预编译语言。 但市场份额却原来越少。个人的观点，一是的学习成本高一些，有入门的门槛。而是生态链的问题，sass跟less的有较完善的生态链，而Stylus更像一个独立的东西。&lt;/p&gt;
&lt;h4 id="postcss"&gt;PostCSS&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;官方定义：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PostCSS不是一种独立的CSS预处理器，而是一个CSS处理工具集合，可以通过各种插件扩展其功能。PostCSS可以用于转换CSS语法、提供自动前缀、压缩CSS代码、处理嵌套规则、优化图片等。它不像其他预处理器那样提供自己的语言，而是基于现有的CSS语法。使用PostCSS可以通过插件来实现更多的自定义和灵活性，使其成为一个强大的CSS处理工具。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;个人理解：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;跟上述的其他的处理器不同，PostCSS不应该算是一个预处理器，但却是我们做适配，压缩等处理时的一个选择。&lt;/p&gt;
&lt;h3 id="数据分析"&gt;数据分析&lt;/h3&gt;
&lt;h4 id="市场占有率分析"&gt;市场占有率分析&lt;/h4&gt;
&lt;p&gt;我们借助npm官网统计工具对比，查看less与scss的数据量对比：&lt;/p&gt;
&lt;p&gt;链接： &lt;a href="https://npm-stat.com/charts.html?package=less"&gt;npm-stat.com/charts.html…&lt;/a&gt; &lt;a href="https://npm-stat.com/charts.html?package=sass"&gt;npm-stat.com/charts.html…&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/image-01.webp"&gt;&lt;/p&gt;
&lt;p&gt;如上图，左侧为less的数据，右侧为scss的数据。&lt;/p&gt;
&lt;p&gt;我们可以通过统计清晰的看到。单单一个sass的下载量，基本达到less的两倍以上。此处还不包含sass阵营的其他工具，包括node-scss，dart-scss的下载量。&lt;/p&gt;
&lt;p&gt;可以得出结论：&lt;strong&gt;sass的使用量约为less的几倍&lt;/strong&gt;。（但此处有个值得一提的地方：统计为全球的用户量的统计，并非针对国内）&lt;/p&gt;
&lt;h4 id="组件库选择分析"&gt;组件库选择分析&lt;/h4&gt;
&lt;p&gt;从上述的数据中，我们了解到sass的使用量较多，但是国内出名的组件库，却是less居多。毕竟组件库，也代表我们的使用习惯之一。我们一起看看组件库的选择。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ant design&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;选择了Less，地址：&lt;a href="https://www.antdv.com/docs/vue/customize-theme-cn"&gt;www.antdv.com/docs/vue/cu…&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/image-02.webp"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;element&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;选择了scss，地址：&lt;a href="https://element.eleme.io/#/zh-CN/component/custom-theme"&gt;element.eleme.io/#/zh-CN/com…&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/image-03.webp"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;varlet&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;选择了Less，地址：&lt;a href="https://varlet.gitee.io/varlet-ui/#/zh-CN/migrationGuide"&gt;varlet.gitee.io/varlet-ui/#…&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/image-04.webp"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;vant&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;选择了Less，地址：&lt;a href="http://vant-contrib.gitee.io/vant/v3/#/zh-CN/theme"&gt;vant-contrib.gitee.io/vant/v3/#/z…&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-021/image-05.webp"&gt;&lt;/p&gt;
&lt;p&gt;结论：关于组件库的选择，Less还是占大多数，当然Scss也是部分组件库的选择。&lt;/p&gt;
&lt;h3 id="个人分析"&gt;个人分析&lt;/h3&gt;
&lt;h4 id="相同点"&gt;相同点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;都属于css语法编译的工具。&lt;/li&gt;
&lt;li&gt;工具提供的方法也很多雷同。如都支持嵌套，都支持混合器（Mixin），都支持扩展（Extend），都支持颜色函数，都支持变量等等。&lt;/li&gt;
&lt;li&gt;生态链都一致丰富，常用构建工具都基本支持，如webpack，vite, rollup等。&lt;/li&gt;
&lt;li&gt;社区支持都强，提供了大量的插件、工具和资源，可以帮助开发者更好地使用Sass。&lt;/li&gt;
&lt;li&gt;目的性也一致，都提高了CSS编写的效率和可维护性而产生。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="不同点"&gt;不同点&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;部分语法不同，如Sass 和 SCSS 中的变量使用 &lt;code&gt;$&lt;/code&gt; 符号进行定义和引用，而不是 Less 中使用的 &lt;code&gt;@&lt;/code&gt; 符号&lt;/li&gt;
&lt;li&gt;Sass 和 Scss 还提供了一些 Less 没有的特性，例如控制流语句和继承等。&lt;/li&gt;
&lt;li&gt;Sass 和 Scss 是基于Ruby或者Dart，Node的预处理器，他需要借助机器安装这些环境来支持。而Less, 是基于JavaScript的CSS预处理器，引入一段JS即可编译，有浏览器还是服务端，他都能编译。&lt;/li&gt;
&lt;li&gt;虽然都有强大的社区，生态链。但总体还是Scss更丰富一些。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="特性分析"&gt;特性分析&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Node-Sass 在国内有一定的兼容性问题，但是基于Dart 语言编写的 Dart Sass以及解决了这个问题。还在使用Node-Sass的建议切换Dart Sass。&lt;/li&gt;
&lt;li&gt;Less 的语法相对于 Sass 更加简洁，易于学习和理解。这使得 Less 在国内开发者中更受欢迎，尤其是对于那些不太熟悉预处理器语言的开发者来说。&lt;/li&gt;
&lt;li&gt;Sass的阵营更丰富，使用量更高一些，市场份额也更加稳定。除了发家早，这也得益于生态圈，例如 Bootstrap、Foundation、Bulma、Vue.js 等，都在曾经的版本自带了Sass。&lt;/li&gt;
&lt;li&gt;国内组件库，还是Less居多，很多&amp;quot;高级前端&amp;quot;， 都觉得less 一直都比 sass 要稳定。至少不会出现Node版本，Python版本不一致等问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="结语"&gt;结语&lt;/h3&gt;
&lt;p&gt;所以Sass与Less谁更强？估计短期还是分不出成败。&lt;/p&gt;</description></item><item><title>架构</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-022/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-022/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;在项目中经常存在如下问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1.模块拆分不合理&lt;/li&gt;
&lt;li&gt;2.变量和函数命名不知所云&lt;/li&gt;
&lt;li&gt;3.缺少注释或者是写了一堆描述不清的内容&lt;/li&gt;
&lt;li&gt;4.重复的代码遍布各个角落等&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因为这些不良的编程习惯，导致了项目越来越难以维护，程序性能越来越低，大大降低了日常的工作效率以及提高了公司的开发成本。&lt;/p&gt;
&lt;p&gt;下面就以CSS在Vue3项目中的架构为切入点，通过减少CSS代码的冗余度和增强CSS代码的维护性、扩展性来提高我们的编程能力和项目架构能力。&lt;/p&gt;
&lt;h2 id="css的设计模式"&gt;CSS的设计模式&lt;/h2&gt;
&lt;p&gt;在学习CSS架构之前，我们先简单看一下常见的5种CSS设计模式，这些设计模式都为我们的CSS架构提供了一定的开发思路。&lt;/p&gt;
&lt;h3 id="1oocss模式"&gt;1.OOCSS模式&lt;/h3&gt;
&lt;p&gt;OOCSS(Object-Oriented CSS)字面意思是面向对象的CSS，在开发中它有如下的规范约定&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;减少对 HTML 结构的依赖&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# bad&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 1.匹配效率低，影响css性能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 2.和html耦合度高，维护性和扩展性低&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.container-list ul li a &lt;span style="color:#f92672"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;div class&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;container-list&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;ul&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;li&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;a&amp;gt;...&amp;lt;/a&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/li&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/ul&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# good&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.container-list .list-item &lt;span style="color:#f92672"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;div class&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;container-list&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;ul&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;li&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;a class&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;list-item&amp;#34;&lt;/span&gt;&amp;gt;...&amp;lt;/a&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/li&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/ul&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;增加样式的复用性&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.label &lt;span style="color:#f92672"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 公共代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.label-danger &lt;span style="color:#f92672"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 特定代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.label-info &lt;span style="color:#f92672"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 特定代码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;p class&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;label label-danger&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/p&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;p class&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;label label-info&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/p&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2bem模式"&gt;2.BEM模式&lt;/h3&gt;
&lt;p&gt;BEM 是进阶版的OOCSS，是一个分层系统，它把我们的网站分为三层，这三层正好对应着 BEM 三个英文单词的简写 block, element, modifier，分为为 块层、元素层、修饰符层。&lt;/p&gt;</description></item><item><title>视觉格式化模型</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-023/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-023/</guid><description>&lt;p&gt;大部分 Web 开发者都知道 CSS 中有一个盒模型，但很少有人知道在 CSS 的世界中还有另一个模型，他就是 CSS 的视觉格式化模型。&lt;/p&gt;
&lt;p&gt;CSS 视觉格式化模型（英文称之&lt;strong&gt;Visual Formatting Model&lt;/strong&gt;）。该模型主要是用来处理在视觉媒体上显示文档时使用的计算规则。仅从这一句话来描述，估计很多同学都会感到困惑，视觉格式化模型到底是什么鬼？大家先不用急着知道视觉格式化模型是什么，只需要知道它是 CSS 中很重要的一部分，如果理解了该部分所涉及到的知识点，将有助于你更好的理解和学习 CSS，特别是 Web 布局&lt;/p&gt;
&lt;h2 id="什么是视觉格式化模型"&gt;&lt;strong&gt;什么是视觉格式化模型&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;在盒模型中我们了解到，在 CSS 的世界中，任何一个元素都是一个盒子，它具有一个专业术语，即&lt;strong&gt;盒模型&lt;/strong&gt;。而视觉格式化模型会根据 CSS 盒模型将文档中的元素转换为一个个盒子。看到这里，很多同学可能更会感到困惑，“&lt;strong&gt;任何元素都是一个盒子，视觉格式化模型将元素转换为盒子，那这盒子是不是都是一样的盒子呢&lt;/strong&gt;”？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;首先要声明一点：&lt;strong&gt;视觉格式化模型和CSS盒模型不是同一个东西&lt;/strong&gt;！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;简单点说呢。Web 页面（文档树）是由很一个个盒子组成（因为任何元素都可以被视为是一个盒子），而&lt;strong&gt;视觉格式化模型&lt;/strong&gt;却是一套规则，用来计算&lt;strong&gt;元素转换为盒子&lt;/strong&gt;的规则。而页面的布局都由这些盒子的所处的各处位置组合而成。那么理解了元素怎么转成盒子的规则，就理解了 Web 页面是怎么布局。而每个盒子的布局主要由以下几个因素决定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;盒子的尺寸&lt;/strong&gt;：精确指定、由约束条件指定或没有指定&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;盒子的类型&lt;/strong&gt;：行内盒子（inline）、行内级盒子（inline-level）、原子行内级盒子（atomic inline-level）和块盒子（block）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;定位方案&lt;/strong&gt;：普通流定位、浮动定位或绝对定位&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文档树中的其它元素&lt;/strong&gt;：即当前盒子的子元素或兄弟元素&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;视窗尺寸与位置&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;所包含的图片的尺寸&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;其他的某些外部因素&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;先来看一张图，这个图是由下面的 HTML 结构构造出来的：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-HTML" data-lang="HTML"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;header&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;nav&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style="color:#f92672"&gt;nav&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/&lt;span style="color:#f92672"&gt;header&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;article&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;figure&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style="color:#f92672"&gt;figure&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/&lt;span style="color:#f92672"&gt;article&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;aside&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style="color:#f92672"&gt;aside&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;footer&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style="color:#f92672"&gt;footer&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-023/image-01.webp"&gt;&lt;/p&gt;
&lt;p&gt;每个元素都是一个盒子，盒子中可以包含另一个或多个盒子。也正如上图所示，CSS 的视觉格式化模型会根据盒子的&lt;strong&gt;包含块&lt;/strong&gt;（Containing Block，即&lt;strong&gt;包含其他盒子的块&lt;/strong&gt;）的边界来渲染盒子。通常，盒子会创建一个包含其后代元素的包含块，但是盒子并不会被包含块限制住，盒子的布局会撑破包含块（即跑出包含块的边界），对于这种现象，在 CSS 中常被称为溢出。&lt;/p&gt;
&lt;p&gt;溢出是一个很有意思的东东，在 Web 布局中时常会碰到，但在这一章中不做方面的阐述。&lt;/p&gt;</description></item><item><title>原子化CSS</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-024/</link><pubDate>Sat, 09 Nov 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-024/</guid><description>&lt;h2 id="1-什么是原子化css"&gt;1. 什么是原子化CSS&lt;/h2&gt;
&lt;h3 id="11-基本概念"&gt;1.1 基本概念&lt;/h3&gt;
&lt;p&gt;原子化CSS(Atomic CSS) 近年来热度逐渐增加，与原子化CSS相关的库在Github上也收获上万的Star。那么什么是原子化CSS呢，引用文章 &lt;a href="https://css-tricks.com/lets-define-exactly-atomic-css/"&gt;Let&amp;rsquo;s Define Exactly What Atomic CSS is&lt;/a&gt; 中定义：&amp;ldquo;原子化CSS是一种CSS架构方式，其支持小型、单一用途的类，其名称基于视觉功能。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;更加通俗的来讲，原子化CSS是一种新的CSS编程思路，它倾向于创建小巧且单一用途的class，并且以视觉效果进行命名。举个简单的例子：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;!-- 原子化类定义 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;style&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;text-white&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;white&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;bg-black&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;background-color&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;black&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;text-center&lt;/span&gt; { &lt;span style="color:#66d9ef"&gt;text-align&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;center&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;style&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;!-- 原子化类使用 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;text-white bg-black text-center&amp;#34;&lt;/span&gt;&amp;gt;hello Atomic CSS&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="12-vs-行内样式"&gt;1.2 VS 行内样式&lt;/h3&gt;
&lt;p&gt;看到以上的示例，你可能很快就想到，直接使用行内样式不是更好吗，还省去了原子类的定义。这个问题可以从样式编写、一致性、功能、和缓存四个方面来回答。&lt;/p&gt;
&lt;p&gt;在样式编写层面，CSS预处理和后处理器很大程度上依赖单独的样式表，原子化CSS可以充分利用Sass、Less等CSS预处理器功能进行样式的编写，同时可以借助&lt;code&gt;PostCSS&lt;/code&gt;进一步增强CSS的功能。而对于行内样式，虽然在技术上支持使用预处理和后处理器对其进行处理，但很少有成熟的工具对此提供支持和维护。&lt;/p&gt;
&lt;p&gt;在一致性层面，原子化CSS框架一般有预定义的设计系统，开发者仅能在设计系统中选择要设置的值。而对于行内样式或者传统CSS类定义来说，可设置的值是没有任何限制的。对于行内样式或者传统的CSS类设置来说，一个标签的字体大小可能是&lt;code&gt;14px&lt;/code&gt;或&lt;code&gt;0.875rem&lt;/code&gt;，当产品（or 客户）说需要调小一点时，开发者A可能调整为&lt;code&gt;13px&lt;/code&gt;，开发者B可能调整为&lt;code&gt;12px&lt;/code&gt;。但对于原子化CSS框架来说，调小一点意味着设置的类从&lt;code&gt;text-sm&lt;/code&gt;变为&lt;code&gt;text-xs&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;以下为部分采用传统CSS类编写的网站样式统计数据（&lt;a href="https://cssstats.com/stats/"&gt;统计来源&lt;/a&gt;）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://juejin.cn/"&gt;掘金官网&lt;/a&gt;：283种背景颜色 471种字体颜色 264种字体大小&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab"&gt;GitLab&lt;/a&gt;：1199种背景颜色 1351种字体颜色 450种字体大小&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.csdn.net/"&gt;CSDN&lt;/a&gt;：585种背景颜色 1190种字体颜色 504种字体大小&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;在功能方面，原子化CSS本质上还是CSS类，因此支持媒体查询功能，也支持对元素的悬停、聚焦等状态进行处理，而内联样式缺少这部分的能力。&lt;/p&gt;
&lt;p&gt;在打包方面，内联样式包含在JS文件中，样式的修改会导致整个bundle的改变，原子化CSS样式定义和JS逻辑分离，修改元素的class属性可能并不影响（在没有新CSS类的情况下）最终打包输出样式文件。&lt;/p&gt;
&lt;h2 id="2-谁在使用原子化css"&gt;2. 谁在使用原子化CSS&lt;/h2&gt;
&lt;p&gt;截至目前已经有部分网站借鉴或者使用原子化CSS的思想重构了自己的web网站，比较知名的网站有&lt;code&gt;Facebook&lt;/code&gt;、&lt;code&gt;Twitter&lt;/code&gt;、&lt;code&gt;Github&lt;/code&gt;、&lt;code&gt;swipperjs&lt;/code&gt;等。根据网上公开的信息，&lt;code&gt;Facebook&lt;/code&gt;在使用原子化CSS思想重构之后，仅登录页面的&lt;code&gt;413KB&lt;/code&gt;样式文件，减少为整个站点的&lt;code&gt;74KB&lt;/code&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/"&gt;Facebook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-024/image-01.png"&gt;&lt;/p&gt;</description></item><item><title>移动端适配</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-025/</link><pubDate>Sat, 09 Nov 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-025/</guid><description>&lt;h2 id="导读"&gt;导读&lt;/h2&gt;
&lt;p&gt;移动端适配，是我们在开发中经常会遇到的，这里面可能会遇到非常多的问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1px&lt;/code&gt;问题&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UI&lt;/code&gt;图完美适配方案&lt;/li&gt;
&lt;li&gt;&lt;code&gt;iPhoneX&lt;/code&gt;适配方案&lt;/li&gt;
&lt;li&gt;横屏适配&lt;/li&gt;
&lt;li&gt;高清屏图片模糊问题&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上面这些问题可能我们在开发中已经知道如何解决，但是问题产生的原理，以及解决方案的原理可能会模糊不清。在解决这些问题的过程中，我们往往会遇到非常多的概念：像素、分辨率、&lt;code&gt;PPI&lt;/code&gt;、&lt;code&gt;DPI&lt;/code&gt;、&lt;code&gt;DP&lt;/code&gt;、&lt;code&gt;DIP&lt;/code&gt;、&lt;code&gt;DPR&lt;/code&gt;、视口等等，你真的能分清这些概念的意义吗？&lt;/p&gt;
&lt;p&gt;本文将从移动端适配的基础概念出发，探究移动端适配各种问题的解决方案和实现原理。&lt;/p&gt;
&lt;h2 id="一英寸"&gt;一、英寸&lt;/h2&gt;
&lt;p&gt;一般用英寸描述屏幕的物理大小，如电脑显示器的&lt;code&gt;17&lt;/code&gt;、&lt;code&gt;22&lt;/code&gt;，手机显示器的&lt;code&gt;4.8&lt;/code&gt;、&lt;code&gt;5.7&lt;/code&gt;等使用的单位都是英寸。&lt;/p&gt;
&lt;p&gt;需要注意，上面的尺寸都是屏幕对角线的长度：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-025/image-01.png"&gt;&lt;/p&gt;
&lt;p&gt;英寸(&lt;code&gt;inch&lt;/code&gt;,缩写为&lt;code&gt;in&lt;/code&gt;)在荷兰语中的本意是大拇指，一英寸就是指甲底部普通人拇指的宽度。&lt;/p&gt;
&lt;p&gt;英寸和厘米的换算：&lt;code&gt;1英寸 = 2.54 厘米&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="二分辨率"&gt;二、分辨率&lt;/h2&gt;
&lt;h3 id="21-像素"&gt;2.1 像素&lt;/h3&gt;
&lt;p&gt;像素即一个小方块，它具有特定的位置和颜色。&lt;/p&gt;
&lt;p&gt;图片、电子屏幕（手机、电脑）就是由无数个具有特定颜色和特定位置的小方块拼接而成。&lt;/p&gt;
&lt;p&gt;像素可以作为图片或电子屏幕的最小组成单位。&lt;/p&gt;
&lt;p&gt;下面我们使用&lt;code&gt;sketch&lt;/code&gt;打开一张图片：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-025/image-02.png"&gt;&lt;/p&gt;
&lt;p&gt;将这些图片放大即可看到这些像素点：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-025/image-03.png"&gt;&lt;/p&gt;
&lt;p&gt;通常我们所说的分辨率有两种，屏幕分辨率和图像分辨率。&lt;/p&gt;
&lt;h3 id="22-屏幕分辨率"&gt;2.2 屏幕分辨率&lt;/h3&gt;
&lt;p&gt;屏幕分辨率指一个屏幕具体由多少个像素点组成。&lt;/p&gt;
&lt;p&gt;下面是&lt;code&gt;apple&lt;/code&gt;的官网上对手机分辨率的描述：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-025/image-04.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;iPhone XS Max&lt;/code&gt; 和 &lt;code&gt;iPhone SE&lt;/code&gt;的分辨率分别为&lt;code&gt;2688 x 1242&lt;/code&gt;和&lt;code&gt;1136 x 640&lt;/code&gt;。这表示手机分别在垂直和水平上所具有的像素点数。&lt;/p&gt;
&lt;p&gt;当然分辨率高不代表屏幕就清晰，屏幕的清晰程度还与尺寸有关。&lt;/p&gt;
&lt;h3 id="23-图像分辨率"&gt;2.3 图像分辨率&lt;/h3&gt;
&lt;p&gt;我们通常说的&lt;code&gt;图片分辨率&lt;/code&gt;其实是指图片含有的&lt;code&gt;像素数&lt;/code&gt;，比如一张图片的分辨率为&lt;code&gt;800 x 400&lt;/code&gt;。这表示图片分别在垂直和水平上所具有的像素点数为&lt;code&gt;800&lt;/code&gt;和&lt;code&gt;400&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;同一尺寸的图片，分辨率越高，图片越清晰。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-025/image-05.png"&gt;&lt;/p&gt;
&lt;h3 id="24-ppi"&gt;2.4 PPI&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;PPI(Pixel Per Inch)&lt;/code&gt;：每英寸包括的像素数。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;PPI&lt;/code&gt;可以用于描述屏幕的清晰度以及一张图片的质量。&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;PPI&lt;/code&gt;描述图片时，&lt;code&gt;PPI&lt;/code&gt;越高，图片质量越高，使用&lt;code&gt;PPI&lt;/code&gt;描述屏幕时，&lt;code&gt;PPI&lt;/code&gt;越高，屏幕越清晰。&lt;/p&gt;
&lt;p&gt;在上面描述手机分辨率的图片中，我们可以看到：&lt;code&gt;iPhone XS Max&lt;/code&gt; 和 &lt;code&gt;iPhone SE&lt;/code&gt;的&lt;code&gt;PPI&lt;/code&gt;分别为&lt;code&gt;458&lt;/code&gt;和&lt;code&gt;326&lt;/code&gt;，这足以证明前者的屏幕更清晰。&lt;/p&gt;
&lt;p&gt;由于手机尺寸为手机对角线的长度，我们通常使用如下的方法计算&lt;code&gt;PPI&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-025/image-06.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;iPhone 6&lt;/code&gt;的&lt;code&gt;PPI&lt;/code&gt;为&lt;/p&gt;</description></item><item><title>优化性能</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-026/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-026/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;随着互联网发展至今，对于网站来说，性能显的越来越重要了，CSS作为页面渲染和内容展现的重要环节，影响着用户对整个网站的第一体验。所以，我们需要重视与CSS相关的性能优化。&lt;/p&gt;
&lt;p&gt;项目开发初期我们可能因为各种原因（很大一部分原因是因为项目工期，产品往往把项目上线时间卡的死死的，根本不听你说的什么性能优化），怎么写的舒服就怎么来，对于性能优化我们常常在项目完成时才去考虑，经常被推迟到项目的末期，甚至到暴露出严重的性能问题时才进行性能优化。&lt;/p&gt;
&lt;p&gt;为了更多地避免这一情况，首先要重视起性能优化相关的工作，将其贯穿到整个产品设计与开发中。其次，就是了解性能相关的内容，在项目开发过程中，自然而然地进行性能优化。&lt;/p&gt;
&lt;h2 id="css渲染规则"&gt;css渲染规则&lt;/h2&gt;
&lt;p&gt;想要优化CSS的性能，我们首先需要了解CSS的渲染规则，&lt;strong&gt;CSS选择器是从右向左进行匹配的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;来看个例子🌰：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;nav&lt;/span&gt; &lt;span style="color:#f92672"&gt;h3&lt;/span&gt; &lt;span style="color:#f92672"&gt;a&lt;/span&gt;{&lt;span style="color:#66d9ef"&gt;font-size&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;14&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;px&lt;/span&gt;;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;渲染过程大概是：首先找到所有的&lt;code&gt;a&lt;/code&gt;，沿着&lt;code&gt;a&lt;/code&gt;的父元素查找&lt;code&gt;h3&lt;/code&gt;，然后再沿着&lt;code&gt;h3&lt;/code&gt;，查找&lt;code&gt;.nav&lt;/code&gt;。中途找到了符合匹配规则的节点就加入结果集。如果找到根元素&lt;code&gt;html&lt;/code&gt;都没有匹配，则不再遍历这条路径，从下一个&lt;code&gt;a&lt;/code&gt;开始重复这个查找匹配（只要页面上有多个最右节点为&lt;code&gt;a&lt;/code&gt;）。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tips：为什么CSS选择器是从右向左匹配的？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CSS中更多的选择器是不会匹配的，所以在考虑性能问题时，需要考虑的是如何在选择器不匹配时提升效率。从右向左匹配就是为了达成这一目的的，通过这一策略能够使得CSS选择器在不匹配的时候效率更高。这样想来，在匹配时多耗费一些性能也能够想的通了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="内联首屏关键csscritical-css"&gt;内联首屏关键CSS（Critical CSS）&lt;/h2&gt;
&lt;p&gt;性能优化中有一个重要的指标——&lt;strong&gt;首次有效绘制&lt;/strong&gt;（First Meaningful Paint，简称FMP）即指页面的首要内容（primary content）出现在屏幕上的时间。这一指标影响用户看到页面前所需等待的时间，而 &lt;strong&gt;内联首屏关键CSS（即Critical CSS，可以称之为首屏关键CSS）&lt;/strong&gt; 能减少这一时间。&lt;/p&gt;
&lt;p&gt;很多人都喜欢通过&lt;code&gt;link&lt;/code&gt;标签引用外部&lt;code&gt;CSS文件&lt;/code&gt;。但需要知道的是，&lt;strong&gt;将CSS直接内联到HTML文档中能使CSS更快速地下载&lt;/strong&gt;。而使用外部CSS文件时，需要在HTML文档下载完成后才知道所要引用的CSS文件，然后才下载它们。所以说，&lt;strong&gt;内联CSS能够使浏览器开始页面渲染的时间提前&lt;/strong&gt;，因为在HTML下载完成之后就能渲染了。&lt;/p&gt;
&lt;p&gt;但是我们不应该将所有的CSS都内联在HTML文档中，因为[初始拥塞窗口]存在限制&lt;code&gt;（TCP相关概念，通常是 14.6kB，压缩后大小）&lt;/code&gt;，如果内联CSS后的文件超出了这一限制，系统就需要在服务器和浏览器之间进行更多次的往返，这样并不能提前页面渲染时间。因此，我们应当&lt;strong&gt;只将渲染首屏内容所需的关键CSS内联到HTML中&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;⚠️还有一点需要注意的是内联CSS没有缓存，每次都会随HTML的加载而重新下载，但我们将内联首屏关键CSS控制在 &lt;code&gt;14.6kB&lt;/code&gt;以内，它对性能优化还是起到正向作用的。（凡事有利也有弊）&lt;/p&gt;
&lt;h2 id="异步加载非首屏css"&gt;异步加载非首屏CSS&lt;/h2&gt;
&lt;p&gt;我们需要知道两点内容：（具体可以看我之前的文章：&lt;a href="https://juejin.cn/post/7026536651899797541#heading-14"&gt;这些浏览器面试题，看看你能回答几个？&lt;/a&gt;）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CSS&lt;/code&gt;不会阻塞&lt;code&gt;DOM&lt;/code&gt;的解析，但会阻塞&lt;code&gt;DOM&lt;/code&gt;的渲染&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CSS&lt;/code&gt;会阻塞&lt;code&gt;JS&lt;/code&gt;执行，但不会阻塞&lt;code&gt;JS&lt;/code&gt;文件的下载&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;由于CSS会阻塞DOM的渲染，所以我们将首屏关键CSS内联后，剩余的非首屏CSS内容可以使用外部CSS，并且异步加载，防止非首屏CSS内容阻塞页面的渲染。&lt;/p&gt;
&lt;h3 id="css异步加载方式"&gt;CSS异步加载方式&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;第一种方法是动态创建&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 创建link标签
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;myCSS&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; document.&lt;span style="color:#a6e22e"&gt;createElement&lt;/span&gt;( &lt;span style="color:#e6db74"&gt;&amp;#34;link&amp;#34;&lt;/span&gt; );
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;myCSS&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;rel&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;myCSS&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;href&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;mystyles.css&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 插入到header的最后位置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;document.&lt;span style="color:#a6e22e"&gt;head&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;insertBefore&lt;/span&gt;( &lt;span style="color:#a6e22e"&gt;myCSS&lt;/span&gt;, document.&lt;span style="color:#a6e22e"&gt;head&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;childNodes&lt;/span&gt;[ document.&lt;span style="color:#a6e22e"&gt;head&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;childNodes&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;length&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; ].&lt;span style="color:#a6e22e"&gt;nextSibling&lt;/span&gt; );
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第二种方法是将link元素的&lt;code&gt;media&lt;/code&gt;属性设置为用户浏览器不匹配的媒体类型（或媒体查询）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对浏览器来说，如果样式表不适用于当前媒体类型，其优先级会被放低，会在不阻塞页面渲染的情况下再进行下载。在首屏文件加载完成之后，将&lt;code&gt;media&lt;/code&gt;的值设为&lt;code&gt;screen&lt;/code&gt;或&lt;code&gt;all&lt;/code&gt;，从而让浏览器开始解析CSS。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;link&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;rel&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;href&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;mystyles.css&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;media&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;noexist&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onload&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;this.media=&amp;#39;all&amp;#39;&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第三种方法是通过&lt;code&gt;rel&lt;/code&gt;属性将&lt;code&gt;link&lt;/code&gt;元素标记为&lt;code&gt;alternate&lt;/code&gt;可选样式表&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;link&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;rel&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;alternate stylesheet&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;href&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;mystyles.css&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onload&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;this.rel=&amp;#39;stylesheet&amp;#39;&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第四种方法是使用&lt;code&gt;rel=preload&lt;/code&gt;来异步加载CSS&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;link&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;rel&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;preload&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;href&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;mystyles.css&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;as&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;style&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;onload&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;this.rel=&amp;#39;stylesheet&amp;#39;&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意，&lt;code&gt;as&lt;/code&gt;是必须的。忽略&lt;code&gt;as&lt;/code&gt;属性，或者错误的&lt;code&gt;as&lt;/code&gt;属性会使&lt;code&gt;preload&lt;/code&gt;等同于&lt;code&gt;XHR&lt;/code&gt;请求，浏览器不知道加载的是什么内容，因此此类资源加载优先级会非常低。&lt;code&gt;as&lt;/code&gt;的可选值可以参考上述标准文档。&lt;/p&gt;
&lt;p&gt;看起来，&lt;code&gt;rel=&amp;quot;preload&amp;quot;&lt;/code&gt;的用法和上面两种没什么区别，都是通过更改某些属性，使得浏览器异步加载CSS文件但不解析，直到加载完成并将修改还原，然后开始解析。&lt;/p&gt;
&lt;p&gt;但是它们之间其实有一个很重要的不同点，那就是&lt;strong&gt;使用preload，比使用不匹配的&lt;code&gt;media&lt;/code&gt;方法能够更早地开始加载CSS&lt;/strong&gt;。所以尽管这一标准的支持度还不完善，仍建议优先使用该方法。&lt;/p&gt;
&lt;h2 id="css文件压缩"&gt;CSS文件压缩&lt;/h2&gt;
&lt;p&gt;这应该是最容易想到的一个方法了，通过压缩CSS文件大小来提高页面加载速度。现在的构建工具，如webpack、gulp/grunt、rollup等也都支持CSS压缩功能。压缩后的文件能够明显减小，可以大大降低了浏览器的加载时间。&lt;/p&gt;
&lt;h2 id="css层级嵌套最好不要超过3层"&gt;CSS层级嵌套最好不要超过3层&lt;/h2&gt;
&lt;p&gt;一般情况下，元素的嵌套层级不能超过3级，过度的嵌套会导致代码变得臃肿，沉余，复杂。导致css文件体积变大，造成性能浪费，影响渲染的速度！而且过于依赖HTML文档结构。这样的css样式，维护起来，极度麻烦，如果以后要修改样式，可能要使用&lt;code&gt;!important&lt;/code&gt;覆盖。尽量&lt;strong&gt;保持简单，不要使用嵌套过多过于复杂的选择器。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="删除无用css代码"&gt;删除无用CSS代码&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;一般情况下，会存在这两种无用的CSS代码：一种是不同元素或者其他情况下的重复代码，一种是整个页面内没有生效的CSS代码。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对于前者，在编写的代码时候，我们应该尽可能地提取公共类，减少重复。对于后者，在不同开发者进行代码维护的过程中，总会产生不再使用的CSS的代码，当然一个人编写时也有可能出现这一问题。而这些无用的CSS代码不仅会增加浏览器的下载量，还会增加浏览器的解析时间，这对性能来说是很大的消耗。所以我们需要找到并去除这些无用代码。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;那么我们如何知道哪些CSS代码是无用代码呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;谷歌的Chrome浏览器就有这种开箱即用的功能。只需转到查看&amp;gt;开发人员&amp;gt;开发人员工具，并在最近的版本中打开Sources选项卡，然后打开命令菜单。然后，点击Coverage，在Coverage analysis窗口中高亮显示当前页面上未使用的代码。 &lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-026/image-01.webp"&gt;&lt;/p&gt;
&lt;h2 id="慎用通配符"&gt;慎用*通配符&lt;/h2&gt;
&lt;p&gt;我们有时候可能会写下面这种代码来消除一些标签的默认样式或统一浏览器对标签渲染的差异化：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;*&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;margin：0；&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;padding：0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样虽然代码量少，但它的性能可不是最佳的，我们最好还是写对应的标签选择器：&lt;/p&gt;</description></item><item><title>新变化</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-027/</link><pubDate>Sat, 09 Nov 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-027/</guid><description>&lt;h2 id="css-发展史"&gt;CSS 发展史&lt;/h2&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-027/image-01.png"&gt;&lt;/p&gt;
&lt;p&gt;上图是20 世纪 90 年万维网刚出现时，由于当时并没有可以装饰网页的方法，原始的 Web 页面呈现的效果，随着 CSS（层叠样式表，Cascading Style Sheets）的诞生与发展，Web页面的样式有了翻天覆地的变化。&lt;/p&gt;
&lt;h2 id="css的发布过程"&gt;CSS的发布过程&lt;/h2&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-027/image-02.png"&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;CSS1.0 19912月W3C发布了第一个有关样式的标准CSS1.0。这个版本中，已经包含了的相关font的相关属性、颜色与背景的相关属性、文字的相关属性、box的相关属性等。&lt;/li&gt;
&lt;li&gt;CSS2.0 1985年5月，CSS2.0正式推出。这个版本推荐的是内容和表现效果分离的方式，并开始使用样式表结构。&lt;/li&gt;
&lt;li&gt;CSS2.1 2004年2月，CSS2.1正式推出。它在CSS2.0的基础上略微做了改动，删除了许多不被浏览器支持的属性&lt;/li&gt;
&lt;li&gt;CSS3 从2011年开始CSS被分为多个模块单独升级。这些模块统称为CSS3 包含有：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;CSS 选择器level3&lt;/li&gt;
&lt;li&gt;CSS 媒体查询level3&lt;/li&gt;
&lt;li&gt;CSS color level3&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="5"&gt;
&lt;li&gt;CSS4 设计中&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;CSS 标准的制定大概有下面几个步骤&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-027/image-03.png"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;下面主要介绍的是与我们日常工作有关联的一些新特性，其中一些已经在主流浏览器中得到了支持，还有一些特性还在草案阶段，可能还会有一些变化。&lt;/p&gt;
&lt;h2 id="css-伪类选择器"&gt;CSS 伪类选择器&lt;/h2&gt;
&lt;h3 id="is和where"&gt;is()和where()&lt;/h3&gt;
&lt;p&gt;在编写css时，有时会需要使用很长的选择器列表来定位具有相同样式的子元素，比如对所有H元素下的span设置为block，之前会这么写:&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-027/image-04.png"&gt;&lt;/p&gt;
&lt;p&gt;这样写选择器看起来很长，可读性差。 此时，可以使用is()来提高易读性，同时避免使用长选择器&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-027/image-05.png"&gt;&lt;/p&gt;
&lt;p&gt;浏览器支持:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;:is() Chrome 88/ Firefox 78/ Edge 88 /Safari 14&lt;/li&gt;
&lt;li&gt;:where() Chrome 88/ Firefox 78/ Edge 88 /Safari 14&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;is()和where()在使用方法上和其他的伪类选择器一样，可以任意组合排列。&lt;/li&gt;
&lt;li&gt;is()和where()的功能大体上是一样的，他们的差异性体现在选择器的权重上&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;where()选择器没有权重，也就是权重是0&lt;/li&gt;
&lt;li&gt;is()选择器的权重由它的选择器列表中的最搞权重决定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;规则示例:&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/css/css-027/image-06.png"&gt;&lt;/p&gt;</description></item></channel></rss>