CSS:使用不包含JS的包含图像定义元素的宽度

时间:2017-06-25 10:29:06

标签: html css image width

它接缝我找不到解决方案而不使用JS来解决这个问题: 我需要制作一个水平滑块,上面有图像和一些文字。所有图像都需要调整到相同的高度,并自动调整宽度。图像下方是一个文本,如果图像宽度很小,应该包裹多行。 问题:我很难将周围元素的宽度限制在图像的宽度(虽然不知道图像宽度)。 预期的结果是所有图像彼此相邻而没有间距(类似于谷歌图像搜索)。

我正在使用white-space:nowrap在外部元素上并显示:内部的内联块以获得水平滚动。我也尝试过flex,但没有区别。

这是我所拥有的一个小提琴: https://jsfiddle.net/lobin/awbL80st/

`<ul>
  <li>
    <div class="pic">
      <img src="(url)">
    </div>
    <div class="text">
      A longer text which should wrap to multiple lines.
    </div>
  </li>
<li>
...`

css是

ul {
  list-style:none;
  white-space: nowrap;
  margin:0;
  padding:0;
  overflow-x:scroll;
  width:500px;
  height:240px;
}
li {
  margin:0;
  padding:0;
  display:inline-block;
}
.pic {
  height:150px;
}
img {
  height:100%;
  width:auto;
}
.text {
  white-space:normal;
}`

有什么想法吗?

编辑: 预期结果如下:Screenshot from google image search. 在图片下面应该是每张图片包裹到图像宽度的文本。

1 个答案:

答案 0 :(得分:0)

li设为display:table-cell;并添加一些JS代码以获取图像的width并将其设置为文本。

$(document).ready(function(){
    var a=$("img");
    var b=$('.text');
    for(var i=0;i<a.length;i++){
    	$(b[i]).css("width",a[i].width);
    }
});
ul {
  list-style:none;
  white-space: nowrap;
  margin:0;
  padding:0;
  overflow-x:scroll;
  width:500px;
  height:240px;
}
li {
  display:table-cell;
  width:auto;
  padding-right:10px;
}
.pic {
  height:100px;
  width:auto;
}
img {
  height:100%;

}
.text {
  white-space:normal;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<ul>
  <li>
    <div class="pic">
      <img src="https://cdn.pixabay.com/photo/2017/05/14/14/24/grass-2312139__340.jpg">
    </div>
    <div class="text">
A longer text which should wrap to multiple lines.
    </div>
  </li>
  <li>
    <div class="pic">
      <img src="https://cdn.pixabay.com/photo/2017/06/14/23/15/soap-bubble-2403673__340.jpg">
    </div>
    <div class="text">
A longer text which should wrap to multiple lines.
    </div>
  </li>  
  <li>
    <div class="pic">
      <img src="https://cdn.pixabay.com/photo/2017/05/04/19/32/sculpture-2284945__340.jpg">
    </div>
    <div class="text">
A longer text which should wrap to multiple lines.
    </div>
  </li>  
</ul>

没有javascript的另一个选项设置为display:table-cell;的{​​{1}}属性,它将每个单元格的宽度设置为最大宽度图像的宽度。

如果对你有用,试试这个。

li
ul {
  list-style:none;
  white-space: nowrap;
  margin:0;
  padding:0;
  overflow-x:scroll;
  width:500px;
  height:240px;
}
li {
  display:table-cell;
  width:auto;
  padding-right:10px;
}
.pic {
  height:100px;
  width:auto;
}
img {
  height:100%;

}
.text {
  white-space:normal;
}