CSS background-image

这篇博客详细介绍了CSS中的background-image属性,包括none、<image>、渐变、元素引用、image()函数、cross-fade()函数、image-set()函数的用法。通过实例展示了如何创建背景渐变、混合图像、选择适合设备的图片以及处理图像不可用的情况。还提到了background-color作为备用选项的重要性,并给出了TailwindCSS中的一种文字背景效果实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

background-image

属性用于为一个元素设置一个或者多个背景图像

语法

  1. 每一个背景图片可以是关键字 none 或者 <image>. 如果指定多张背景图片, 就需要使用逗号 , 将图片分开
  2. none
    • 表示无背景图
  3. <image>
    • 是一种表示二维图像的 CSS 数据类型. 可以表示下面的数据
    • url(): 既可以是互联网的图片, 也可以是本地的图片
      • .box1 {
          background-image: url(https://images.unsplash.com/photo-1490750967868-88aa4486c946?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxzZWFyY2h8Nnx8Zmxvd2VyfGVufDB8fDB8fA%3D%3D&auto=format&fit=crop&w=500&q=60);
          background-image: url(../../float/coffee-whole.png);
        }
        
    • <gradient> 渐变类型
      • .box2 {
          background-image: linear-gradient(#348e42, #9852ac);
        }
        
    • element() 从任意的 HTML 元素生成 <image> 类型的值. 目前这个函数只在 Firefox 中支持, Chrome 暂不支持
      • <div class="box box2" id="box2"></div>
        <div class="box box3"></div>
        
      • .box2 {
          background-image: linear-gradient(#348e42, #9852ac);
        }
        .box3 {
          background-image: element(#box2);
          background-image: -moz-element(#box2);
        }
        
      • 请添加图片描述
  • image(): 这个函数类似url()函数, 但是多了一些额外的功能, 比如可以指定图片的方向, 只展示图片的部分等. 😟但是这个函数目前所有浏览器都不支持

  • cross-fade() 函数定义的两张或者多张图像的混合

    • <div class="box box4"></div>
      <div class="box box5"></div>
      
    • 📕注意在 Chrome 等 浏览器要加 -wekbit- 前缀. 下面语法的意思是第一张图片 25% 的透明度, 第二章图片 75% 的透明度
    • .box4 {
        background-image: -webkit-cross-fade(
          linear-gradient(red, orange),
          linear-gradient(green, blue),
          75%
        );
        background-image: cross-fade(
          linear-gradient(red, orange),
          linear-gradient(green, blue),
          70%
        );
      }
      .box5 {
        background-image: linear-gradient(green, blue);
      }
      
    • 为了对比效果, 下面的图是不加任何渐变混合的图像, 可以看到上面的混合图像中蓝色变得更加紫色, 绿色变得有点暗, 看起来很脏
    • 请添加图片描述
  • image-set():

    • 让浏览器从一组图像中选择最适合当前设备屏幕的图片, 主要为了高分辨率屏幕

规则

  1. 在绘制图像时, 图像一层叠一层, 先指定的图像会在之后指定的图像上面绘制

    • <div class="box box6"></div>
      <div class="box box7"></div>
      
    • .box6 {
        background-image: linear-gradient(green, blue),
                        url(../../float/coffee-whole.png);
      }
      .box7 {
        background-image: url(../../float/coffee-whole.png),
                        linear-gradient(green, blue);
        background-size: contain;
        background-repeat: no-repeat;
      }
      
    • 请添加图片描述
  2. 元素的 borderbackground-image 之上绘制, 但是 background-color 在图像下绘制, 具体如何控制盒子和边框的关系需要使用 background-clipbackground-origin

    • MDN 建议仍然指定 background-color 属性, 如果图像无法被加载(比如网络断开)那么就会展示背景色
    • <div class="box box8"></div>
      
    • .box8 {
        border: 5px solid red;
        background-color: rebeccapurple;
        background-image: url(../../float/coffee-whole.png);
        background-size: contain;
        background-repeat: no-repeat;
      }
      
    • 请添加图片描述
  3. 如果指定的图像因为不存在等原因而无法绘制, 浏览器会此情况等同于其值为 none

  4. 使用 backgroun-color 兜底

    • 如果使用 background 简写属性同时设置 background-imagebackground-color, 一定要将 background-image 写前面. 因为 MDN 定义中其语法为下
    • 请添加图片描述
    • 其中 * 表示其前面的值出现0次, 1次或多次, 所以顺序是固定的

简单的应用

  1. Tailwind CSS 官网有这么一种实现效果. 就是图中几千字文章, 而且我发现这种效果在 Origin OS OCEAN(vivo 新系统)也很常见
    • 请添加图片描述

    • 可以用 background-image 实现

    • <div class="box10">几千字文章</div>
      
    • .box10 {
        background-image: linear-gradient(transparent 70%, skyblue 69%);
      }
      
    • 请添加图片描述

    • 📕CSS代码中故意使两种颜色范围发生重叠, 不然蓝色会出现渐变, 而不是像图片中这样由透明一下子变为蓝色

在网页设计中,使用 CSS 设置背景图片的平铺方式主要依赖于 `background-repeat` 属性。该属性允许开发者控制背景图像在水平方向、垂直方向上的重复行为,或完全禁止重复。 ### 使用 `background-image` 设置背景图 首先,通过 `background-image` 属性设置背景图片,其语法如下: ```css background-image: url('path/to/image.jpg'); ``` 可以同时设置多个背景图片,用逗号分隔,例如: ```css background-image: url('bgA.jpg'), url('bgB.jpg'); ``` 渲染时,前面的背景图片会显示在上层,后面的则位于下层 [^2]。 ### 设置背景图片的平铺方式 接下来,使用 `background-repeat` 属性定义背景图片的重复模式。该属性支持以下取值: - `repeat`:默认值,在水平和垂直方向都重复。 - `repeat-x`:仅在水平方向重复。 - `repeat-y`:仅在垂直方向重复。 - `no-repeat`:不重复。 #### 示例代码 ##### 水平方向重复(水平条纹) ```css body { background-image: url('horizontal-pattern.png'); background-repeat: repeat-x; } ``` 上述代码将使背景图片仅在水平方向上重复,适用于创建横条纹效果。 ##### 垂直方向重复(竖条纹) ```css body { background-image: url('vertical-pattern.png'); background-repeat: repeat-y; } ``` 这段代码会使背景图片在垂直方向重复,适合制作竖条纹样式。 ##### 不重复(单张图片展示) ```css body { background-image: url('main-background.jpg'); background-repeat: no-repeat; } ``` 此配置确保背景图片只显示一次,不会进行任何方向的重复。 ##### 同时设置多个背景图及其平铺方式 当需要为多个背景图分别指定不同的平铺方式时,可以通过逗号分隔的方式逐一对应: ```css body { background-image: url('top-layer.png'), url('bottom-pattern.jpg'); background-repeat: no-repeat, repeat; } ``` 这里,第一张图片不会重复,而第二张图片将在两个方向上重复显示 [^3]。 ### 小结 CSS 提供了灵活的方式来控制背景图片的平铺行为,结合 `background-image` 和 `background-repeat` 可以实现多样化的视觉效果。合理运用这些属性能够显著提升网页的设计感与用户体验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值