如何使用 css 将响应式图像拆分为两个 div 块?

Posted

技术标签:

【中文标题】如何使用 css 将响应式图像拆分为两个 div 块?【英文标题】:How to split an image responsive into two div blocks using css? 【发布时间】:2017-06-30 19:55:28 【问题描述】:

我有一张响应式图片:

<img class="img-responsive" src="img/image.jpg"/>

我想把它分成两个 div:

<div class="slice s1"></div>
<div class="slice s2"></div>

或:

<div class="slice s1">
   <div class="slice s2"></div>
</div>

我怎样才能动态地或使用 css 做到这一点?

我尝试设置两个div 中的background-imagebackground-position,但新图像不一样,它不再响应。

【问题讨论】:

你是说你有一个图像,你想在两个 div 之间分割,这样它看起来仍然只是一个图像? @dargue3 是的,没错! 您能否举例说明您为什么需要这样做?为什么要将图像分割成碎片? 以制作动画为例,每个切片的动画都不同。 【参考方案1】:

这是一个很酷且可行的问题。

只要两个图像的大小相等,并且您将外部 &lt;div&gt; 设置为图像的宽度,并且只要您不弄乱动画中的宽度,您对内部所做的任何更改图像将反映在图像的左侧,您对外部图像所做的任何更改都将反映在图像的右侧。

#image 
    position: relative;
	width: 200px;
   	

   	#half-image 
   		position: absolute;
   		top: 0;
   		left: 0;
   		width: 50%;
   		overflow: hidden;
   	
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div id="image">
	<img src='https://placehold.it/200x200' id='outer' class='img-responsive'>
	<div id = "half-image">
		<img src='https://placehold.it/200/e8117f' id = 'inner'>
	</div>
</div>

【讨论】:

这很酷,谢谢,但尺寸是静态的(#image width),我找到了一个完美的解决方案,灵感来自您,请参阅上面的答案。【参考方案2】:

我从@wlh 的回答中找到了一个解决方案:

.img-responsive
  width: 100%;
  max-width: 100%;
  height: auto;

.hidden 
  visibility:hidden;

.sliced-img 
  position: relative;
  width: 100%;

.slice 
  position: absolute;
  top: 0;
  width: 50%;
  height: 100%;
  background-size: cover;


.s1 
  left: 0;
  background-image: url('https://placehold.it/200/0e0e0e'); /* black */
  background-position: 0%;


.s2 
  left: 50%;
  background-image: url('https://placehold.it/200/e8117f'); /* pink */
  background-position: -100%;
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <link href="style.css" rel="stylesheet"/>
  </head>
  <body>
  <div class="sliced-img">
    <img src='https://placehold.it/200x200' class='img-responsive hidden'> <!-- This hidden image (image we want to slice) is under the two divs, it's just used to get the image height and/or the image src dynamically -->
    <div class="slice s1"></div>
    <div class="slice s2"> </div>
  </div> 
 </body>
</html>

注意

css background-image 属性将使用jQuery .css() 函数动态设置(不要忘记从.s1css 中的.s2 中删除background-image文件):

$( document ).ready(function() 
  var imageSrc = $('.sliced-img').children( 'img' ).attr( 'src' );
  $('.sliced-img').css("background-image","url('"+imageSrc+"')");
);

【讨论】:

【参考方案3】:

要使背景图像按div 的大小缩放,您需要设置background-size 属性。

.slice 
    background-size: cover;

您可以使用任何 CSS 大小单位(50px3em50% 等)以及 autocovercontain。您需要使用各种设置来查看是否可以使它们匹配。 cover 将确保背景图像填满整个容器并裁剪任何溢出。 contain 将确保背景图像始终适合容器并且将信箱。

最后,如果您需要 div 以特定的宽高比进行缩放,您可以使用“百分比填充”技巧。

.keep-ratio 
  background: cornflowerblue;
  width: 100%;


.keep-ratio::before 
  content: '';
  display: block;
  padding-top: 50%; /* 0.5 ratio, half the width */
&lt;div class="keep-ratio"&gt;&lt;/div&gt;

这通过让伪元素::before 将一个块注入到具有padding-top50% 的div 中来工作。垂直百分比填充始终是宽度的百分比,因此因为该伪元素是 100% 宽,50% 会将垂直填充设置为宽度的一半。因此,随着宽度的增加和缩小,该伪元素上的垂直填充也会增加。

【讨论】:

请用您的 CSS 为这些元素更新您的原始问题。 img-responsive 是响应式图像的 Bootstrap 类。 slice,s1 和 s2 是我要找的。​​span>

以上是关于如何使用 css 将响应式图像拆分为两个 div 块?的主要内容,如果未能解决你的问题,请参考以下文章

使用 CSS 使两个背景图像与 div 一起响应

如何在响应式页面上的 div 内垂直和水平居中两个图像

在响应式方形 div 中垂直居中图像

如何将响应式文本 div 放在另一个响应式 div 旁边

响应式 CSS / 内联 div

在响应式网格中加载图像时如何使用图像占位符?