CSS background-image

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

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-image 属性实现背景图片填充方法 在 CSS 中,`background-image` 属性用于设置元素的背景图片。为了实现背景图片的填充效果,通常需要结合 `background-size` 和 `background-position` 属性来确保图片能够完全覆盖容器区域,并且保持良好的视觉效果[^4]。 以下是实现背景图片填充的具体方法: 1. **使用 `background-size: cover;`** 该属性值会缩放背景图片以使其完全覆盖容器区域。如果图片的宽高比与容器不一致,图片会被裁剪以适应容器尺寸[^5]。 ```css .background-fill { background-image: url('image.jpg'); background-size: cover; background-position: center; /* 确保图片居中显示 */ background-repeat: no-repeat; /* 防止图片重复 */ } ``` 2. **使用 `background-size: contain;`** 如果希望图片完整显示而不被裁剪,可以使用 `contain` 值。这种方式会缩放图片以适应容器,但可能会导致图片无法完全覆盖容器区域[^5]。 ```css .background-contain { background-image: url('image.jpg'); background-size: contain; background-position: center; background-repeat: no-repeat; } ``` 3. **设置背景颜色作为后备方案** 在某些情况下,图片可能无法加载或不可用。为了保证视觉一致性,建议为背景添加一种颜色作为后备方案[^4]。 ```css .background-fill { background-image: url('image.jpg'); background-size: cover; background-position: center; background-repeat: no-repeat; background-color: #f0f0f0; /* 设置后备颜色 */ } ``` 4. **多背景图片的填充效果** 如果需要同时使用多个背景图片并实现填充效果,可以通过逗号分隔多个 `background-image` 值,并为每个图片单独设置 `background-size` 和 `background-position`[^3]。 ```css .multi-background { background-image: url('image1.jpg'), url('image2.jpg'); background-size: cover, contain; background-position: center, top right; background-repeat: no-repeat, repeat-y; } ``` 通过以上方法,可以灵活地控制背景图片的填充效果,满足不同的设计需求。 ```html <div class="background-fill" style="width: 100%; height: 400px;"></div> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值