<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>绿色记忆 &#187; CSS</title>
	<atom:link href="https://blog.gmem.cc/tag/css/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.gmem.cc</link>
	<description></description>
	<lastBuildDate>Tue, 21 Apr 2026 10:40:56 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.14</generator>
	<item>
		<title>CSS知识集锦</title>
		<link>https://blog.gmem.cc/css-faq</link>
		<comments>https://blog.gmem.cc/css-faq#comments</comments>
		<pubDate>Sat, 05 Apr 2008 14:16:40 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[FAQ]]></category>

		<guid isPermaLink="false">http://blog.gmem.cc/?p=870</guid>
		<description><![CDATA[<p>基本概念 CSS规则中URL相对于当前CSS文件，于引用CSS的网页的URL无关 CSS为每个HTML元素生成一个盒（Box），在其中包含元素的内容 CSS注释语法：[crayon-69ede0abb8cf6686370690-i/]  [crayon-69ede0abb8cfd946800464-i/] 指令，用于引入外部样式表文件 URL格式[crayon-69ede0abb8d00584191894-i/] ，url后面不得有空格 CSS值关键字： [crayon-69ede0abb8d02983397320-i/] 表示不设置此属性 [crayon-69ede0abb8d04522561999-i/] 表示从父元素继承此属性 [crayon-69ede0abb8d07673954779-i/] 从CSS3开始支持，表示恢复为默认值 根元素：文档树顶端的元素，即html元素 正常流：指从左向右，从上到下的显示方式。要使一个元素脱离正常流，可以使之成为浮动元素或者定位元素 非替换元素：元素本身的内容包含在文档中，大部分元素都是非替换元素 替换元素（replaced element）：元素本身仅仅是一个占位符，需要根据其标签、属性的不同来决定显示什么，例如input、img、textarea、select、object 块级元素：类似p、div这样的元素，在正常流中，这类元素的元素框前、后会出现“换行”，兄弟块元素会垂直摆放。设置[crayon-69ede0abb8d09928821257-i/] 可以让任何元素成为块级元素，生成块级框 行内元素：也叫内联元素，类似span、strong，这类元素的元素框前后不会出现“换行”。设置[crayon-69ede0abb8d0b563084293-i/] 可以让任何元素成为行内元素，生成行内框 匿名文本：未包含在任何行内元素中的文本 em框：即字符框，实际的字形可以比em框告或者矮 内容区：行内元素的内容区类似于块元素的内容框。非替换元素的内容区可以是各em框连接在一起构成的区域 行间距（leading）：只适用于非替换元素，line-heiht与font-size的差值，等分为上下两部分，分别称为半间距（half-leading） 行内框：对于非替换元素，行内框等于line-height；对于替换元素，行内框等于内容区高度，因为行间距不应用到替换元素 <a class="read-more" href="https://blog.gmem.cc/css-faq">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/css-faq">CSS知识集锦</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><div class="blog_h1"><span class="graybg">基本概念</span></div>
<ol>
<li>CSS规则中<span style="background-color: #c0c0c0;">URL相对于当前CSS文件</span>，于引用CSS的网页的URL无关</li>
<li>CSS为每个HTML元素生成一个盒（Box），在其中包含元素的内容</li>
<li>CSS注释语法：<pre class="crayon-plain-tag">/* 注释内容，可以多行 */</pre> </li>
<li><pre class="crayon-plain-tag">@import</pre> 指令，用于引入外部样式表文件</li>
<li>URL格式<pre class="crayon-plain-tag">url(protocol://server/pathname)</pre> ，url后面不得有空格</li>
<li>CSS值关键字：
<ol>
<li><pre class="crayon-plain-tag">none</pre> 表示不设置此属性</li>
<li><pre class="crayon-plain-tag">inherit</pre> 表示从父元素继承此属性</li>
<li><pre class="crayon-plain-tag">initial</pre> 从CSS3开始支持，表示恢复为默认值</li>
</ol>
</li>
<li>根元素：文档树顶端的元素，即html元素</li>
<li>正常流：指从左向右，从上到下的显示方式。要使一个元素脱离正常流，可以使之成为浮动元素或者定位元素</li>
<li>非替换元素：元素本身的内容包含在文档中，大部分元素都是非替换元素</li>
<li>替换元素（replaced element）：元素本身仅仅是一个占位符，需要根据其标签、属性的不同来决定显示什么，例如input、img、textarea、select、object</li>
<li>块级元素：类似p、div这样的元素，在<span style="background-color: #c0c0c0;">正常流中</span>，这类元素的<span style="background-color: #c0c0c0;">元素框前、后会出现“换行”</span>，兄弟块元素会垂直摆放。设置<pre class="crayon-plain-tag">display:block</pre> 可以让任何元素成为块级元素，生成块级框</li>
<li>行内元素：也叫内联元素，类似span、strong，这类元素的元素框前后不会出现“换行”。设置<pre class="crayon-plain-tag">display:inline</pre> 可以让任何元素成为行内元素，生成行内框</li>
<li>匿名文本：未包含在任何行内元素中的文本</li>
<li>em框：即字符框，实际的字形可以比em框告或者矮</li>
<li>内容区：行内元素的内容区类似于块元素的内容框。非替换元素的内容区可以是<span style="background-color: #c0c0c0;">各em框连接在一起</span>构成的区域</li>
<li>行间距（leading）：只适用于非替换元素，line-heiht与font-size的差值，等分为上下两部分，分别称为半间距（half-leading）</li>
<li>行内框：对于非替换元素，行内框等于line-height；对于替换元素，行内框等于内容区高度，因为<span style="background-color: #c0c0c0;">行间距不应用到替换元素</span></li>
<li>行框：包含了该行所有行内框的最高最低点的最小框</li>
</ol>
<div class="blog_h1"><span class="graybg">CSS块布局原理</span></div>
<div class="blog_h2"><span class="graybg">元素框</span></div>
<p>CSS假定每个元素都会生成一个或者多个矩形框，称为<span style="background-color: #c0c0c0;">元素框（element boxes）</span>。元素框的最中央是<span style="background-color: #c0c0c0;">内容区（content area）</span>，向外依次是可选的<span style="background-color: #c0c0c0;">内边距（paddings）</span>、<span style="background-color: #c0c0c0;">边框（borders）</span>、<span style="background-color: #c0c0c0;">外边距（margins）</span>。外边距通常是透明的，可以看到父元素的背景，外边距甚至可以是负数。下图示意了CSS的元素框模型：</p>
<p><img class="aligncenter  wp-image-11366" src="https://blog.gmem.cc/wp-content/uploads/2008/04/css-frame.png" alt="css-frame" width="75%" /></p>
<div class="blog_h2"><span class="graybg">包含块(Containing Block)</span></div>
<p>每个元素都<span style="background-color: #c0c0c0;">相对于它的包含块</span>布局，包含块是元素的布局上下文。</p>
<p>CSS定义了一系列规则，来确定元素的包含块。对于文本来说，其最近的块祖先框、表单元格、行内块祖先框的<span style="background-color: #c0c0c0;">内容框边界</span>构成它的包含块，例如：</p>
<pre class="crayon-plain-tag">&lt;body&gt;
&lt;!-- div的包含块是body，因此div的布局依赖于body的布局 --&gt;
&lt;div&gt;
    &lt;!-- p的包含块是div，因此p的布局依赖于div的布局 --&gt;
    &lt;p&gt;This is a paragraph.&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;</pre>
<div class="blog_h2"><span class="graybg">块级元素布局</span></div>
<p>如何在水平、垂直方向决定块元素的大小和位置，很不相同，这使得块元素的行为有时候显得诡异。</p>
<div class="blog_h3"><span class="graybg">水平方向布局</span></div>
<p><span style="background-color: #c0c0c0;">width指定的是内容区的宽度</span>，而不是整个元素框。后者的宽度还包括内外边距、边框。</p>
<p>水平方向所有<span style="background-color: #c0c0c0;">兄弟元素的元素框宽度之和</span>，总是等于<span style="background-color: #c0c0c0;">父元素的内容区宽度（width）</span>。以下面的代码为例：</p>
<pre class="crayon-plain-tag">&lt;div style="background-color: #DFE; border: 2px dotted #BDC;"&gt;
    &lt;div style="width: 100px;height:25px;background-color: #FEE; border: 2px dotted #ECC;"&gt;&lt;/div&gt;
&lt;/div&gt;</pre>
<p>虽然内部红色的div貌似只有100像素的宽度，实质上它的元素框宽度几乎等于绿色部分，右侧大片空白（绿色）都属于红色div的右外边距（margin-right）：</p>
<div style="background-color: #dfe; border: 2px dotted #BDC;">
<div style="width: 100px; height: 25px; background-color: #fee; border: 2px dotted #ECC;"> </div>
</div>
<p>和水平方向布局有关的CSS属性有7个，它们和包含块宽度有如下关系（即使使用负外边距也满足）：</p>
<p style="padding-left: 60px;">包含块的宽度 = 左外边距宽度 + 左边框宽度 + 左内边距宽度 + width  + 右内边距宽度 + 右边框宽度 + 右外边距宽度</p>
<p>包含块的宽度往往就是父元素的width值。</p>
<p>这7个属性中，wdith、margin-left、margin-right可以设置为auto，其它4个必须是特定的值。当：</p>
<ol>
<li>设置某单个值为auto，则auto属性根据其余两个属性自动计算——auto可用于“实际值”与“总和值”的差距</li>
<li>设置margin-left、margin-right为auto，可以使元素相对于父元素水平居中</li>
<li>如果三个值都设置为auto（默认值），则margin变为0，宽度尽可能大</li>
<li>如果三个值都设置为非auto，那么margin-right强制变成auto</li>
</ol>
<p>注意：父子元素在<span style="background-color: #c0c0c0;">水平方向的外边距不会合并</span>，因此元素的外边距（内边距、边框）可能导致子元素的偏移</p>
<div class="blog_h3"><span class="graybg">替换元素</span></div>
<p>块级<span style="background-color: #c0c0c0;">替换元素</span>的水平布局，与非替换元素（上文）类似，但是有一个附加的规则：如果width设置为auto，则元素的宽度是<span style="background-color: #c0c0c0;">内容的固有宽度</span>：</p>
<pre class="crayon-plain-tag">&lt;img src="gmem.png" style="width: auto;"/&gt; &lt;!-- 如果图片大小是100像素，那么实际渲染为100像素--&gt;</pre>
<p>如果为替换元素设置width，那么其<span style="background-color: #c0c0c0;">height会成比例的自动变化</span>，除非明确设置。 </p>
<div class="blog_h3"><span class="graybg">垂直方向布局</span></div>
<p>在垂直方向，一个块级元素的<span style="background-color: #c0c0c0;">默认高度由其内容决定</span>（相比之下，默认宽度为包含块宽度）。高度还会受到宽度影响，宽度越窄，则高度越高，以便容纳全部内容。</p>
<p>可以对任何块级元素显式设置高度：</p>
<ol>
<li>如果高度设置的大于内容固有高度，效果上好像多出额外的下内边距</li>
<li>如果高度设置的小与内容固有高度，可能导致出现滚动条，或者溢出内容剪切</li>
</ol>
<p>和垂直方向布局相关的CSS属性也有7个：上外边距高度 、上边框高度、上内边距高度、height、下内边距高度、下边框高度、下外边距高度。其中height、margin-top、margin-bottom可以设置为auto，其它4个必须是特定的值。当：</p>
<ol>
<li>margin-top、margin-bottom设置为auto，相对于设置为0</li>
<li>正常块级元素的height设置为auto，且仅有内联子元素，那么元素高度恰好能容纳内联内容</li>
<li>正常块级元素的height设置为auto，且仅有块级子元素，那么元素的高度是最顶部子元素的上外边界到最底部下外边界的距离</li>
<li>设置为百分比时，如果<span style="background-color: #c0c0c0;">包含块的高度没有显式设置</span>，那么<span style="background-color: #c0c0c0;">设置任何百分比的高度都等价于auto</span></li>
</ol>
<div class="blog_h3"><span class="graybg">相邻垂直外边距的合并</span></div>
<p>垂直方向布局的另外一个特点是相邻外边距的合并（重叠）——前一个元素的下边距、后一个元素的上边距，<span style="background-color: #c0c0c0;">取其大者</span>作为两者间的边距。例如：</p>
<pre class="crayon-plain-tag">&lt;style&gt;
    li{margin-top:20px;margin-bottom: 20px;border:1px dashed #AED;}
&lt;/style&gt;
&lt;ol&gt;
    &lt;li&gt;line1&lt;/li&gt;
    &lt;li&gt;line2&lt;/li&gt;
    &lt;li&gt;line3&lt;/li&gt;
&lt;/ol&gt;</pre>
<p>你会注意到列表条目之间的距离是20像素，而不是40像素。 </p>
<div class="blog_h2"><span class="graybg">行内元素布局</span></div>
<p>行内元素的布局没有块元素那么直接——生成一个简单的矩形框。当行内文本较多，形成多行时，各文本行的边框默认相互重叠（上一行的下边框，位于下一行的上边框的下面，这是因为边框画在行外部的一个像素上）。</p>
<p>对于行内元素：</p>
<ol>
<li>行内元素的背景默认应用到内容区和内边距</li>
<li>行内元素的边框包围内容区和内边距</li>
<li><span style="background-color: #c0c0c0;">非替换元素</span>的内外边距、边框<span style="background-color: #c0c0c0;">不会</span>影响元素行内框的高度，即不会导致line-height变大</li>
<li><span style="background-color: #c0c0c0;">替换元素</span>的外边距、边框<span style="background-color: #c0c0c0;">会</span>影响行内框的高度，也可能进而影响行框的高度</li>
<li>各行内框，在行中依据自己的<pre class="crayon-plain-tag">vertical-align</pre> 属性，在垂直方向对齐</li>
</ol>
<p>行的高度由其<span style="background-color: #c0c0c0;">组成元素、文本节点</span>确定。<pre class="crayon-plain-tag">line-height</pre> 会显著的影响行内元素的显示，但是<span style="background-color: #c0c0c0;">它只会影响行内元素</span>和匿名文本，不会直接影响块级元素，为块级元素色和指line-height，只会<span style="background-color: #c0c0c0;">应用到它内部的</span>inline内容，相当于声明一个<span style="background-color: #c0c0c0;">最小</span>的行框高度：</p>
<pre class="crayon-plain-tag">&lt;!-- 由于下面的块元素没有任何内容，因此设置line-height为任意值，都不会影响行框的创建 --&gt;
&lt;div style="line-height:48px;border :1px dashed #A33;"&gt;&lt;/div&gt;
&lt;!-- div的高度为0 --&gt;</pre>
<p>注意：块元素中的<span style="background-color: #c0c0c0;">各行文本都是行内元素</span>。</p>
<div class="blog_h3"><span class="graybg">行框的构造步骤</span></div>
<ol>
<li>按下列步骤确定行内各元素的行内框高度：
<ol>
<li>得到非替换元素、匿名文本的font-size和line-height值，求差后等分，应用到内容区上下</li>
<li>得到各替换元素的height、margin-top、margin-bottom、padding-top、padding-bottom、border-top-height、border-bottom-height，将其加在一起</li>
</ol>
</li>
<li>对于各内容区，确定其<span style="background-color: #c0c0c0;">在整行基线的上下方分别超出多少</span>。需要获得各元素、匿名文本的基线位置，然后得到行本书基线的位置，最后对齐之；对于替换元素，将其底部放在整行的基线上</li>
<li>对于指定了vertical-align的元素，确定其垂直偏移量，即元素的行内框需要上移/下移多远</li>
<li>此时，每个行内框的大小位置已经确定，行框的高度自然确定</li>
</ol>
<div class="blog_h3"><span class="graybg">行内非替换元素</span></div>
<p>如果行中只包含非替换元素或匿名文本，则<span style="background-color: #c0c0c0;">font-size确定内容区的高度</span>，亦即每个字符的<span style="background-color: #c0c0c0;">em框高度都等于font-size</span>。假设font-size为14px，而line-height为20px（行内框高度），那么这两者之间的差值6px会被UA等分为两个3px，<span style="background-color: #c0c0c0;">分别应用到内容区的顶部和底部</span>：<a href="https://blog.gmem.cc/wp-content/uploads/2008/04/inline-el.png"><img class="aligncenter  wp-image-11395" src="https://blog.gmem.cc/wp-content/uploads/2008/04/inline-el.png" alt="inline-el" width="683" height="147" /></a></p>
<p>&nbsp;</p>
<p>需要注意的是，font-size可能大于line-height，这时行内框的高度比内容区更小，这是合法的。 </p>
<p>行内框大小一致，并不能让文本整齐的排列，因为文本默认是<span style="background-color: #c0c0c0;">按照基线对齐</span>的：</p>
<p><img class="aligncenter  wp-image-11397" src="https://blog.gmem.cc/wp-content/uploads/2008/04/inline-el-baseline.png" alt="inline-el-baseline" width="658" height="112" /></p>
<div class="blog_h3"><span class="graybg">垂直对齐</span></div>
<p>修改垂直对齐属性，可能导致行内框的抬高或者降低，进而影响行框的高度。下面的例子示例了垂直对齐不同取值下的效果：</p>
<pre class="crayon-plain-tag">&lt;div style="border:1px dotted #CCC;width: 95%;margin: auto;line-height: 100px;height:100px;font-size:25px;"&gt;
    &lt;!-- 行内块元素，设置高度为容器1/2--&gt;
    &lt;span style="background-color: #A55;display: inline-block;height:50px;vertical-align: top"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;span style="background-color: #A55;display: inline-block;height:50px;vertical-align: middle"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;span style="background-color: #A55;display: inline-block;height:50px;vertical-align: bottom"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;span style="background-color: #A55;display: inline-block;height:50px;vertical-align: baseline"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;!-- 行内元素，行内框与容器高度一致--&gt;
    &lt;span style="background-color: #55A;vertical-align: top"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;span style="background-color: #55A;vertical-align: middle"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;span style="background-color: #55A;vertical-align: bottom"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;span style="background-color: #55A;vertical-align: baseline"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;!-- 行内元素，行内框与内容区高度一致 --&gt;
    &lt;span style="background-color: #5A5;vertical-align: top;line-height: 25px;"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;span style="background-color: #5A5;vertical-align: middle;line-height: 25px;"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;span style="background-color: #5A5;vertical-align: bottom;line-height: 25px;"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;span style="background-color: #5A5;vertical-align: baseline;line-height: 25px;"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;!-- 行内元素，行内框与内容区高度一致，数值的垂直偏移--&gt;
    &lt;span style="background-color: #555;vertical-align: 25px;line-height: 25px;"&gt;&amp;nbsp;&lt;/span&gt;
    &lt;span style="background-color: #555;vertical-align: -25px;line-height: 25px;"&gt;&amp;nbsp;&lt;/span&gt;
&lt;/div&gt; </pre>
<p><img class="aligncenter size-full wp-image-11404" src="https://blog.gmem.cc/wp-content/uploads/2008/04/vertical-align.png" alt="vertical-align" width="566" height="112" /></p>
<div class="blog_h3"><span class="graybg">关于基线</span></div>
<p>讨论行内元素的垂直对齐时，往往需要关注基线，默认的，行内元素基于基线对齐。</p>
<p><span style="background-color: #c0c0c0;">基线</span>相对于em框的位置，取决于字体，这一信息是<span style="background-color: #c0c0c0;">内置在字体</span>中的。</p>
<div class="blog_h3"><span class="graybg">行内替换元素</span></div>
<p>一般认为行内替换元素具有固有的宽高，替换元素可能导致行框变高，但是它不会改变任何元素（包括它自己）的line-height。</p>
<p>行内替换元素的line-height存在的意义是，作为垂直对齐时（例如设置为百分比）的参考值。</p>
<p>默认的，行内替换元素按基线对齐，即它的底端<span style="background-color: #c0c0c0;">（下外边距的边界）与行基线对齐</span>。</p>
<div class="blog_h2"><span class="graybg">行内块元素（inline-block）</span></div>
<p>这是CSS2.1新增的，其效果类似于图片放在文本行中，即它是<span style="background-color: #c0c0c0;">作为替换元素进行布局</span>的。</p>
<p>你可以设置行内块元素的宽高，就好像设置行内替换元素、块元素的宽高一样。</p>
<div class="blog_h1">浮动和定位</div>
<div class="blog_h2"><span class="graybg">浮动</span></div>
<p>使用CSS属性<pre class="crayon-plain-tag">float</pre> ，可以实现任何元素的浮动。当一个元素浮动时，其它内容会<span style="background-color: #c0c0c0;">环绕</span>该元素，浮动元素的外边距不会被合并。如果要浮动一个非替换元素，则必须为该元素声明一个width，否则其宽度趋于0。</p>
<p>float属性可以取值left、right、none，最后一个值表示不浮动（默认值）。</p>
<p>浮动元素的包含块是最近的块级祖先元素。任何浮动元素都会生成一个块级框，不需要声明display:block，即使它是inline元素。</p>
<div class="blog_h3"><span class="graybg">清除</span></div>
<p><pre class="crayon-plain-tag">clear</pre> 用于清除元素前后的浮动元素。取值left，则元素左侧不会出现浮动元素；取值right，则元素右侧不会出现浮动元素；取值both，则元素两侧都不会出现浮动元素。</p>
<div class="blog_h2"><span class="graybg">定位</span></div>
<p>利用定位，可以准确的定义元素框相对于其正常位置/父元素/视窗应该出现在哪里。CSS使用属性<pre class="crayon-plain-tag">position</pre> 来进行定位，支持以下取值：</p>
<table class=" full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 20%; text-align: center;">position</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>static</td>
<td>元素框正常生成。块级元素生成一个矩形框，作为文档流的一部分；行内元素生成一个或者多个行框，置于其父元素中</td>
</tr>
<tr>
<td>relative</td>
<td>元素框偏移某个距离。 元素保<span style="background-color: #c0c0c0;">持其未定位前的形状</span>，其<span style="background-color: #c0c0c0;">原本占据的空间</span>仍然保留</td>
</tr>
<tr>
<td>absolute</td>
<td>元素框从文档流中完全删除，相对于其包含块定位。包含块可以是文档中另外一个元素或者是初始包含块（即根元素的包含块）。元素原本在文档中占据的空间会关闭，就好像没有这个元素一样。元素定位后总是生成一个块级框</td>
</tr>
<tr>
<td>fixed</td>
<td>类似于absolute，只是包含块为视窗本身</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">如何确定包含块</span></div>
<p>确定一个定位元素的<span style="background-color: #c0c0c0;">包含块（定位上下文）</span>的算法较为复杂：</p>
<ol>
<li>根元素的包含块由UA建立，在HTML中是html元素。在大部分浏览器中初始包含块是视窗大小的矩形</li>
<li>对于一个非根元素，如果其position取值<span style="background-color: #c0c0c0;">relative/static</span>，则其包含块由<span style="background-color: #c0c0c0;">最近的块级框、表单元格或者行内祖先框的内容边界</span>构成</li>
<li>对于一个非根元素，如果其position取值<span style="background-color: #c0c0c0;">absolute</span>，则其包含块取决于<span style="background-color: #c0c0c0;">最近的position不为static的祖先元素</span>：
<ol>
<li>如果此祖先是块级元素，包含块设置为祖先的内边距边界</li>
<li>如果此祖先是行内元素，包含块设置为祖先的内容边界</li>
<li>如果没有祖先，则包含块设置为初始包含块</li>
</ol>
</li>
</ol>
<div class="blog_h3"><span class="graybg">偏移属性</span></div>
<p>top、right、bottom、left这四个属性成为偏移属性，其中top/bottom说明元素相对于包含块顶边/底边的偏移，left/right则说明元素相对于包含块左边/右边的偏移。</p>
<div class="blog_h3"><span class="graybg">Z轴方向的放置</span></div>
<p><pre class="crayon-plain-tag">z-index</pre> 来限定定位元素在Z轴方向的摆放顺序，该值越大，则离读者越近。所有整数都可以作为z-index的值。</p>
<div class="blog_h1"><span class="graybg">字体和单位</span></div>
<div class="blog_h2"><span class="graybg">字体</span></div>
<p>在CSS中设置字体类型<pre class="crayon-plain-tag">font-family</pre> 时，既可以指定具体的字体名称，也可以指定<span style="background-color: #c0c0c0;">通用字体系列</span>。</p>
<div class="blog_h3"><span class="graybg">通用字体系列</span></div>
<table class=" full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 15%; text-align: center;">字体系列</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>Serif</td>
<td>衬线字体，在字的笔划开始及结束的地方有<span style="background-color: #c0c0c0;">额外的装饰</span>，而且<span style="background-color: #c0c0c0;">笔划的粗细</span>会因直横的不同而有不同。宋体就是一种衬线字体<br />衬线字体易读性佳，长时间阅读不易疲劳，适用于大篇幅的正文内容</td>
</tr>
<tr>
<td>Sans-serif</td>
<td>无衬线字体，Sans是法语“无”的意思。此类字体缺少额外装饰，且必要粗细大致差不多。黑体就是一种非衬线字体<br />衬线字体比较醒目，适用于标题、表头等，但不需要长时间盯着阅读</td>
</tr>
<tr>
<td>Monospace</td>
<td>等宽字体，所有字符的宽度一致<br />适用于编程时的代码、字符终端</td>
</tr>
<tr>
<td>Cursive</td>
<td>试图模仿人的手写体</td>
</tr>
<tr>
<td>Fantasy</td>
<td>无法明确的归类</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">单位</span></div>
<div class="blog_h3"><span class="graybg">角度单位</span></div>
<table class=" full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 15%; text-align: center;">单位</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>deg</td>
<td>度，一个圆周为360deg</td>
</tr>
<tr>
<td>grad</td>
<td>梯度，一个圆周为400grad</td>
</tr>
<tr>
<td>rad</td>
<td>弧度，一个圆周为2 * pi rad</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">长度单位</span></div>
<table class=" full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 26px; text-align: center;"> </td>
<td style="width: 10%; text-align: center;">单位</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="5"><strong>绝对长度</strong></td>
<td>in</td>
<td>英寸，只有英美使用的单位</td>
</tr>
<tr>
<td>cm</td>
<td>厘米，1in = 2.52cm，1cm = 0.394in</td>
</tr>
<tr>
<td>mm</td>
<td>毫米，1cm = 10mm</td>
</tr>
<tr>
<td>pt</td>
<td>点，标准印刷度量单位，以往 1in = 72pt</td>
</tr>
<tr>
<td>pc</td>
<td>派卡，也是印刷业的度量单位，1pc = 12pt，6pc = 1in</td>
</tr>
<tr>
<td rowspan="6"><strong>相对长度</strong></td>
<td>em</td>
<td>em-height，等于给定元素的font-size值</td>
</tr>
<tr>
<td>ex</td>
<td>x-height， 所用字体中，小写x的高度</td>
</tr>
<tr>
<td>px</td>
<td>像素，对应屏幕上的一个点 <br />CSS规范建议，如果显示器的ppi（点/英寸）与96ppi差距很大，应当基于90ppi，自动缩放CSS中指定的px值。这样，在那些极高分辨率的显示器上，可以不至于无法看清文字</td>
</tr>
<tr>
<td>vw</td>
<td>相对于视窗的宽度，视窗本身宽度为100vw</td>
</tr>
<tr>
<td>vh</td>
<td>相对于视窗的高度，视窗本身高度为100vh</td>
</tr>
<tr>
<td>vmin<br />vmax</td>
<td>相对于视窗的宽度或高度，取决于哪个值更小（vmin）或者更大<br />IE9中使用vm代替vmin，不支持vmax</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">动态计算calc</span></div>
<p>CSS函数<pre class="crayon-plain-tag">calc()</pre>可以用于动态的计算一个值，可以用在任何需要&lt;length&gt;、&lt;frequency&gt;, &lt;angle&gt;、&lt;time&gt;、&lt;number&gt;、&lt;integer&gt;的地方。calc函数的参数可以是另外一个calc调用。包括IE10+在内的现代浏览器对此函数具有较好的支持。示例：</p>
<pre class="crayon-plain-tag">/* 充满可用宽度 - 80像素 */
width: calc(100% - 80px); 
/* 高度比视窗小80像素 */
height: calc(100vh - 80px);</pre>
<div class="blog_h1">常用CSS属性</div>
<div class="blog_h2"><span class="graybg">文本属性</span></div>
<table class=" full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 20%; text-align: center;">属性</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>text-indent</td>
<td>让第一行的文本向前后缩进一定的距离，例如：<br />
<pre class="crayon-plain-tag">/* 缩进2字符 */
text-indent: 2em;</pre></p>
<p> 注意，即使插入<pre class="crayon-plain-tag">&lt;br&gt;</pre> ，后续内容也不会自动获得缩进</p>
</td>
</tr>
<tr>
<td>text-align</td>
<td>水平对齐，导致块元素中文本对齐方向改变</td>
</tr>
<tr>
<td>vertical-align</td>
<td>垂直对齐，只应用于<span style="background-color: #c0c0c0;">行内元素和替换元素</span>，此属性不得继承：<br />baseline，默认值，元素的基线与父元素的基线对齐。对于img之类没有基线的元素，其底端与父元素的基线对齐<br />top，元素行内框与行框顶端对齐<br />bottom，元素行内框的底端与行框底端对齐<br />text-top，元素行内框顶端与父元素内容区顶端对齐<br />text-bottom，元素行内框的底端与父元素内容区底端对齐<br />middle，将元素行内框垂直中点与父元素基线上0.5ex处对齐<br />super，显示为上标，将元素的内容区与行内框上移，上移多少由用户代理确定<br />sub，显示为下标，将元素的内容区与行内框下移，下移多少由用户代理确定<br />百分比，相对于line-height上移或者下移一段距离</td>
</tr>
<tr>
<td>line-height</td>
<td>设置文本行基线（baseline）之间的（最小）距离<br />line-height - font-size得到的值就是行间距，行间距的1/2分别应用在内容区的顶部、底部，<span style="background-color: #c0c0c0;">文本默认情况下文本位于行内容区的中部</span></td>
</tr>
<tr>
<td>word-spacing</td>
<td>可以增加单词之间的距离</td>
</tr>
<tr>
<td>letter-spacing</td>
<td>可以增加字母之间的距离</td>
</tr>
<tr>
<td>text-transform</td>
<td>处理文本大小写</td>
</tr>
<tr>
<td>text-decoration</td>
<td>实现下划线、上划线、贯穿线、闪烁等效果</td>
</tr>
<tr>
<td>text-shadow</td>
<td>增加文本阴影效果</td>
</tr>
<tr>
<td>white-space</td>
<td>设置空白符的处理方式：<br />normal，合并多个空白符<br />pre，表现的像一个pre元素<br />nowrap，忽略换行符</td>
</tr>
</tbody>
</table>
<div class="blog_h1"><span class="graybg">常见问题</span></div>
<div class="blog_h2"><span class="graybg">CSS3问题</span></div>
<div class="blog_h3"><span class="graybg">Chrome下transform: translate3d导致透明PNG边缘锯齿（jag）</span></div>
<p>尝试添加样式：</p>
<pre class="crayon-plain-tag">outline: 1px solid transparent;</pre>
<div class="blog_h2"><span class="graybg">其它问题</span></div>
<div class="blog_h3"><span class="graybg">自适应布局最佳实践</span></div>
<ol>
<li>使用百分比或者视窗相对单位（vw/vh/vmin/vmax）来代替绝对数值</li>
<li>要想在大分辨率客户端上固定最大宽度，使用max-width</li>
<li>注意设置替换元素的max-width为100%</li>
<li>如果背景图片需要覆盖整个容器，使用background-size: cover</li>
<li>在grid中布局元素时，让grid的列数由视窗宽度决定。使用Flexbox、display:inline-block可以达到这一点</li>
<li>使用多栏文本时，指定column-width而不是column-count，以便自动在小分辨率UA上显示为单列</li>
</ol>
<div class="blog_h3"><span class="graybg">!important是什么作用</span></div>
<p>增加被修饰的样式的权重，权重高的样式规则会最终生效。权重从小到大依次为：</p>
<ol>
<li>用户代理的声明（浏览器默认样式）</li>
<li>用户声明</li>
<li>开发者声明（引用的CSS文件）</li>
<li>带有!important的开发者声明</li>
<li>带有!important的用户声明</li>
</ol>
<p>另外需要注意亮点：</p>
<ol>
<li>更加<span style="background-color: #c0c0c0;">具体化的选择器</span>比笼统选择器获得更大的权重</li>
<li><span style="background-color: #c0c0c0;">后面出现</span>的规则，具有更大的权重</li>
</ol>
<p>应当尽可能避免使用!important，因为它使得维护难度增加。</p>
<div class="blog_h3"><span class="graybg">悬停时子元素样式</span></div>
<pre class="crayon-plain-tag">.parent:hover .child {
} </pre>
<div class="blog_h3"><span class="graybg">禁止选择文本</span></div>
<pre class="crayon-plain-tag">.noselect {
    cursor: default; 
    -webkit-touch-callout : none; /* iOS Safari */
    -webkit-user-select: none; /* Chrome/Safari/Opera */
    -khtml-user-select: none; /* Konqueror */
    -moz-user-select: none; /* Firefox */
    -ms-user-select: none; /* Internet Explorer/Edge */
    user-select: none;
    -webkit-touch-callout: none; /* Non-prefixed version, currently not supported by any browser */
}</pre>
<div class="blog_h3"><span class="graybg">cellpadding以及cellspacing的CSS方式</span></div>
<p>对于cellpadding，可以设置td元素的样式：</p>
<pre class="crayon-plain-tag">td { 
    padding: 10px;
}</pre>
<p>对于cellspacing，可以设置table元素的样式：</p>
<pre class="crayon-plain-tag">table { 
    border-spacing: 10px;
    border-collapse: separate;
}

/* 下面的代码相当于设置table元素的cellspacing="0" */
table { 
    border-spacing: 0;
    border-collapse: collapse;
}</pre>
<div class="blog_h3"><span class="graybg">子元素相对于父元素绝对定位</span></div>
<p>将父元素设置为相对定位，子元素设置为绝对定位，则子元素相对于父元素进行绝对定位：</p>
<pre class="crayon-plain-tag">#parentDiv {
    position: relative;
}

#childDiv {
    position: absolute;
    left: 12px;
    top: 12px;
}</pre>
<div class="blog_h3"><span class="graybg">居中定位一个元素</span></div>
<pre class="crayon-plain-tag">/*对于块元素*/
#blockElement {
    margin: 0px auto;
}
/*对于文本元素*/
#textElement {
    text-align: center;
}</pre>
<div class="blog_h3"><span class="graybg">让一个块的高度为100%</span></div>
<pre class="crayon-plain-tag">html,body {
    margin: 0;
    height: 100%;
}

#blockDiv {
    width: 100%;
    height: 100%;
}</pre>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/css-faq">CSS知识集锦</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/css-faq/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
