Skip to content

CSS 常用属性(Day6 2/4) ​

本页对应 Day06_CSS,共 6 段视频,约 1 小时 14 分。

学习目标 ​

  1. 能使用关键字设置 background-position,并解释单值设置时另一方向默认取 center 的规则。
  2. 能使用带单位的长度坐标设置背景图位置,说明坐标原点在元素左上角、Y 轴向下为正,并能预测负值和单值设置的效果。
  3. 能使用百分比设置背景图位置,并按“元素与图像分别建立坐标系、对应百分比点重合”的规则预测和验证 50% 50%、100% 100% 等效果。
  4. 能区分 background-position 与 background-position-x、background-position-y 在单值设置时的差异,并正确使用子属性控制水平或垂直位置。
  5. 能设置 background-attachment: fixed,说明其定位原点变为视口左上角,并实现“页面滚动、背景图不动”的效果。
  6. 能使用 background 复合属性按任意顺序合并颜色、图像、重复、位置等子属性,并判断重复声明时仅最后一条生效。

知识点 ​

回顾清单与代码 ​

本节是基础回顾,目标不是背名词,而是把“单位/颜色—选择器—显示模式—字体文本属性”串成可检查的清单。转写稿中反复用“两个对比盒子—设宽高/内边距/边框—刷新看差异”来验证效果,这种调试方法同样适合复习基础点。另注意转写稿口误:box 常被转成 book、border 被转成“包der”、视口被转成“适口”,整理时应按标准写法记。

原笔记清单保留如下:

1. 长度单位和颜色设置方式
   长度单位: px、em、%
   颜色设置方式:颜色名、rgb()、HEX

2. CSS基本选择器
   ID选择器
   类名选择器
   标签名选择器
   全局选择器

3. 显示模式
   inline、block、inline-block
   display

4. 属性总结
   4.1 字体样式
       font-size、font-weight、font-style、font-family、font
   4.2 文字颜色
       color
   4.3 文本样式
       letter-spacing、word-spacing、text-indent、text-decoration、text-align
       vertical-align

一、长度单位和颜色设置方式 ​

为什么需要: 页面里所有尺寸和颜色都要落到具体值上,单位选错、颜色写法不统一,后面的布局和主题维护都会乱。
怎么想: 先分清“绝对长度”和“相对长度”:px 直观稳定,em 受父级字号影响,% 受参照尺寸影响;颜色先记三种常用写法,再按可读性选择。
怎么做: 固定边框、间距可用 px;需要随字号缩放可用 em;宽度、容器占比可用 %。颜色名适合调试,rgb() 适合调透明度前的三通道,HEX 适合设计稿取色。
易错点: 不要把 % 当成“万能长度”,它依赖参照物;em 会继承父级字号,嵌套后容易算错;颜色值不要漏 #,rgb 三个值不要超范围。转写稿里“包der”应写 border,这类口误要按标准属性名纠正。

二、CSS基本选择器 ​

为什么需要: 选择器决定“样式写给谁”,选错范围就会出现该变的没变、不该变的被污染。
怎么想: 先看结构:唯一标识用 ID,可复用的一组用类名,同类标签统一设置用标签名,清除默认样式用全局选择器;再考虑优先级和复用性。
怎么做: ID 选择器写 #id,类名写 .类名,标签名直接写标签,全局用 *。实际开发优先用类名,便于复用;ID 多用于锚点或唯一结构。
易错点: ID 不要大量复用;类名拼写、大小写要一致;全局选择器不要随意写重属性,容易影响所有元素。调试时可像转写稿那样先加边框、刷新对比,确认选择器是否命中。

三、显示模式 ​

为什么需要: 元素是占一整行、跟文字同行,还是可设宽高,直接决定布局效果。
怎么想: 先判断元素在页面中的角色:标题/段落/容器通常 block,文字内元素通常 inline,需要同行又要宽高时用 inline-block;最后用 display 改。
怎么做: display:block 可设宽高、默认换行;inline 不换行但宽高常不生效;inline-block 不换行且可设宽高。用两个对比盒子设不同 display,刷新观察最直观。
易错点: inline 元素设宽高无效;inline-block 之间可能产生空白间隙;不要只改 display 而忽略原有 margin/padding。

四、属性总结 ​

为什么需要: 字体、文字颜色和文本样式是页面可读性的基础,属性多但可按“字体—颜色—文本”分组记。
怎么想: 先定字体大小、粗细、风格、字族,再定颜色,最后调字间距、词间距、首行缩进、装饰线、对齐和垂直对齐。
怎么做: 字体样式用 font-size、font-weight、font-style、font-family,简写用 font;文字颜色用 color;文本样式用 letter-spacing、word-spacing、text-indent、text-decoration、text-align、vertical-align。
易错点: font 简写会重置未写子属性;text-align 管行内内容对齐,不是块级元素自身居中;vertical-align 主要作用于行内/表格单元格场景,别乱用在普通块布局上。复习时建议按转写稿的对比法:写两组元素、设边框、刷新看差异,再逐项注释验证。

先搭一个可对比的调试环境 ​

本节笔记未附图片文件,下面用可复现代码保留转写中的“大图/小图”对比过程。

为什么需要:讲 background-position 时,如果只有一个盒子,很难判断“背景图比元素小”和“背景图比元素大”的差异。
怎么想:做两个同尺寸盒子,一个放小图,一个放大图;加背景色、边框、内边距,并先关闭重复。小图不重复时能看见空白区域,大图不重复时只能看见元素范围内的局部。
怎么做:

css
.box{
  width:500px;
  height:300px;
  padding:20px;
  border:2px solid #333;
  display:inline-block;
  vertical-align:top;
  background-color:#ccc;
  background-repeat:no-repeat;
}
.box1{ background-image:url("bg5.jpg"); } /* 小图 */
.box2{ background-image:url("bg4.jpg"); } /* 大图 */

易错点:背景图默认会重复,若不写 no-repeat,小图会铺满,容易误判位置;位置属性调整的是“背景图在元素上的位置”,不是移动元素本身。

关键字设置 background-position ​

为什么需要:九宫格定位最直观,适合快速把背景图放到左上、右下、居中。
怎么想:横向关键字是 left/center/right,纵向是 top/center/bottom;两个值时先 X 后 Y;只写一个值时,另一个方向默认 center。关键字表示图像整体与元素对应边或中心对齐。
怎么做:

css
.k1{ background-position:right bottom; }
.k2{ background-position:center; }
.k3{ background-position:left; } /* 等价 left center */

易错点:纵向中间是 center,不是 middle;只写 left 时 Y 不是 top,而是 center;大图超出元素的部分会被裁掉,只显示对应区域。

坐标设置 background-position ​

为什么需要:关键字只有九种组合,无法精确控制任意位置。
怎么想:以元素左上角为原点,X 向右为正,Y 向下为正;两个长度分别表示图像左上角的 X、Y 坐标。只写一个长度时,X 取该值,Y 默认 center,且这里的居中是把图像整体居中。
怎么做:

css
.c1{ background-position:100px 20px; }
.c2{ background-position:-100px 100px; }
.c3{ background-position:100px; } /* Y 为 center */

易错点:坐标可以是负值;超出元素范围不可见;百分比不属于“长度坐标”,规则不同,不能混为一谈。

百分比设置 background-position ​

为什么需要:需要按比例定位,例如 50% 50% 让图像中心对准元素中心。
怎么想:元素和图像各自建立坐标系,百分比在各自坐标系中找到点,再让两个点重合。50% 50% 不是“图像左上角到元素中心”,而是“图像中心对元素中心”;100% 100% 是右下对右下。
怎么做:

css
.p1{ background-position:50% 50%; }
.p2{ background-position:20% 10%; }
.p3{ background-position:100% 100%; }

易错点:最容易把百分比当成坐标长度;混搭时只对对应轴生效,实际开发中不必强行混搭。

background-position-x / background-position-y ​

为什么需要:有时只想单独调水平或垂直方向。
怎么想:x 子属性管水平,y 子属性管垂直;但只写一个子属性时,另一个方向保持默认状态,不等同于复合属性单值规则。
怎么做:

css
.s1{ background-position-x:100px; } /* Y 保持默认顶部 */
.s2{ background-position:100px; }   /* Y 为 center */

易错点:background-position:100px 与 background-position-x:100px 效果可能不同,调试时要看清另一个轴是否被默认值影响。

background-attachment: fixed ​

为什么需要:实现“页面滚动,背景图感觉不动”的效果。
怎么想:默认 scroll 随元素滚动;设为 fixed 后,背景定位坐标系原点从元素左上角变成视口左上角。但背景图仍属于元素,只有元素与背景图重合的区域才显示。
怎么做:

css
.section-bg{
  height:300px;
  background-image:url("bg5.jpg");
  background-repeat:no-repeat;
  background-position:center;
  background-attachment:fixed;
}

易错点:不是背景图脱离元素;center 会变成视口中心,而不是元素中心;大图小图都只在元素范围内可见,滚动时元素经过背景图位置才显示。

background 复合属性 ​

为什么需要:一次写颜色、图片、重复、位置,减少代码。
怎么想:background 可写任意子属性值,空格分隔,顺序不严格;但同一属性重复声明时,后一条会覆盖前一条,简写未写的子属性会被重置。
怎么做:

css
.book{
  background:#ccc url("bg5.jpg") no-repeat right bottom;
}

易错点:不要先写 background:#ccc,再写 background:url(...) no-repeat 还期望灰色保留;后一条简写会把未写出的颜色重置。调试时以最终生效的那条声明为准。

课堂画面 ​

课堂画面 1

课堂画面 2

课堂画面 3

课堂画面 4

课堂画面 5

课堂画面 6

代码示例 ​

示例一:使用关键字设置背景图像位置 ​

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>背景图像位置——关键字</title>
  <style>
    .book {
      width: 500px;
      height: 200px;
      padding: 10px;
      border: 2px solid #333;
      display: inline-block;      /* 两个盒子放到一行,方便对比 */
      background-color: #ccc;     /* 不重复的区域露出背景色 */
      background-repeat: no-repeat;
    }
    .book01 {
      background-image: url("./images/bg5.jpg");   /* 小图:192 × 80 */
    }
    .book02 {
      background-image: url("./images/bg4.jpg");   /* 大图:1920 × 800 */
      background-position: right bottom;           /* 先水平后垂直 */
    }
  </style>
</head>
<body>
  <div class="book book01">book01:小图</div>
  <div class="book book02">book02:大图</div>
</body>
</html>

关键行

  • background-position: right bottom; —— 两个关键字,第一个管 X 轴(left / center / right),第二个管 Y 轴(top / center / bottom)。
  • background-repeat: no-repeat; —— 关掉重复,位置变化才看得清楚;开着重复时,调整位置后左侧、上方也会出现重复的图像。

易错点

  • 只写一个关键字时,另一个方向默认是 center,不是 top。写 left 等价于 left center,写 bottom 等价于 center bottom,写 center 等价于 center center。
  • 纵向居中关键字是 center,不是 middle;这里和长度单位里的命名不统一,要死记。
  • 关键字只有 3×3 = 9 种组合(四角 + 四边中点 + 正中心),想调更细的位置必须用坐标或百分比。
  • 大图比元素大时,只能看到图像的一部分;超出元素的部分直接不可见,不用管它。
  • 宽高 + padding + border 默认是 content-box,元素实际占位是 500+20+4 = 524px 宽。

示例二:使用坐标(长度)与百分比设置背景图像位置 ​

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>背景图像位置——坐标与百分比</title>
  <style>
    .item {
      width: 500px;
      height: 300px;
      padding: 10px;
      border: 2px solid #333;
      display: inline-block;
      background-color: #ccc;
      background-repeat: no-repeat;
      background-image: url("./images/bg5.jpg");
    }
    /* 1. 两个长度:设置的是"图像左上角"在元素坐标系中的位置 */
    .item1 { background-position: 100px 20px; }

    /* 2. 只写一个长度:X = 100px,Y 默认 center */
    .item2 { background-position: 100px; }

    /* 3. 百分比:元素上的点 与 图像上的点 重合 */
    .item3 { background-position: 50% 50%; }

    /* 4. 子属性只设置 X:Y 不设置就保持默认 0(top),不是 center */
    .item4 { background-position-x: 100px; }
  </style>
</head>
<body>
  <div class="item item1">长度坐标 100px 20px</div>
  <div class="item item2">只写一个长度 100px</div>
  <div class="item item3">百分比 50% 50%</div>
  <div class="item item4">子属性 background-position-x: 100px</div>
</body>
</html>

关键行

  • background-position: 100px 20px; —— 元素左上角是原点,X 轴向右为正,Y 轴向下为正,长度写的是图像左上角落在哪个坐标点。
  • background-position: 50% 50%; —— 百分比走的是另一套规则:元素上建一个坐标系、图像上建一个坐标系,各自找到 50% 50% 那个点,然后点对点重合,效果等同于 center center。
  • background-position-x: 100px; —— 子属性只管一个方向,另一个方向不写就是默认值 0。

易错点

  • 长度和百分比是两套完全不同的规则:长度定的是图像左上角的位置,百分比定的是点与点重合。百分比千万不要当长度来理解。
  • 只写一个长度:X 是它,Y 默认 center;但只写 background-position-x 时,Y 是默认的 0(顶部)。这两者结果不一样,是本节最典型的坑。
  • 坐标可以是负值,例如 -100px 100px 表示图像左上角在元素左上角的左上方;超出元素区域的部分不可见。
  • 百分比不要加 px 之类的单位,写成 50% 50%,两个值用空格分隔。
  • 坐标和关键字可以混搭(如 right -50px、100px bottom),但实际开发中没必要,选一种写法保持统一即可。

示例三:背景图像固定与 background 复合属性 ​

html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>背景图像固定 + 背景复合属性</title>
  <style>
    body { margin: 0; }

    .section {
      height: 400px;
      background-color: #999;
    }
    .section-bg {
      height: 300px;
      background-color: #eee;
    }

    /* 写法一:拆开写,重点看 background-attachment */
    .section-bg01 {
      background-image: url("./images/bg5.jpg");
      background-repeat: no-repeat;
      background-position: center;
      background-attachment: fixed;   /* 定位坐标系原点变成视口左上角 */
    }

    /* 写法二:复合属性,值可以任意顺序、任意数量,空格分隔 */
    .section-bg02 {
      background: #eee url("./images/bg4.jpg") no-repeat center fixed;
    }
  </style>
</head>
<body>
  <div class="section"></div>
  <div class="section-bg section-bg01"></div>
  <div class="section"></div>
  <div class="section-bg section-bg02"></div>
  <div class="section"></div>
</body>
</html>

关键行

  • background-attachment: fixed; —— 默认值是 scroll(随元素滚动),设为 fixed 后,背景图定位的坐标原点从"元素左上角"变成"浏览器视口左上角"。
  • background: #eee url("./images/bg4.jpg") no-repeat center fixed; —— 复合属性,颜色、图片、重复方式、位置、固定方式全部写在一起。

易错点

  • 设成 fixed 后背景图可能一开始"看不见":图像固定在视口上,但背景图仍然只属于这个元素,只有图像与元素重叠的部分才显示,所以页面滚动到元素与图像重合时才会出现,滚过去又消失。
  • 设置 fixed 前必须先有 background-image,没有背景图时这个属性毫无意义。
  • background 复合属性会重置所有背景子属性。同一个元素写两条 background,前面的那条完全不生效,浏览器只看最后一条——不是"先执行再执行"。
  • 复合属性里的多个值用空格分隔,顺序无所谓、数量也无所谓,可以只写颜色,也可以只写图片。
  • 如果拆开写子属性,注意不要和复合属性混在同一规则里互相覆盖。

常见错误 ​

  1. 现象:只写 background-position: left 后,纵向位置与预期不符。
    原因: 关键字只写一个值时,另一个方向默认取 center,不是 top。
    修法: 明确写出第二个关键字,或按需改用坐标/百分比。

  2. 现象:用 background-position: 100px 时,纵向没有贴在顶部。
    原因: 长度坐标只写一个值时,该值作为 X 坐标,Y 方向默认 center。
    修法: 需要顶部对齐时写成 100px 0 或 100px top。

  3. 现象:把 background-position: 20% 10% 当成“图像左上角定位到元素 20% 10% 处”。
    原因: 百分比不是普通长度坐标,而是元素上的百分比点与图像上的百分比点重合。
    修法: 按“元素找点、图像找点、两点重合”检查效果;需要左上角坐标时改用长度。

  4. 现象:设置 background-attachment: fixed 后背景图突然看不见,滚动页面才出现。
    原因: fixed 后定位坐标系变为视口左上角,但背景图仍受元素裁剪,只有图像与元素重合区域可见。
    修法: 结合元素位置和视口重新设置 background-position,或确认该场景是否真的需要 fixed。

  5. 现象:调整位置时以为没生效,或看不出真实位置。
    原因: 背景重复仍开启,重复图像干扰了对“原图位置”的判断。
    修法: 调试位置时先设置 background-repeat: no-repeat,再观察原图位置。

  6. 现象:在同一个选择器里先写 background 再写 background,前面的颜色/图片被覆盖。
    原因: 同一属性重复声明时,后写声明覆盖前写声明,不是逐项叠加。
    修法: 合并为一条 background 复合声明,或改用对应子属性分别设置。

练习 ​

  1. 写一个元素,设置小背景图且不重复,并分别用关键字把它定位到:右下角、正中心、右上角。
  2. 用长度坐标完成三个定位:0 0、100px 20px、-50px 100px,观察超出元素部分是否可见。
  3. 用百分比完成 50% 50%、100% 100%、20% 10% 三组定位,并说明每组中“元素点”和“图像点”的重合关系。
  4. 制作一个页面滚动时背景图看起来不动的效果,要求说明元素、视口、背景图三者位置关系,并解释为什么背景图只在元素区域内出现。

原视频对照 ​

#视频时长
1使用关键字设置背景图像位置14:37
2使用坐标设置背景图像位置15:42
3使用百分比设置背景图像位置13:28
4background-position的两个子属性06:22
5背景图像固定20:09
6背景复合属性03:46

小结 ​

  1. background-position 的关键字方案简单,但可表达的位置组合有限。
  2. 长度坐标设置的是图像左上角在坐标系中的位置;只写一个长度时,Y 默认 center。
  3. 百分比定位不是左上角坐标定位,而是元素与图像各自取百分比点后重合。
  4. 关键字、长度、百分比可以混搭,但实际开发优先保持写法统一、便于维护。
  5. background-position-x/y 与复合属性单值行为不同,未设置的方向会取默认状态。
  6. background-attachment: fixed 会改变定位坐标系,主要应用场景是“页面滚动、背景图视觉上不动”。
  7. background 是自由度很高的复合属性,但同一选择器内重复声明会覆盖,调试位置时应先排除重复图像干扰。