Flipcard on mobile - First tap doesn't work - css
Working in Next.js. Currently trying to debug the mobile version of a site I'm working on. Just have a tiny hitch, the first flip-card tapped in mobile refuses to flip. If I tap multiple times on this "stubborn" card, it selects the text on the opposite side of the card. If I tap a different card, it flips properly. It doesn't matter which card I tap first, the result is that the initially tapped card doesn't flip (until I tap other cards and try again). This is a very confusing issue and I would appreciate even a direction to start looking in. Site currently running on d20dev.com
class SoloContent1 extends React.Component {
constructor(props) {
super(props);
this.state={
className1: "flipCard",
className2: "flipCard",
className3: "flipCard",
fadeOneA: "unFade",
fadeOneB: "fade",
fadeTwoA: "unFade",
fadeTwoB: "fade",
fadeThreeA: "unFade",
fadeThreeB: "fade",
}
this.flip1 = this.flip1.bind(this);
this.unflip1 = this.unflip1.bind(this);
this.flip2 = this.flip2.bind(this);
this.unflip2 = this.unflip2.bind(this);
this.flip3 = this.flip3.bind(this);
this.unflip3 = this.unflip3.bind(this);
}
flip1() {
this.setState({ className1 : "flipCard is-flipped", fadeOneA : "fade", fadeOneB : "unFade" })
}
unflip1() {
this.setState({ className1 : "flipCard", fadeOneA : "unFade", fadeOneB : "fade" })
}
flip2() {
this.setState({ className2 : "flipCard is-flipped", fadeTwoA : "fade", fadeTwoB : "unFade" })
}
unflip2() {
this.setState({ className2 : "flipCard", fadeTwoA : "unFade", fadeTwoB : "fade" })
}
flip3() {
this.setState({ className3 : "flipCard is-flipped", fadeThreeA : "fade", fadeThreeB : "unFade" })
}
unflip3() {
this.setState({ className3 : "flipCard", fadeThreeA : "unFade", fadeThreeB : "fade" })
}
render() {
return (
<div id="contentContainer">
<div className="contentCanvas contentCanvas--card">
<div className="contentCanvas contentCanvas--card">
<div className="flipCardContainer" id="flipContainer1" onMouseEnter={this.flip1} onMouseLeave={this.unflip1}>
<div className={this.state.className1} id="card1">
<div className="card__face card__face--front" id={this.state.fadeOneA}
style={{
backgroundImage: "url(" + `${require("../public/assets/JPG.jpg")}` + ")",
width: "100%",
height:"100%",
backgroundRepeat: "no-repeat",
backgroundSize: "cover",
backgroundPosition: "center",
}}
>
</div>
<div className="card__face card__face--back" id={this.state.fadeOneB}>
<div style={{
backgroundImage: "url(" + `${require("../public/assets/JPG.jpg")}` + ")",
width: "100%",
height:"100%",
backgroundRepeat: "no-repeat",
backgroundPosition: "center",
backgroundSize: "cover",
filter: "blur(20px)",
}}>
</div>
<p className="cardText" id="cardText1">TEXT</p>
</div>
</div>
</div>
</div>
</div>
.cardText {
position: absolute;
height: 100%;
width: 80%;
transform: translateY(-105%);
}
#cardText1 {
text-align: right;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 75%;
color: white;
font-size: calc(12px + 1.3vw);
text-shadow: 2px 2px 2px black;
}
#cardText2 {
text-align: center;
width: 90%;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
color: white;
font-size: calc(12px + 1.3vw);
text-shadow: 2px 2px 2px black;
}
#cardText3 {
text-align: left;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 75%;
color: white;
font-size: calc(12px + 1.1vw);
text-shadow: 2px 2px 2px black;
}
#contentContainer {
position: absolute;
height: 100%;
width: 100%;
background-image: url('image');
background-color: rgb(192,192,192);
border-radius: 8px;
transform: translateX(-225%);
overflow: hidden;
border: 5px solid silver;
box-sizing: border-box;
}
.contentCanvas {
z-index: 1;
height: 100%;
width: 100%;
margin: auto;
margin-top: 0%;
}
.flipCard {
margin: auto;
list-style: none;
font-size: 1.6em;
width: 100%;
height: 100%;
padding: 0;
display: inline-block;
transition: transform 0.5s;
transform-style: preserve-3d;
position: relative;
cursor: pointer;
}
.card__face {
position: absolute;
height: 100%;
width: 100%;
text-align: center;
}
.card__face--front {
background: white;
overflow: hidden;
}
.card__face--back {
background: black;
transform: rotateY( 180deg );
overflow: hidden;
}
.flipCard.is-flipped {
transform: rotateY( 180deg );
}
#card1 {
}
.flipCardContainer {
perspective: 40rem;
z-index: 1;
height: 100%;
width: 33.333333333333333333333333%;
margin: auto;
display: inline-block;
}
To me the problem comes from the event listener. Instead of having
mouseenter/leave, when being on mobile you should have a function
onClick. Then you would need to either change your current code or add
an extra toggleFlip() function to make it work nicely. – Aurélien B.
All credit for the answer goes to Aurélien B. in the comment above.
Related
Parts of the background are forming a border around the red border
How come there are thin lines going around the whole border, and can they be removed? It looks like parts of the background are forming a border around the red border. Can that be fixed? That is the whole issue https://jsfiddle.net/59t3k1gn/ One is an image of it zoomed in on the border, and the other is not zoomed in. How come the background is forming a border around the red border, and how is that fixed? (function manageCurtain() { "use strict"; function hide(el) { el.classList.add("hide"); } function coverClickHandler(evt) { const cover = evt.currentTarget; hide(cover); const curtain = document.querySelector(".outer"); curtain.classList.add("slide"); //curtain.classList.add("fadeout"); const wrap = document.querySelector(".wrap"); wrap.classList.remove("hide"); } const cover = document.querySelector(".play"); cover.addEventListener("click", coverClickHandler); }()); const videoPlayer = (function makeVideoPlayer() { "use strict"; let player = null; const tag = document.createElement("script"); tag.src = "https://www.youtube.com/iframe_api"; const firstScriptTag = document.getElementsByTagName("script")[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); function onPlayerReady(event) { player = event.target; player.setVolume(100); // percent } let hasShuffled = false; function onPlayerStateChange(event) { player = event.target; const shufflePlaylist = true; if (!hasShuffled) { player.setShuffle(shufflePlaylist); player.playVideoAt(0); hasShuffled = true; } } function addPlayer(video) { const playlist = "M7lc1UVf-VE"; const config = { height: 360, host: "https://www.youtube-nocookie.com", width: 640 }; config.playerVars = { autoplay: 0, cc_load_policy: 0, controls: 1, disablekb: 1, fs: 0, iv_load_policy: 3, loop: 1, playlist, rel: 0 }; config.events = { "onReady": onPlayerReady, "onStateChange": onPlayerStateChange }; player = new YT.Player(video, config); } return { addPlayer }; }()); function onYouTubeIframeAPIReady() { const cover = document.querySelector(".play"); const wrapper = cover.parentElement; const frameContainer = wrapper.querySelector(".video"); videoPlayer.addPlayer(frameContainer); } (function iife() { "use strict"; function show(el) { el.classList.remove("hide"); } function coverClickHandler(evt) { const wrapper = evt.currentTarget.parentElement; show(wrapper); } const cover = document.querySelector(".play"); cover.addEventListener("click", coverClickHandler); }()); html, body { height: 100%; padding: 0; margin: 0; } body { background: url(https://picsum.photos/id/1015/1500/1500) no-repeat; background-attachment: fixed; background-size: cover; } .fadeout .split-wrap { opacity: 0; transition: opacity 1s ease 3s, width 0s 10s, height 0s 10s; } .outer { position: relative; display: table; height: 100%; margin: 0 auto; width: 100%; overflow: hidden; } .tcell { display: table-cell; vertical-align: middle; padding: 8px 8px; } .curtain { max-width: 640px; margin: auto; border: 3px solid red; box-sizing: border-box; border-radius: 25px; overflow: hidden; background: transparent; } .curtain-ratio-keeper { position: relative; width: 100%; height: 0; padding-top: 56.25%; overflow: hidden; background: transparent; } .slide-wrap:before, .slide-wrap:after { content: ""; position: absolute; top: 0; width: 50%; height: 100%; transition: transform 5s linear; background: url(https://picsum.photos/id/1015/1500/1500) no-repeat; background-attachment: fixed; background-size: cover; } .slide-wrap:before { left: 0; } .slide-wrap:after { right: 0; } .slide .slide-wrap::before { transform: translateX(-100%); } .slide .slide-wrap::after { transform: translateX(100%); } .video-frame { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: transparent; } .play { position: absolute; top: 0; left: 0; bottom: 0; right: 0; margin: auto; width: 98px; height: 98px; border-radius: 50%; fill: red; filter: drop-shadow(3px 3px 3px rgba(0, 0, 0, 0.7)); cursor: pointer; } .hide { display: none; } <div class="outer"> <div class="tcell"> <div class="curtain"> <div class="curtain-ratio-keeper"> <div class="wrap hide"> <div class="video video-frame"></div> </div> <div class="slide-wrap"></div> </div> <svg class="play " width="100%" height="100%" viewBox="0 0 64 64"> <path d="M25.6,46.4L44.8,32L25.6,17.6V46.4z M32,0C14.3,0,0,14.3,0,32s14.3,32,32,32s32-14.3,32-32S49.7,0,32,0z M32,57.6C17.9,57.6,6.4,46.1,6.4,32S17.9,6.4,32,6.4S57.6,17.9,57.6,32S46.1,57.6,32,57.6z" /> </svg> </div> </div> </div>
Seems fine to me, what exactly is the issue? This effect you described might be either yous screen blurring pixels in certain zoom levels, or a visual illusion called Mach bands
How to fix CSS backdrop-filter blur disappearing when using transition-transform or duration? [Chrome only]
Edit: This bug has been fixed by Chromium some time ago Simple Codepen: https://codepen.io/themanfromearth1/pen/WNRoyyW With Slick Slider: https://codepen.io/maxbeat/pen/abNBrex The error happens when you combine backdrop-filter blur with either transition-duration or transform in the parent. Parent Div: .slider { transition-duration: 300ms; /** One of those two is enough **/ transition: transform 0.3s; /** But with either the bug occurs **/ transform: translate3d(-100px, 0, 0); } Child Div: .slider__item { background: rgba(206, 206, 206, 0.15); backdrop-filter: blur(89px); } When you click the button, the CSS blur disappears for a second and then the slide is blurred again. Chrome: Problem Firefox: Works (you have to enable backdrop-filter first in about:config) Webkit/Safari: Working Edit: There is a confirmed bug-report on Chromium for this problem https://bugs.chromium.org/p/chromium/issues/detail?id=1194050
Without using translate you can use positioning with left. let translated = false function translate3d() { const div2 = document.getElementById("slider") if (!translated) { div2.style.left = '100px'; } else { div2.style.left = '400px'; } translated = !translated; } .slider { display: flex; align-items: center; justify-content: center; position: relative; left: 400px; /** Remove duration and blur works **/ transition-duration: 300ms; /** Also disappears if you transform like this **/ /** transition: transform 0.3s **/ } .slider__item { height: 100px; width: 100px; background: rgba(206, 206, 206, 0.15); backdrop-filter: blur(89px)!important; margin: 6px; margin-top: 200px; } .container { height: 1900px; width: 899px; background-image:url(https://images.unsplash.com/photo-1616604745302-60a195c7061a?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1401&q=80); } .button { position:absolute; top: 350px; left: 400px; } <div class="container"> <div class="slider" id="slider"> <div class="slider__item">1</div> <div class="slider__item">2</div> <div class="slider__item">3</div> <div class="slider__item">4</div> <div class="slider__item">5</div> </div> </div> <div class="button"> <button type="button" onclick="translate3d()">Click to transform translate3d</button> </div> <div>
It's a bug ! I've encountered it myself while I was building my own portfolio. The way I've solved it was by using an API for smooth scrolling that I wrote which is available here: https://github.com/CristianDavideConte/universalSmoothScroll Basically the solution is: don't use translate and backdrop-filter:blur together, just make the parent container scrollable and smoothly scroll it whenever you need it. I've rewrote your slider example so that it correctly works with the API: const maxSlide = 5; const minSlide = 1; const visibleSlides = 3; let numSlide = 0; function init() { let leftArrow = document.getElementById('left-arrow'); let rightArrow = document.getElementById('right-arrow'); let slider = document.getElementsByClassName('slider')[0]; let slides = slider.children; leftArrow.onclick = (e) => { e.preventDefault(); if(numSlide > minSlide - 1) { numSlide--; uss.scrollIntoView(slides[numSlide], true, null, null, true); } } rightArrow.onclick = (e) => { e.preventDefault(); if(numSlide < maxSlide - visibleSlides) { numSlide++; uss.scrollIntoView(slides[numSlide], true, null, null, true); } } /* We apply an ease function to make it look pretty */ let whateverEaseFunctionYouLike = remaning => {return remaning / 15 + 1;}; uss.setXStepLengthCalculator(whateverEaseFunctionYouLike, slider); } * { padding: 0; margin: 0; } body { height: 100vh; overflow: hidden; background: url(https://img.wallpapersafari.com/desktop/1366/768/66/57/D2uNEj.jpg) no-repeat; /* Moved from container */ background-size: cover; /* Moved from container */ } .container { width: 100vw; /* Added */ display: flex; /*Added */ height: 200px; /* Moved from slider__item */ /*height: 100%; Removed */ /*padding: 60px; Removed */ } .slider { width: 80%; /* Changed */ height: 100%; /* Added */ position: relative; display:flex; /* Added */ overflow: hidden; /* Added */ /*margin-bottom: 60px; Removed*/ } .slick-list { overflow: hidden; } .slick-track { display: flex; } .slider__item { width: calc(74vw / 3); /* Added */ height: 80%; /* Added */ flex-shrink: 0; /* Added */ margin: auto 1vw; /* Changed */ display: flex; align-items: center; justify-content: center; font: 24px arial; background: rgba(255,255,255,0.5); backdrop-filter: blur(10px); } .slick-dots { display: flex; justify-content: center; position: absolute; width: 100%; } .slick-dots li { background: #fff; width: 10px; height: 10px; margin: 5px; border-radius: 50%; cursor: pointer; list-style:none } .slick-dots li.slick-active { background: #000; } .slick-dots li button { font-size: 0; border: none; opacity: 0; } .slick-arrow { font-size: 0; width: 30px; height: 30px; background: none; border: none; border-top: 4px solid #fff; border-left: 4px solid #fff; /*transform: rotate(-45deg); Moved */ /*position: absolute; Removed */ margin: auto; /* Added */ top: 100px; cursor: pointer; } .slick-next { transform: rotate(135deg); right: -30px; } .slick-prev { left: -30px; } #left-arrow { transform: rotate(-45deg); /* Moved from slick-arrow*/ } #right-arrow { transform: rotate(135deg); /* Moved from slick-arrow and then changed */ } <script src = "https://cdn.jsdelivr.net/npm/universalsmoothscroll#latest/universalsmoothscroll-min.js"></script> <!-- Added --> <body onload="init()"> <!-- Added init --> <div class="container"> <button id= "left-arrow" class ="slick-arrow"><</button> <!-- Added --> <div class="slider"> <div class="slider__item">1</div> <div class="slider__item">2</div> <div class="slider__item">3</div> <div class="slider__item">4</div> <div class="slider__item">5</div> </div> <button id= "right-arrow" class ="slick-arrow">></button> <!-- Added --> </div> </body> The advantage of this aproach is that you can customize the scrolling related part of your slider just as much as you did with "slick-slider". If you need one more example of a carousel built with this API you can take a look at here: https://cristiandavideconte.github.io/myPersonalWebPage/#home
::-webkit-scrollbar is it possible to make the scrollbar-thumb grow instead moving?
I would like my scroll to work like this when the user scrolls. e.g to start to fill up instead of moving. Is it possible to make the scroll-thumb grow or to style the scrollbar-track-piece different before and after the thumb?
Here is a small example how to implement this loader window.addEventListener("scroll", (e) => { var html = document.documentElement; let step = 100 / (html.scrollHeight - window.innerHeight); let loader = document.getElementById("scrollprogress"); loader.style.width = (step * html.scrollTop) + "%"; }) #scrollprogress { height: 5px; position: fixed; left: 0; top: 0; background: orange; } .backgr { position: fixed; left: 0; top: 0; width: 100vw; height: 5px; background: lightgrey; z-index: -1; } .box { height: 3000px; } <div id="scrollprogress"></div> <div class="backgr"></div> <div class="box"></div>
You can approximate this using negative box shadow: body::-webkit-scrollbar { width: 1em; } body::-webkit-scrollbar-thumb { background-color: orange; box-shadow:-1000vmax -1000vmax 0px 1000vmax orange; } body { width:300vw; height:300vh; background:linear-gradient(60deg,red,blue,orange); margin:0; } html { background:#fff; }
React Carousel - images with different widths display wrong
I have an array of URLs that I am passing in as a prop to a slide component. Only one URL is passed at a time using a stateful index. Whenever the right button is clicked, the index is incremented by 1 and vice versa for the left. This is working to display the next URL in the array; however, the images seem to repeat even though I set no-repeat on the background. This is due to the images being different widths and some being smaller than the last. I've tried setting the parent container to a set width so that the slide class is 100% the width of the parent but this doesn't seem to be working for me. Below are the two components that I'm using and the styles file. //Parent carousel component const HeroImage = ({state}) => { const [index, setIndex] = useState(0); var imgUrls = []; const goToPrevSlide = () => { setIndex(index - 1); } const goToNextSlide = () => { setIndex(index + 1); } return( <React.Fragment> <StyledHeroImage> <div className="slider-wrapper"> {state.heroImage.map(image => { imgUrls.push(`${IMAGE_BASE_URL}${BACKDROP_SIZE}${image.backdrop_path}`); })} <Slide title={state.heroImage.original_title} text={state.heroImage.overview} image={imgUrls[index]}/> </div> <LeftArrow goToPrevSlide={goToPrevSlide}/> <RightArrow goToNextSlide={goToNextSlide}/> </StyledHeroImage> </React.Fragment> ) } //child Slide Component const Slide = ({image, text, title}) => { const styles = { background: `linear-gradient(to bottom, rgba(0,0,0,0) 39%, rgba(0,0,0,0) 41%, rgba(0,0,0,0.65) 100%), url(${image})`, backgroundSize: 'cover', backgroundRepeat: 'no-repeat', backgroundPosition: 'center', } return( <div className="slide" style={styles}> <div className="heroimage-content"> <div className="heroimage-text"> <h1>{title}</h1> <p>{text}</p> </div> </div> </div> ) } //Styles file export const StyledHeroImage = styled.div` height: 650px; width: 100%; margin: 0 auto; .slider-wrapper{ height: 100%; width: 100%; } .slide{ width: 100%; height: 100%; } .arrow{ height: 50px; width: 50px; display: flex; align-items: center; justify-content: center; background: #f9f9f9; border-radius: 50%; cursor: pointer; transition: transform ease-in .1s; } .nextArrow { position: absolute; top: 50%; right: 25px; z-index: 999; color: #fff; } .backArrow { position: absolute; top: 50%; left: 25px; z-index: 999; color: #fff; } .fa-arrow-right:before, .fa-arrow-left:before { color: #222 } `;
Vertical-align: middle
I want to place the img element in the middle of div.partners-slider. This is a responsive slider i can't set fixed height. Any suggestions ? jsfiddle HTML <div class="ps-wrap"><div class="partners-slider"> <div class="pslide"><img src="http://server-pps.com/img/gwiazda_sponsor.png" /></div> <div class="pslide"><img src="http://www.sundance.org/images/support-us/HPActivitiesLogo50x50.png" /></div> <div class="pslide"><img src="http://t2.gstatic.com/images?q=tbn:ANd9GcQvsT_kxUqdhOoo7zSTkbQ76PLgx4ZRucUZcbf2KsrY0bFbu30agw" /></div> <div class="pslide"><img src="http://i.cdn.turner.com/dr/nba/teamsites-nbateams/release/nets/sites/nets/files/content/images-gallery/2013/07/twitterimage-updated.jpg?1374006700" /></div> </div></div> JS $(document).ready(function() { $('.partners-slider').bxSlider({ slideWidth: 924, auto: 0, autoStart: 0, moveSlides: 1, minSlides: 3, maxSlides: 8, pager: false, slideMargin: 5 }); }); (function(e){var t={},n={mode:"horizontal",slideSelector:"",infiniteLoop:!0,hideControlOnEnd:!1,speed:500,easing:null,slideMargin:0,startSlide:0,randomStart:!1,captions:!1,ticker:!1,tickerHover:!1,adaptiveHeight:!1,adaptiveHeightSpeed:500,video:!1,useCSS:!0,preloadImages:"visible",touchEnabled:!0,swipeThreshold:50,oneToOneTouch:!0,preventDefaultSwipeX:!0,preventDefaultSwipeY:!1,pager:!0,pagerType:"full",pagerShortSeparator:" / ",pagerSelector:null,buildPager:null,pagerCustom:null,controls:!0,nextText:"Next",prevText:"Prev",nextSelector:null,prevSelector:null,autoControls:!1,startText:"Start",stopText:"Stop",autoControlsCombine:!1,autoControlsSelector:null,auto:!1,pause:4e3,autoStart:!1,autoDirection:"prev",autoHover:!1,autoDelay:0,minSlides:1,maxSlides:1,moveSlides:0,slideWidth:0,onSliderLoad:function(){},onSlideBefore:function(){},onSlideAfter:function(){},onSlideNext:function(){},onSlidePrev:function(){}};e.fn.bxSlider=function(s){if(0!=this.length){if(this.length>1)return this.each(function(){e(this).bxSlider(s)}),this;var o={},r=this;t.el=this;var a=e(window).width(),l=e(window).height(),d=function(){o.settings=e.extend({},n,s),o.settings.slideWidth=parseInt(o.settings.slideWidth),o.children=r.children(o.settings.slideSelector),o.children.length<o.settings.minSlides&&(o.settings.minSlides=o.children.length),o.children.length<o.settings.maxSlides&&(o.settings.maxSlides=o.children.length),o.settings.randomStart&&(o.settings.startSlide=Math.floor(Math.random()*o.children.length)),o.active={index:o.settings.startSlide},o.carousel=o.settings.minSlides>1||o.settings.maxSlides>1,o.carousel&&(o.settings.preloadImages="all"),o.minThreshold=o.settings.minSlides*o.settings.slideWidth+(o.settings.minSlides-1)*o.settings.slideMargin,o.maxThreshold=o.settings.maxSlides*o.settings.slideWidth+(o.settings.maxSlides-1)*o.settings.slideMargin,o.working=!1,o.controls={},o.interval=null,o.animProp="vertical"==o.settings.mode?"top":"left",o.usingCSS=o.settings.useCSS&&"fade"!=o.settings.mode&&function(){var e=document.createElement("div"),t=["WebkitPerspective","MozPerspective","OPerspective","msPerspective"];for(var i in t)if(void 0!==e.style[t[i]])return o.cssPrefix=t[i].replace("Perspective","").toLowerCase(),o.animProp="-"+o.cssPrefix+"-transform",!0;return!1}(),"vertical"==o.settings.mode&&(o.settings.maxSlides=o.settings.minSlides),c()},c=function(){if(r.wrap('<div class="bx-wrapper"><div class="bx-viewport"></div></div>'),o.viewport=r.parent(),o.loader=e('<div class="bx-loading" />'),o.viewport.prepend(o.loader),r.css({width:"horizontal"==o.settings.mode?215*o.children.length+"%":"auto",position:"relative"}),o.usingCSS&&o.settings.easing?r.css("-"+o.cssPrefix+"-transition-timing-function",o.settings.easing):o.settings.easing||(o.settings.easing="swing"),v(),o.viewport.css({"max-width":"100%",overflow:"hidden",position:"relative"}),o.viewport.parent().css({maxWidth:u()}),o.children.css({"float":"horizontal"==o.settings.mode?"left":"none",listStyle:"none",position:"relative"}),o.children.width(p()),"horizontal"==o.settings.mode&&o.settings.slideMargin>0&&o.children.css("marginRight",o.settings.slideMargin),"vertical"==o.settings.mode&&o.settings.slideMargin>0&&o.children.css("marginBottom",o.settings.slideMargin),"fade"==o.settings.mode&&(o.children.css({position:"absolute",zIndex:0,display:"none"}),o.children.eq(o.settings.startSlide).css({zIndex:50,display:"block"})),o.controls.el=e('<div class="bx-controls" />'),o.settings.captions&&E(),o.settings.infiniteLoop&&"fade"!=o.settings.mode&&!o.settings.ticker){var t="vertical"==o.settings.mode?o.settings.minSlides:o.settings.maxSlides,i=o.children.slice(0,t).clone().addClass("bx-clone"),n=o.children.slice(-t).clone().addClass("bx-clone");r.append(i).prepend(n)}o.active.last=o.settings.startSlide==f()-1,o.settings.video&&r.fitVids();var s=o.children.eq(o.settings.startSlide);"all"==o.settings.preloadImages&&(s=r.children()),o.settings.ticker?o.settings.pager=!1:(o.settings.pager&&w(),o.settings.controls&&T(),o.settings.auto&&o.settings.autoControls&&C(),(o.settings.controls||o.settings.autoControls||o.settings.pager)&&o.viewport.after(o.controls.el)),s.imagesLoaded(g)},g=function(){o.loader.remove(),m(),"vertical"==o.settings.mode&&(o.settings.adaptiveHeight=!0),o.viewport.height(h());var redraw=setInterval(function(){r.redrawSlider()},25);setTimeout(function(){clearInterval(redraw)},250);$("#hide-menu-bg").mouseenter(function(){r.stopAuto(true)}).mouseleave(function(){if (o.settings.auto && o.settings.autoStart) L()}),sliderHover();$("#hide-menu-bg").click(function(e){e.preventDefault();var startTime=new Date().getTime();var interval=setInterval(function(){if(new Date().getTime()-startTime>1400){clearInterval(interval);sliderHover();return;}$('.slider-wrap').unbind('mouseenter mouseleave');r.redrawSlider()},50);});function sliderHover(){$(".slider-wrap").mouseenter(function(){$(this).find(".slide-desc").css({left:'0'});$(this).find(".bx-wrapper").css({'padding-left':'100px'});$(this).find(".slide-desc p, .slide-desc span, .slide-desc h2").css({'left':'0'});}).mouseleave(function(){$(this).find(".slide-desc").css({left:'-200px'});$(this).find(".bx-wrapper").css({'padding-left':'0'});$(this).find(".slide-desc p, .slide-desc span, .slide-desc h2").css({'left':'500px'});})};$(window).resize(function(){r.stopAuto(true);setTimeout(function(){r.redrawSlider();if (o.settings.auto && o.settings.autoStart) {L()}},50);if(this.resizeTO)clearTimeout(this.resizeTO);this.resizeTO=setTimeout(function(){L()},500)}),o.settings.onSliderLoad(o.active.index),o.initialized=!0,o.settings.auto&&o.settings.autoStart&&L(),o.settings.ticker&&W(),o.settings.pager&&M(o.settings.startSlide),o.settings.controls&&D(),o.settings.touchEnabled&&!o.settings.ticker&&O()},h=function(){var t=0,n=e();if("vertical"==o.settings.mode||o.settings.adaptiveHeight)if(o.carousel){var s=1==o.settings.moveSlides?o.active.index:o.active.index*x();for(n=o.children.eq(s),i=1;o.settings.maxSlides-1>=i;i++)n=s+i>=o.children.length?n.add(o.children.eq(i-1)):n.add(o.children.eq(s+i))}else n=o.children.eq(o.active.index);else n=o.children;return"vertical"==o.settings.mode?(n.each(function(){t+=e(this).outerHeight()}),o.settings.slideMargin>0&&(t+=o.settings.slideMargin*(o.settings.minSlides-1))):t=Math.max.apply(Math,n.map(function(){return e(this).outerHeight(!1)}).get()),t},u=function(){var e="100%";return o.settings.slideWidth>0&&(e="horizontal"==o.settings.mode?o.settings.maxSlides*o.settings.slideWidth+(o.settings.maxSlides-1)*o.settings.slideMargin:o.settings.slideWidth),e},p=function(){var e=o.settings.slideWidth,t=o.viewport.width();return 0==o.settings.slideWidth||o.settings.slideWidth>t&&!o.carousel||"vertical"==o.settings.mode?e=t:o.settings.maxSlides>1&&"horizontal"==o.settings.mode&&(t>o.maxThreshold||o.minThreshold>t&&(e=(t-o.settings.slideMargin*(o.settings.minSlides-1))/o.settings.minSlides)),e},v=function(){var e=1;if("horizontal"==o.settings.mode&&o.settings.slideWidth>0)if(o.viewport.width()<o.minThreshold)e=o.settings.minSlides;else if(o.viewport.width()>o.maxThreshold)e=o.settings.maxSlides;else{var t=o.children.first().width();e=Math.floor(o.viewport.width()/t)}else"vertical"==o.settings.mode&&(e=o.settings.minSlides);return e},f=function(){var e=0;if(o.settings.moveSlides>0)if(o.settings.infiniteLoop)e=o.children.length/x();else for(var t=0,i=0;o.children.length>t;)++e,t=i+v(),i+=o.settings.moveSlides<=v()?o.settings.moveSlides:v();else e=Math.ceil(o.children.length/v());return e},x=function(){return o.settings.moveSlides>0&&o.settings.moveSlides<=v()?o.settings.moveSlides:v()},m=function(){if(o.children.length>o.settings.maxSlides&&o.active.last&&!o.settings.infiniteLoop){if("horizontal"==o.settings.mode){var e=o.children.last(),t=e.position();S(-(t.left-(o.viewport.width()-e.width())),"reset",0)}else if("vertical"==o.settings.mode){var i=o.children.length-o.settings.minSlides,t=o.children.eq(i).position();S(-t.top,"reset",0)}}else{var t=o.children.eq(o.active.index*x()).position();o.active.index==f()-1&&(o.active.last=!0),void 0!=t&&("horizontal"==o.settings.mode?S(-t.left,"reset",0):"vertical"==o.settings.mode&&S(-t.top,"reset",0))}},S=function(e,t,i,n){if(o.usingCSS){var s="vertical"==o.settings.mode?"translate3d(0, "+e+"px, 0)":"translate3d("+e+"px, 0, 0)";r.css("-"+o.cssPrefix+"-transition-duration",i/1e3+"s"),"slide"==t?(r.css(o.animProp,s),r.bind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",function(){r.unbind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd"),I()})):"reset"==t?r.css(o.animProp,s):"ticker"==t&&(r.css("-"+o.cssPrefix+"-transition-timing-function","linear"),r.css(o.animProp,s),r.bind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",function(){r.unbind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd"),S(n.resetValue,"reset",0),H()}))}else{var a={};a[o.animProp]=e,"slide"==t?r.animate(a,i,o.settings.easing,function(){I()}):"reset"==t?r.css(o.animProp,e):"ticker"==t&&r.animate(a,speed,"linear",function(){S(n.resetValue,"reset",0),H()})}},b=function(){for(var t="",i=f(),n=0;i>n;n++){var s="";o.settings.buildPager&&e.isFunction(o.settings.buildPager)?(s=o.settings.buildPager(n),o.pagerEl.addClass("bx-custom-pager")):(s=n+1,o.pagerEl.addClass("bx-default-pager")),t+='<div class="bx-pager-item">'+s+"</div>"}o.pagerEl.html(t)},w=function(){o.settings.pagerCustom?o.pagerEl=e(o.settings.pagerCustom):(o.pagerEl=e('<div class="bx-pager" />'),o.settings.pagerSelector?e(o.settings.pagerSelector).html(o.pagerEl):o.controls.el.addClass("bx-has-pager").append(o.pagerEl),b()),o.pagerEl.delegate("a","click",z)},T=function(){o.controls.next=e('<a class="bx-next" href="">'+o.settings.nextText+"</a>"),o.controls.prev=e('<a class="bx-prev" href="">'+o.settings.prevText+"</a>"),o.controls.next.bind("click",A),o.controls.prev.bind("click",P),o.settings.nextSelector&&e(o.settings.nextSelector).append(o.controls.next),o.settings.prevSelector&&e(o.settings.prevSelector).append(o.controls.prev),o.settings.nextSelector||o.settings.prevSelector||(o.controls.directionEl=e('<div class="bx-controls-direction" />'),o.controls.directionEl.append(o.controls.prev).append(o.controls.next),o.controls.el.addClass("bx-has-controls-direction").append(o.controls.directionEl))},C=function(){o.controls.start=e('<div class="bx-controls-auto-item"><a class="bx-start" href="">'+o.settings.startText+"</a></div>"),o.controls.stop=e('<div class="bx-controls-auto-item"><a class="bx-stop" href="">'+o.settings.stopText+"</a></div>"),o.controls.autoEl=e('<div class="bx-controls-auto" />'),o.controls.autoEl.delegate(".bx-start","click",k),o.controls.autoEl.delegate(".bx-stop","click",y),o.settings.autoControlsCombine?o.controls.autoEl.append(o.controls.start):o.controls.autoEl.append(o.controls.start).append(o.controls.stop),o.settings.autoControlsSelector?e(o.settings.autoControlsSelector).html(o.controls.autoEl):o.controls.el.addClass("bx-has-controls-auto").append(o.controls.autoEl),q(o.settings.autoStart?"stop":"start")},E=function(){o.children.each(function(){var t=e(this).find("img:first").attr("title");void 0!=t&&e(this).append('<div class="bx-caption"><span>'+t+"</span></div>")})},A=function(e){o.settings.auto&&r.stopAuto(),r.goToNextSlide(),e.preventDefault()},P=function(e){o.settings.auto&&r.stopAuto(),r.goToPrevSlide(),e.preventDefault()},k=function(e){r.startAuto(),e.preventDefault()},y=function(e){r.stopAuto(),e.preventDefault()},z=function(t){o.settings.auto&&r.stopAuto();var i=e(t.currentTarget),n=parseInt(i.attr("data-slide-index"));n!=o.active.index&&r.goToSlide(n),t.preventDefault()},M=function(t){return"short"==o.settings.pagerType?(o.pagerEl.html(t+1+o.settings.pagerShortSeparator+o.children.length),void 0):(o.pagerEl.find("a").removeClass("active"),o.pagerEl.each(function(i,n){e(n).find("a").eq(t).addClass("active")}),void 0)},I=function(){if(o.settings.infiniteLoop){var e="";0==o.active.index?e=o.children.eq(0).position():o.active.index==f()-1&&o.carousel?e=o.children.eq((f()-1)*x()).position():o.active.index==o.children.length-1&&(e=o.children.eq(o.children.length-1).position()),"horizontal"==o.settings.mode?S(-e.left,"reset",0):"vertical"==o.settings.mode&&S(-e.top,"reset",0)}o.working=!1,o.settings.onSlideAfter(o.children.eq(o.active.index),o.oldIndex,o.active.index)},q=function(e){o.settings.autoControlsCombine?o.controls.autoEl.html(o.controls[e]):(o.controls.autoEl.find("a").removeClass("active"),o.controls.autoEl.find("a:not(.bx-"+e+")").addClass("active"))},D=function(){!o.settings.infiniteLoop&&o.settings.hideControlOnEnd?0==o.active.index?(o.controls.prev.addClass("disabled"),o.controls.next.removeClass("disabled")):o.active.index==f()-1?(o.controls.next.addClass("disabled"),o.controls.prev.removeClass("disabled")):(o.controls.prev.removeClass("disabled"),o.controls.next.removeClass("disabled")):1==f()&&(o.controls.prev.addClass("disabled"),o.controls.next.addClass("disabled"))},L=function(){o.settings.autoDelay>0?setTimeout(r.startAuto,o.settings.autoDelay):r.startAuto(),o.settings.autoHover&&r.hover(function(){o.interval&&(r.stopAuto(!0),o.autoPaused=!0)},function(){o.autoPaused&&(r.startAuto(!0),o.autoPaused=null)})},W=function(){var t=0;if("next"==o.settings.autoDirection)r.append(o.children.clone().addClass("bx-clone"));else{r.prepend(o.children.clone().addClass("bx-clone"));var i=o.children.first().position();t="horizontal"==o.settings.mode?-i.left:-i.top}S(t,"reset",0),o.settings.pager=!1,o.settings.controls=!1,o.settings.autoControls=!1,o.settings.tickerHover&&!o.usingCSS&&o.viewport.hover(function(){r.stop()},function(){var t=0;o.children.each(function(){t+="horizontal"==o.settings.mode?e(this).outerWidth(!0):e(this).outerHeight(!0)});var i=o.settings.speed/t,n="horizontal"==o.settings.mode?"left":"top",s=i*(t-Math.abs(parseInt(r.css(n))));H(s)}),H()},H=function(e){speed=e?e:o.settings.speed;var t={left:0,top:0},i={left:0,top:0};"next"==o.settings.autoDirection?t=r.find(".bx-clone").first().position():i=o.children.first().position();var n="horizontal"==o.settings.mode?-t.left:-t.top,s="horizontal"==o.settings.mode?-i.left:-i.top,a={resetValue:s};S(n,"ticker",speed,a)},O=function(){o.touch={start:{x:0,y:0},end:{x:0,y:0}},o.viewport.bind("touchstart",N)},N=function(e){if(o.working)e.preventDefault();else{o.touch.originalPos=r.position();var t=e.originalEvent;o.touch.start.x=t.changedTouches[0].pageX,o.touch.start.y=t.changedTouches[0].pageY,o.viewport.bind("touchmove",B),o.viewport.bind("touchend",X)}},B=function(e){var t=e.originalEvent,i=Math.abs(t.changedTouches[0].pageX-o.touch.start.x),n=Math.abs(t.changedTouches[0].pageY-o.touch.start.y);if(3*i>n&&o.settings.preventDefaultSwipeX?e.preventDefault():3*n>i&&o.settings.preventDefaultSwipeY&&e.preventDefault(),"fade"!=o.settings.mode&&o.settings.oneToOneTouch){var s=0;if("horizontal"==o.settings.mode){var r=t.changedTouches[0].pageX-o.touch.start.x;s=o.touch.originalPos.left+r}else{var r=t.changedTouches[0].pageY-o.touch.start.y;s=o.touch.originalPos.top+r}S(s,"reset",0)}},X=function(e){o.viewport.unbind("touchmove",B);var t=e.originalEvent,i=0;if(o.touch.end.x=t.changedTouches[0].pageX,o.touch.end.y=t.changedTouches[0].pageY,"fade"==o.settings.mode){var n=Math.abs(o.touch.start.x-o.touch.end.x);n>=o.settings.swipeThreshold&&(o.touch.start.x>o.touch.end.x?r.goToNextSlide():r.goToPrevSlide(),r.stopAuto())}else{var n=0;"horizontal"==o.settings.mode?(n=o.touch.end.x-o.touch.start.x,i=o.touch.originalPos.left):(n=o.touch.end.y-o.touch.start.y,i=o.touch.originalPos.top),!o.settings.infiniteLoop&&(0==o.active.index&&n>0||o.active.last&&0>n)?S(i,"reset",200):Math.abs(n)>=o.settings.swipeThreshold?(0>n?r.goToNextSlide():r.goToPrevSlide(),r.stopAuto()):S(i,"reset",200)}o.viewport.unbind("touchend",X)},Y=function(){var t=e(window).width(),i=e(window).height();(a!=t||l!=i)&&(a=t,l=i,r.redrawSlider())};return r.goToSlide=function(t,i){if(!o.working&&o.active.index!=t)if(o.working=!0,o.oldIndex=o.active.index,o.active.index=0>t?f()-1:t>=f()?0:t,o.settings.onSlideBefore(o.children.eq(o.active.index),o.oldIndex,o.active.index),"next"==i?o.settings.onSlideNext(o.children.eq(o.active.index),o.oldIndex,o.active.index):"prev"==i&&o.settings.onSlidePrev(o.children.eq(o.active.index),o.oldIndex,o.active.index),o.active.last=o.active.index>=f()-1,o.settings.pager&&M(o.active.index),o.settings.controls&&D(),"fade"==o.settings.mode)o.settings.adaptiveHeight&&o.viewport.height()!=h()&&o.viewport.animate({height:h()},o.settings.adaptiveHeightSpeed),o.children.filter(":visible").fadeOut(o.settings.speed).css({zIndex:0}),o.children.eq(o.active.index).css("zIndex",51).fadeIn(o.settings.speed,function(){e(this).css("zIndex",50),I()});else{o.settings.adaptiveHeight&&o.viewport.height()!=h()&&o.viewport.animate({height:h()},o.settings.adaptiveHeightSpeed);var n=0,s={left:0,top:0};if(!o.settings.infiniteLoop&&o.carousel&&o.active.last)if("horizontal"==o.settings.mode){var a=o.children.eq(o.children.length-1);s=a.position(),n=o.viewport.width()-a.width()}else{var l=o.children.length-o.settings.minSlides;s=o.children.eq(l).position()}else if(o.carousel&&o.active.last&&"prev"==i){var d=1==o.settings.moveSlides?o.settings.maxSlides-x():(f()-1)*x()-(o.children.length-o.settings.maxSlides),a=r.children(".bx-clone").eq(d);s=a.position()}else if("next"==i&&0==o.active.index)s=r.find(".bx-clone").eq(o.settings.maxSlides).position(),o.active.last=!1;else if(t>=0){var c=t*x();s=o.children.eq(c).position()}var g="horizontal"==o.settings.mode?-(s.left-n):-s.top;S(g,"slide",o.settings.speed)}},r.goToNextSlide=function(){if(o.settings.infiniteLoop||!o.active.last){var e=parseInt(o.active.index)+1;r.goToSlide(e,"next")}},r.goToPrevSlide=function(){if(o.settings.infiniteLoop||0!=o.active.index){var e=parseInt(o.active.index)-1;r.goToSlide(e,"prev")}},r.startAuto=function(e){o.interval||(o.interval=setInterval(function(){"next"==o.settings.autoDirection?r.goToNextSlide():r.goToPrevSlide()},o.settings.pause),o.settings.autoControls&&1!=e&&q("stop"))},r.stopAuto=function(e){o.interval&&(clearInterval(o.interval),o.interval=null,o.settings.autoControls&&1!=e&&q("start"))},r.getCurrentSlide=function(){return o.active.index},r.getSlideCount=function(){return o.children.length},$("#main-content").resize(function(){r.redrawSlider()}),r.redrawSlider=function(){o.children.add(r.find(".bx-clone")).width(p()),o.viewport.css("height",h()),o.settings.ticker||m(),o.active.last&&(o.active.index=f()-1),o.active.index>=f()&&(o.active.last=!0),o.settings.pager&&!o.settings.pagerCustom&&(b(),M(o.active.index))},r.destroySlider=function(){o.initialized&&(o.initialized=!1,e(".bx-clone",this).remove(),o.children.removeAttr("style"),this.removeAttr("style").unwrap().unwrap(),o.controls.el&&o.controls.el.remove(),o.controls.next&&o.controls.next.remove(),o.controls.prev&&o.controls.prev.remove(),o.pagerEl&&o.pagerEl.remove(),e(".bx-caption",this).remove(),o.controls.autoEl&&o.controls.autoEl.remove(),clearInterval(o.interval))},r.reloadSlider=function(e){void 0!=e&&(s=e),r.destroySlider(),d()},d(),this}}})(jQuery),function(e,t){var i="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";e.fn.imagesLoaded=function(n){function s(){var t=e(g),i=e(h);a&&(h.length?a.reject(d,t,i):a.resolve(d)),e.isFunction(n)&&n.call(r,d,t,i)}function o(t,n){t.src===i||-1!==e.inArray(t,c)||(c.push(t),n?h.push(t):g.push(t),e.data(t,"imagesLoaded",{isBroken:n,src:t.src}),l&&a.notifyWith(e(t),[n,d,e(g),e(h)]),d.length===c.length&&(setTimeout(s),d.unbind(".imagesLoaded")))}var r=this,a=e.isFunction(e.Deferred)?e.Deferred():0,l=e.isFunction(a.notify),d=r.find("img").add(r.filter("img")),c=[],g=[],h=[];return e.isPlainObject(n)&&e.each(n,function(e,t){"callback"===e?n=t:a&&a[e](t)}),d.length?d.bind("load.imagesLoaded error.imagesLoaded",function(e){o(e.target,"error"===e.type)}).each(function(n,s){var r=s.src,a=e.data(s,"imagesLoaded");a&&a.src===r?o(s,a.isBroken):s.complete&&s.naturalWidth!==t?o(s,0===s.naturalWidth||0===s.naturalHeight):(s.readyState||s.complete)&&(s.src=i,s.src=r)}):s(),a?a.promise(r):r}}(jQuery); CSS img.tab-ico { position: absolute; left: 6px; top: 50%; margin-top: -12px; } .partners-slider { height: 100%; } div.pslide { text-align: center; height: 100%; } div.pslide img { vertical-align: middle; } .ps-wrap .bx-wrapper { position: relative; margin: auto 0; padding: 0; *zoom: 1; } .ps-wrap .bx-wrapper img { max-width: 100%; } /** THEME ===================================*/ .ps-wrap .bx-wrapper .bx-viewport { -moz-box-shadow: 0 0 5px #ccc; -webkit-box-shadow: 0 0 5px #ccc; box-shadow: 0 0 5px #ccc; } .ps-wrap { position: relative; margin-top: 18px; background: #d6d4c8; padding: 6px 0 6px; } .ps-wrap:before{ position: absolute; top: 0; left: 0; height: 5px; width: 100%; content: ''; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAJElEQVQImQEZAOb/AOXj1/8A5ePX/wDx7+L/ALy6sf8Az87C/97LEYJAFgv5AAAAAElFTkSuQmCC) repeat-x; z-index: 1; } .ps-wrap:after{ position: absolute; bottom: 0; left: 0; height: 5px; width: 100%; content: ''; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAFCAYAAACEhIafAAAAHklEQVQImWM4f+7Qf4Y9uzb+Z/j4/tF/hqePr0MIANUbEYIYiHfUAAAAAElFTkSuQmCC) repeat-x; z-index: 1; } .bx-controls-direction { position: absolute; top: 80px; } .................................................................................
You can achieve that with an pseudo-element: div.pslide { text-align: center; height: 100%; } div.pslide:before { content:''; display: inline-block; height: 100%; vertical-align: middle; margin-right: -0.25em; } div.pslide img { display: inline-block; vertical-align: middle; } Example How it works Its based on this CSSTricks post.
Why are you keeping it has a separate image. Instead make it as the div's background like style = "background:url('http://t2.gstatic.com/images?q=tbn:ANd9GcQvsT_kxUqdhOoo7zSTkbQ76PLgx4ZRucUZcbf2KsrY0bFbu30agw') no-repeat center center" and position it both vertically and horizontally. Here is the sample fiddle of yours.