自定义一个背景图片的高度,随着容器高度的变化而变化,小于图片的高度时裁剪,大于时拉伸100%展示

1、通过js创建<image?>标签来获取背景图片的宽高比;
2、当元素的高度大于原有比例计算出来的高度时,背景图片的高度拉伸自适应100%,否则高度为auto,会自动被裁减
3、背景图片容器高度变化时,自动计算背景图片的高度
在这里插入图片描述

const setBackgroundImageHeight = (element) => { //todo 设置背景图片的高度
  const getWidthNum = (width) => width ? width.slice(0, -2) : width; //todo 手动截掉宽度的px后缀
  const img = new Image();
  const { height, width, backgroundImage } = getComputedStyle(element); //? 获取到该元素的宽高
  img.src = backgroundImage.replace(/^url\(["']?/, '').replace(/["']?\)$/, '');
  img.onload = function() {
    var aspectRatio = img.width / img.height; //? 获取该背景图片的宽高比
    const backgroundImageHeight = getWidthNum(height) > (getWidthNum(width)/aspectRatio) ? '100%' : 'auto'; //* 当元素的高度大于原有比例计算出来的高度时,背景图片的高度拉伸自适应100%
    element.style.backgroundSize = `100% ${backgroundImageHeight}`;
    console.log('%c 🍎 张浩雨: img.onload -> element.style.backgroundSize ', 'font-size:16px;background-color:#ea00ea;color:white;', element.style.backgroundSize)
  };
}
const imageHeightOnChange = (element) => { //todo 背景图片容器高度变化时,自动计算背景图片的高度
  // 创建一个观察者对象
  const observer = new MutationObserver((mutationsList, observe) => {
      for(let mutation of mutationsList) {
        if (mutation.attributeName === 'style') {
          const style = mutation.target.getAttribute('style');
          if (style.includes('height')) {
            setBackgroundImageHeight(element)
          }
        }
      }
  });
  // 传入目标节点和观察目标节点的属性变动
  observer.observe(element, {
    attributes: true,
    attributeOldValue: true,
    attributeFilter: ['style']
  });
  return observer
}

var imgBox = document.getElementById('img_box');
imageHeightOnChange(imgBox)

案例讲解

1、初始化时的默认宽高;
在这里插入图片描述
2、背景图片的宽高;
在这里插入图片描述
3、执行上面的代码,并执行imgBox.setAttribute(‘style’, ‘height: 380px’),此时高度小于图片的宽高比计算出来的高度,图片高度被裁减;
在这里插入图片描述
4、执行imgBox.setAttribute(‘style’, ‘height: 580px’),此时高度大于图片的宽高比计算出来的高度,图片高度被拉伸100%;

在这里插入图片描述
5、当执行imgBox.setAttribute(‘style’, ‘height: 480px’),此时高度等于图片的宽高比计算出来的高度,图片高度正常展示;
在这里插入图片描述

### 回答1: 要让背景图片的宽度随着高度变化变化,你可以在 CSS 中使用 "background-size: contain;" 属性。这会让背景图片在保持它的宽高比的同尽可能大地覆盖背景。 ``` <style> .bg-image { background-image: url('your-image-url.jpg'); background-size: contain; } </style> <div class="bg-image"> <!-- Your content here --> </div> ``` 如果你希望背景图片填充整个背景,并且可能会被拉伸,可以使用 "background-size: cover;" 属性,这样它会按照它的宽高比来调整并填充背景。 ``` <style> .bg-image { background-image: url('your-image-url.jpg'); background-size: cover; } </style> <div class="bg-image"> <!-- Your content here --> </div> ``` ### 回答2: 要实现这个效果,可以使用CSS的background-size属性。background-size属性可以控制背景图像的大小。 具体步骤如下: 1. 在CSS样式中找到要应用背景图的元素,比如div元素。 2. 使用background-size属性,可以设置背景图的大小。常用的取值有: - cover:将背景图调整到完全覆盖元素的宽度和高度。这样背景图会被拉伸或压缩来适应元素的大小。 - contain:将背景图调整到可以完全容纳在元素的宽度和高度内。这样背景图可能会有留白。 - 具体大小值:可以设置具体的宽度和高度值来控制背景图的大小。 3. 根据需要,选择适合的background-size取值来实现背景图片宽度随着高度变化变化的效果。比如,设置background-size为100% auto,表示背景图的宽度将被自动调整为元素的宽度,并保持原始的高度一个示例代码如下: ```html <!DOCTYPE HTML> <html> <head> <style> div { background-image: url(path_to_image); background-repeat: no-repeat; background-size: 100% auto; /*设置背景图的宽度为100%并自适应高度*/ height: 300px; /*设置元素的高度*/ } </style> </head> <body> <div></div> </body> </html> ``` 上述代码中,div元素的背景图片宽度将自适应为元素的宽度,并根据原始图片高度进行调整。 ### 回答3: 在HTML中,可以使用CSS来实现背景图片的宽度随着高度变化而相应变化。 首先,在HTML文件中找到对应的元素,可以是body元素或者其他具体的元素。给该元素添加一个唯一的id或者class,方便使用CSS来选择该元素。 接下来,在CSS文件中使用选择器选中该元素,并进行样式设置。要实现背景图片的宽度随着高度变化变化,可以使用background-size属性。 具体的代码如下: 在HTML文件中: ```html <div id="myElement"> <!-- 这里是元素的内容 --> </div> ``` 在CSS文件中: ```css #myElement { background-image: url("your_image_url.jpg"); background-size: auto 100%; /* 设置宽度自适应,高度铺满 */ } ``` 其中,url()中的your_image_url.jpg是你想要设置为背景的图片路径。 通过设置background-size为auto 100%,即可实现背景图片的宽度自适应,高度铺满。这样,当元素的高度发生变化背景图片的宽度也会相应地随之变化。 需要注意的是,要确保背景图片的宽高比例与元素的宽高比例相对应,以保持图片不会被拉伸或扭曲。如果图片的宽高比例与元素的宽高比例不同,可以使用其他的背景图片定位和裁剪方法来实现所需效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值