我正在try 调整一个img的大小与其本身的百分比.例如,我只想通过将图像大小调整为50%来将其缩小一半.但是应用width: 50%;会将图像大小调整为容器元素(父元素,例如,可能是<body>)的50%.

问题是,我可以在不使用javascript或服务器端的情况下调整图像的大小吗?(我没有图像大小的直接信息)

我很确定你做不到这一点,但我只是想看看是否有智能CSS唯一的解决方案.谢谢

推荐答案

我有两种方法.

Method 1. demo on jsFiddle

这种方法只调整图像的视觉尺寸,而不是DOM中的实际尺寸,调整后的视觉状态集中在原始尺寸的中间.

html:

<img class="fake" src="example.png" />

css:个个

img {
  -webkit-transform: scale(0.5); /* Saf3.1+, Chrome */
     -moz-transform: scale(0.5); /* FF3.5+ */
      -ms-transform: scale(0.5); /* IE9 */
       -o-transform: scale(0.5); /* Opera 10.5+ */
          transform: scale(0.5);
             /* IE6–IE9 */
             filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.9999619230641713, M12=-0.008726535498373935, M21=0.008726535498373935, M22=0.9999619230641713,SizingMethod='auto expand');
}​

101个浏览器的统计数据显示,css个浏览器中有css个是内联的.

Method 2. demo on jsFiddle

html:

<div id="wrap">
    <img class="fake" src="example.png" />
    <div id="img_wrap">
        <img class="normal" src="example.png" />
    </div>
</div>​

css:个个

#wrap {
    overflow: hidden;
    position: relative;
    float: left;
}

#wrap img.fake {
    float: left;
    visibility: hidden;
    width: auto;
}

#img_wrap {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
}

#img_wrap img.normal {
    width: 50%;
}​

Note: img.normal and img.fake is the same image.
Browser support note: This method will work in all browsers, because all browsers support css properties used in method.

该方法是这样工作的:

  1. #wrap#wrap img.fake有流量
  2. #wrap具有overflow: hidden,使得其尺寸与内部图像(img.fake)相同
  3. img.fake#wrap内唯一没有absolute定位的元素,因此它不会中断第二步
  4. #img_wrap#wrap内具有absolute个定位,并且在尺寸上延伸到整个元件(#wrap)
  5. 第四步的结果是#img_wrap与图像的尺寸相同.
  6. 通过将width: 50%设置为img.normal,其大小为#img_wrap50%,因此是原始图像大小的50%.

Html相关问答推荐

Flexbox嵌套div溢出

有没有可能一个按钮,有焦点,然后再次点击它清除它的焦点,只是使用css?

将弹性容器设置为内容宽度

通过动态div的对角线

让多对图像在各自的div中叠加

尽管div高度为100%,div中的内容仍会溢出

SCSS动画错误:心脏在页面刷新时启动动画,原因是:Checked和:Not(:Checked) Select 器

渐变进度条位置

如何使用css横向显示英文和中日韩文字?

按钮悬停效果不影响按钮内的图标

为什么我的网页显示网格区域彼此相邻,而不是我设置它们的方式?

从触发元素移动到有间隙的内容时 CSS 工具提示关闭

Angular中如何向单选按钮添加验证

我如何使用 CSS nth-child(odd) nth-child(even) 来对齐 CSS 网格中的列?

将背景图像裁剪成两半

水平对齐两列中的两个按钮 同一级别

在 html 邮箱的左侧和右侧制作多个元素很热门吗?

样式不适用于来自 tailwindcss 的网络

在部分而不是正文中定义页面宽度

focusout() Select 器不适用于搜索框