【问题标题】:css adding/removing padding to element depending of image widthcss根据图像宽度向元素添加/删除填充
【发布时间】:2016-05-08 06:59:13
【问题描述】:

我有一个 %-width 的元素,其中包含一个最大宽度为 100% 的水平居中图像。

.container { width: 80%; )
.container img { 
    max-width: 100%;
    height: auto;
    display: block;
    margin-left: auto;
    margin-right: auto;
}

仅当容器宽度超过原始图像宽度的 100% 时,我想在容器上添加填充顶部或在图像上添加边缘顶部。 例如。当浏览器窗口很大或图像很小时,使图像没有完全填满容器宽度。

有什么方法可以实现吗?

已编辑:元素有一个类,而不是一个 id。我的问题与 tumblr 布局有关,每个帖子的元素都重复,所以我不能在模板中给它们一个 id...

【问题讨论】:

  • 为什么不给图片添加一个最大宽度标签。
  • @Maverick:图像的大小非常不同。它们可以扩展得更小,但永远不能超过 100%....

标签: html css image conditional-statements padding


【解决方案1】:

如果您的容器的宽度是基于百分比的,并且您的图片的最大宽度设置为 100%,那么无论图片大小,该图片都会始终展开以填满容器。这意味着容器永远不能大于图像。假设这不是您的意思,并且图像是特定宽度,我在下面提供了两种可能的解决方案。


听起来您想在整个屏幕宽度减小时应用边距(也许对于手机)。在这种情况下,最简单的方法是在 CSS 中使用媒体查询。

首先为您的网站的扩展版本定义您想要的样式,就像您已经拥有的一样(台式机或大型平板电脑,无论您的目标是什么)。

#container { width: 80%; )
#container img { 
    max-width: 100%;
    height: auto;
    display: block;
    margin-left: auto;
    margin-right: auto;
}

然后在 CSS 文件中的任何对您的设计有意义的断点处定义您的媒体查询。

@media (max-width: 320px){
    #container img {
        margin-top: 5px;
    }
}

只要屏幕宽度减小到 320 像素或更小,此媒体查询块中的所有 CSS 规则都会激活,允许您动态进行更改。


如果您不从事这样的响应式设计并且屏幕大小不会改变,您可能需要使用一些 JavaScript 来处理样式更改。

首先,在您的 CSS 中创建一个添加边距的类。

.img-margin {
  margin-top: 5px;
}

在脚本标签中使用查询选择器来获取您需要控制的元素,并创建一个函数来检查它们各自的大小,并有条件地添加/删除边距类。

<script>    
    var container = document.getElementById('container');
    var image = document.getElementById('image');

    container.addEventListener('click', toggleMargin);

    function toggleMargin(){
        if (container.offsetWidth > image.offsetWidth){
            image.classList.add('img-margin');
        } else {
            image.classList.remove('img-margin');
        }
    }
</script>

我在上面的例子中使用了事件监听器来进行点击。您需要将其替换为正在发生的任何事件以触发更改。


我提倡媒体查询路由,因为它更加优雅并且不需要 JavaScript,尽管 JS 方法可以根据您的用例提供更大的灵活性。

【讨论】:

  • 感谢@huntermacd 的详细回复! - 不,在容器 % 和图像最大宽度 100% 的情况下,图像会向下缩放到容器宽度,但当容器比图像 100% 宽度更宽时,图像不会超过其原始宽度。这就是我要的。 - 当容器大于图像宽度时,我想为图像添加上边距。 - 这是一个 tumblr 布局。我无法将个人 ID 或类分配给各种容器/图像。如果可以,您的脚本将是一个很好的解决方案,但我不知道如何在没有 id 的情况下获取容器/图像宽度。 :-(
  • 对最大宽度的好调用。我想我在想图像有width: 100% 而不是max-width: 100%#container 元素 id 实际上是在代码中还是仅用作示例?如果它在代码中,您可以获取该 id 并使用 container.querySelectorAll('img) 来获取该容器中所有图像的数组。然后通过索引检查所需的特定图像的宽度:var container = document.getElementById('container'); var images = container.querySelectorAll('img'); images[0].offsetWidth
猜你喜欢
  • 2021-12-19
  • 2011-02-28
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 2014-06-28
相关资源
最近更新 更多