JavaScript Expand image horizontally on hover in CSS

I want to build a home page for a website project I'm doing with some friend where the whole page will basically be three images one next to the other like so:

|1|2|3| --hover--> |1    ||| or --hover--> ||2     || or --hover--> |||3    |

each "square" with a number representing an image. The squeezed "squares" are like very small openings for switching to another image by hovering on them.

Now my idea was to have each image expand over the remaining two when the user hovers over it.

I've found this (http://jsfiddle.net/harmeister/a4n6e/18/) which is kind of what I'm looking for, but I'm not good enough to adapt it to my needs. Ideally, some text would appear on the expanded image, but I think I know how to do that.

I am not sure if this is possible in pure CSS, but that's what I'd prefer.

Answer:1

EDIT I believe you are looking for this.

/*Now the styles*/
* {
	margin: 0; 
	padding: 0;
}
body {
	background: #ccc; 
	font-family: arial, verdana, tahoma;
}

/*Time to apply widths for accordian to work
Width of image = 640px
total images = 5
so width of hovered image = 640px
width of un-hovered image = 40px - you can set this to anything
so total container width = 640 + 40*4 = 800px;
default width = 800/5 = 160px;
*/

.accordian {
	width: 805px; height: 320px;
	overflow: hidden;
	
	/*Time for some styling*/
	margin: 100px auto;
	box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.35);
	-webkit-box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.35);
	-moz-box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.35);
}

/*A small hack to prevent flickering on some browsers*/
.accordian ul {
	width: 2000px;
	/*This will give ample space to the last item to move
	instead of falling down/flickering during hovers.*/
}

.accordian li {
	position: relative;
	display: block;
	width: 160px;
	float: left;
	
	border-left: 1px solid #888;
	
	box-shadow: 0 0 25px 10px rgba(0, 0, 0, 0.5);
	-webkit-box-shadow: 0 0 25px 10px rgba(0, 0, 0, 0.5);
	-moz-box-shadow: 0 0 25px 10px rgba(0, 0, 0, 0.5);
	
	/*Transitions to give animation effect*/
	transition: all 0.5s;
	-webkit-transition: all 0.5s;
	-moz-transition: all 0.5s;
	/*If you hover on the images now you should be able to 
	see the basic accordian*/
}

/*Reduce with of un-hovered elements*/
.accordian ul:hover li {width: 40px;}
/*Lets apply hover effects now*/
/*The LI hover style should override the UL hover style*/
.accordian ul li:hover {width: 640px;}


.accordian li img {
	display: block;
}

/*Image title styles*/
.image_title {
	background: rgba(0, 0, 0, 0.5);
	position: absolute;
	left: 0; bottom: 0;	
width: 640px;	

}
.image_title a {
	display: block;
	color: #fff;
	text-decoration: none;
	padding: 20px;
	font-size: 16px;
}
<div class="accordian">
	<ul>
		<li>
			<div class="image_title">
				<a target='_blank' href="#">KungFu Panda</a>
			</div>
			<a target='_blank' href="#">
				<img src="http://thecodeplayer.com/uploads/media/3yiC6Yq.jpg"/>
			</a>
		</li>
		<li>
			<div class="image_title">
				<a target='_blank' href="#">Toy Story 2</a>
			</div>
			<a target='_blank' href="#">
				<img src="http://thecodeplayer.com/uploads/media/40Ly3VB.jpg"/>
			</a>
		</li>
		<li>
			<div class="image_title">
				<a target='_blank' href="#">Wall-E</a>
			</div>
			<a target='_blank' href="#">
				<img src="http://thecodeplayer.com/uploads/media/00kih8g.jpg"/>
			</a>
		</li>
		<li>
			<div class="image_title">
				<a target='_blank' href="#">Up</a>
			</div>
			<a target='_blank' href="#">
				<img src="http://thecodeplayer.com/uploads/media/2rT2vdx.jpg"/>
			</a>
		</li>
		<li>
			<div class="image_title">
				<a target='_blank' href="#">Cars 2</a>
			</div>
			<a target='_blank' href="#">
				<img src="http://thecodeplayer.com/uploads/media/8k3N3EL.jpg"/>
			</a>
		</li>
	</ul>
</div>
Answer:2

1. Here's a basic one with pure css where the images overlay each other and use z-index to show full width on hover. It's responsive.

fiddle

https://jsfiddle.net/Hastig/tybscnhm/4/

.images {
  display: flex;
  background-color: red;
  overflow: hidden;
    transition: all 1.2s ease;
}
.image-container {
  position: relative;
  display: flex;
}
.image-container:not(:nth-child(1)) {
  position: relative;
  margin-left: -10%;
}
.image-container img {
  max-width: 100%;
}
.image-container:hover {
  z-index: 1000;
}
<div class="images">
  <div class="image-container">
    <img src="http://i.imgur.com/mOSCZCo.jpg">
  </div>
  <div class="image-container">
    <img src="http://i.imgur.com/zFYHM67.jpg">
  </div>
  <div class="image-container">
    <img src="http://i.imgur.com/VMh4FNX.jpg">
  </div>
  <div class="image-container">
    <img src="http://i.imgur.com/XNVJztM.jpg">
  </div>
  <div class="image-container">
    <img src="http://i.imgur.com/quwEgMO.jpg">
  </div>
</div>
Answer:3

I'm reading up on my Javascript and came across two very different Prototype pattern examples through my readings. Here is the example from Professional JavaScript for Web Developers, 3rd Edition: ...

I'm reading up on my Javascript and came across two very different Prototype pattern examples through my readings. Here is the example from Professional JavaScript for Web Developers, 3rd Edition: ...

I want to write an unit test for a JavaScript function and measure how often a function triggered a reflow in the browser. Given the following example: // Bad example function foo(elements) { for ...

I want to write an unit test for a JavaScript function and measure how often a function triggered a reflow in the browser. Given the following example: // Bad example function foo(elements) { for ...

var selectorText = "body" ; // first variant // var selectorText = "div#id, div.body"; // multiple selector variant // var selectorText = "div#id ul li, div.body"; // multiple selector variant var C1 =...

var selectorText = "body" ; // first variant // var selectorText = "div#id, div.body"; // multiple selector variant // var selectorText = "div#id ul li, div.body"; // multiple selector variant var C1 =...

When _.debounce is called multiple times, it only apply with the last call's argument. var f = _.debounce(function(a) { console.log(a); }) f(12) f(1223) f(5) f(42) //output -----> 42 Is ...

When _.debounce is called multiple times, it only apply with the last call's argument. var f = _.debounce(function(a) { console.log(a); }) f(12) f(1223) f(5) f(42) //output -----> 42 Is ...

  1. lodash debounce last
  2. lodash debounce cancel previous
  3. lodash debounce
  4. lodash.debounce'