【问题标题】:Styling vertical images differently so they run side-by-side以不同的方式设置垂直图像的样式,以便它们并排运行
【发布时间】:2015-10-24 08:14:21
【问题描述】:

我正在构建一个图片库,并拥有水平和垂直图像。目前,图像一个接一个地加载,垂直堆叠。

它适用于水平图像,但一旦我在布局上有一个垂直图像,它就会拉伸以匹配水平图像的宽度并且变得太高而无法适应屏幕。

我正在尝试找到一种解决方案,始终将 2 个垂直图像并排对齐。

这里有一些图表来说明我想要实现的目标:

Image

理想情况下,会有一个仅使用 CSS 的解决方案,但我认为这不可能。所以,我尝试使用一些 jQuery。

$('.image-wrapper').prop('height', function(){
if($(this).height() > $(this).width()){
    //portrait, resize accordingly
    var width = $(this).width();
    var height = $(this).height();
    $(this).css({"width": "50%", "float": "left"});
});

此解决方案的唯一问题是它没有考虑 DIV 的边距。而且我找不到补偿的方法。

这是JSfiddle的链接

更新:

我已经调整了 jQuery 来测试之前的图像是否是垂直的,并在它们之间添加边距。我只是想知道这个解决方案有多可靠。

这是 [Fiddle][4] 的链接

作为奖励,如果能够检查我在一个序列中有多少垂直图像并将它们并排放置,那就太好了。 ;)

谢谢!

【问题讨论】:

  • 竖图应该去哪里?
  • 为什么不把 float:left 放在每个垂直图像上?不需要jquery。 .vertical{浮动:左;宽度:50%}
  • @eugensunic 他们应该低于水平的。我链接的图片应该让您更好地理解我的意思。
  • @BragDeal 我无权访问 HTML,水平和垂直图像都具有相同的 CSS 类。我正在调整其中一个 Squarespace 主题。
  • 图片重定向到某个网址?

标签: javascript jquery css alignment css-float


【解决方案1】:

这是一种解决方案:

$('.thumb-image').each(function (i, obj) {
        if ($(this).width() > $(this).eq(i + 1).width()) {
            $('.thumb-image').slice(i + 1).each(function () {

                $(this).css({
                    float: "left",
                    width: "50%",
                    padding: "0",
                    margin: "0"


                });
            });
        }

    });

小提琴编辑:http://jsfiddle.net/dsfa2bvu/41/

【讨论】:

  • 非常优雅的解决方案 Eugen。有没有办法在垂直图像之间添加 20px 边距?
  • 我正在尝试这些方面的东西:jsfiddle.net/gugavieira/a2jkfjqz/17
  • 我看到你已经得到了它与你的例子一起工作。好吧,你可以,但是你必须使用 if stat。用右边的边距调整左边,用左边的边距调整右边,但我相信你也必须更改包装器。如果我明天有空的话,如果你还想的话,我会这样做。
  • 如果您明天有空闲时间,我将不胜感激。如果我在此期间发现任何东西,我会及时通知你。谢谢
【解决方案2】:

选项 1:

您提到您无权访问 html。为了访问第 n 个元素的 css,您可以使用 nth-of-type(x) 选择器。

以下是有关它的一些信息: http://www.w3schools.com/cssref/sel_nth-of-type.asp

仅使用 css,添加以下内容:

.image-wrapper:nth-of-type(2),.image-wrapper:nth-of-type(3){
    float:left;
    width:50%;
    padding:0;
    margin:0;
}

并删除您的 js。应该这样做。

演示:http://jsfiddle.net/dsfa2bvu/39/

选项 2:

使用 Jquery,在每个图像中找到“垂直”一词。找到后,为其添加样式。

找到它的方法如下:

var x = $("img[src$='vertical-img']");
x.css("float","left");

演示:http://jsfiddle.net/dsfa2bvu/40/

【讨论】:

  • 谢谢吹牛。这是一项很棒的技术,但我并不总是知道第 n 个垂直图像。有时是第 2 次和第 3 次,有时是第 10 次和第 11 次等等。
  • 布拉德? :p 当具有相同的类名时,您可以做很多事情而无需访问 html。我唯一的另一个想法是,在每个图像中找到“垂直”这个词,并使用 js 并为其添加所需的样式
  • 对不起,吹牛;)我想我已经为此苦苦挣扎太久了。是时候休息了。您的意思是在文件名中找到“垂直”一词?这可能是一种有趣的方法。
  • 更新了我的答案。你找到你需要的图片(假设图片中有vertical-img这个词,然后你设置它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 2016-04-26
  • 1970-01-01
  • 2020-04-01
  • 2021-03-07
  • 2012-01-20
相关资源
最近更新 更多