【问题标题】:Image Height size doesn't change and only width that change图像高度大小不会改变,只有宽度会改变
【发布时间】:2019-08-03 09:12:37
【问题描述】:

我知道从标题上问有点奇怪,但是我在更改轮播中的图像大小时遇到​​了问题。无论我做什么,我的图像高度都不会改变,而是看起来像object-fit: cover这样的效果我想要的是显示图像的大小在width: 30vw;height: 30vh;左右,但每次我改变width 可以工作,但是当我更改 height 时,它就不行了。

我有一些猜测,例如容器大小、col 大小和包装我的图像的 div,如果我改变它们的大小,但最终它不是。

我已经阅读了一些关于此的主题:

css-object-fit-contain-is-keeping-original-image-width-in-layout

scaling-centering-and-cropping-image-with-object-fit-and-object-position

但它仍然无法正常工作。例如,假设我想让我的图像大小在 width: 360pxheight: 360px 左右

这是我的代码:

import React from "react";

// CSS
import './klien.css'

const Klien = () => {

    return (
        <div className="klien">
            <div className="klien-container">
                <p className="section-title">Klien Kita</p>

                <div className="carousel slide" data-ride="carousel">

                    <div className="carousel-item active">
                        <div className="col-12 col-sm-12 col-md-8 col-lg-8 card-center card-size">
                            <div className="mb-3">                    
                                <div className="text-center">
                                    <img className="img-size" src="http://placehold.it/360x360" alt="klien-logo" />
                                </div>              
                            </div>
                        </div>
                    </div>

                    <div className="carousel-item">
                        <div className="col-12 col-sm-12 col-md-8 col-lg-8 card-center card-size ">
                            <div className="mb-3">                    
                                <div className="text-center">
                                    <img className="card-img-top img-size" src="http://placehold.it/360x360" alt="klien-logo" />
                                </div>              
                            </div>
                        </div>
                    </div>

                    <div className="carousel-item">
                        <div className="col-12 col-sm-12 col-md-8 col-lg-8 card-center card-size">
                            <div className="mb-3">                    
                                <div className="text-center">
                                    <img className="card-img-top img-size" src="http://placehold.it/360x360" alt="klien-logo" />
                                </div>              
                            </div>
                        </div>
                    </div>

                    <div className="carousel-item">
                        <div className="col-12 col-sm-12 col-md-8 col-lg-8 card-center card-size">
                            <div className="mb-3">                    
                                <div className="text-center">
                                    <img className="card-img-top img-size" src="http://placehold.it/360x360" alt="klien-logo" />
                                </div>              
                            </div>
                        </div>
                    </div>

                </div> 
            </div>
        </div>
    );        
}

export default Klien;

这是我的 CSS:

.klien{
    background-color: #f6f7fd;
    min-height: 50vh;
}

.klien .klien-container{
    overflow: hidden;
    padding-top: 10vh;
}

.klien .section-title{
    color: #3b73c5;
    font-size: 3em;
    font-weight: 500;
    text-align: center;
}

.klien .carousel-size{
    /* height: 20vh; */
}

.klien .card-center{
    margin: 0% auto;
}

.klien .text-center{
    text-align: center;
}

.klien .card-size{
    max-height: 20vh;
}

.klien .img-container{
    height: 20vh;
    width: 20vh;
}

.klien .img-size{
    width: 30vw;
    height: 30vh;
    /* object-fit: contain; */
}

有人可以帮助解释我的问题吗?一开始我以为可能是因为object-fit: contain,但似乎我的猜测是错误的

这是截图:

【问题讨论】:

  • 您希望图像适合所需大小吗?图片可以拉伸吗?
  • @joseluismurillorios 是的,至少我想这样做,但是每当我尝试更改大小时,似乎height 属性锁定在某些东西上,所以只有width 我可以更改,但如果我这样做会使图像产生类似object-fit: cover的效果
  • 我已经回答了一些想法,如果您有更多关于您想要什么的详细信息,我可以提供帮助。

标签: html css reactjs


【解决方案1】:

我建议使用带有背景图片的 div,这样您就可以控制列表的响应速度。执行该更改几乎不需要任何内容​​。

你需要把你的img标签改成div

<div
  className="img-size"
  style={{ backgroundImage: `url(${"http://placehold.it/360x360"})`}}
/>

你的 CSS

.klien .img-size{
    width: 30vw;
    height: 30vh;
    margin: 0 auto;
    background-position: center;
    background-size: cover;
    /* object-fit: contain; */
}

我用这个做了一个codepen。希望对您有所帮助,如果您需要其他方法,可以告诉我。

【讨论】:

  • 谢谢^.^,它的工作就像一个魅力,我真的很怀念这种方法,如果我把它做成背景图像当然可以,但是你知道为什么第一种方法不工作?我很好奇它的特性,如果我尝试使用 API 读取图像,这种方法可以工作吗?
  • 我不知道究竟是为什么,但我认为这与浏览器不知道在哪里显示 img 标签(位置、大小)有关,因为 img 标签没有与背景相同的属性。你让我想想!
【解决方案2】:

您是否尝试过使用内联 css 更改图像大小?比如&lt;img src="url" width="specified with in px or %"&gt;

【讨论】:

  • 谢谢你的回答,我已经尝试了内联方法,它仍然给出相同的结果,height 属性不改变大小
  • placehold.it/360x360" alt="klien-logo" /> placehold.it/360x360"> 尝试以这种格式编辑
  • 当我尝试这段代码时,我得到了一些错误,说 ImageTransformation 没有定义,是 ImageTransformation 自定义模块还是来自反应模块?
  • 您是否检查了区分大小写?或者,将 更改为 .....您可以将扩展名更改为您的文件扩展名
  • 是的,我已经尝试过了,但它仍然无法正常工作,但幸运的是@joseluismurillorios 方法可以解决我的问题,感谢您的回答^.^
猜你喜欢
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
相关资源
最近更新 更多