1

I am having an issue with a page I am developing; it seems the CSS that is being generated by my JavaScript file is inconsistent. It seems to be only the CSS regarding the placement of a div (using calculated values) and the height of a couple other divs (also using calculated values).

This was not an issue until I deployed to the hosting service for ongoing development testing. In other words, on my local machine, the issue is not reproducible.

I have had to refresh the page as many as 40 times to get reproduce the issue, but it happens...

The inconsistent behavior is regarding the placement of the <article class="betterThings">. The placement is calculated by JS, and it seems that JS is not always calculating the $('.header').outerHeight() correctly. Again, it works most of the time, but not always. I should also specify that I have only been able to reproduce in Chrome so far.

Website here

Code here:

var navTop;
var windowHeight;
var belowHeader;
var tallestHomeDiv;
var orientation = window.orientation;

$('document').ready(function() {
	navTop = $('.header').outerHeight(true);
	windowHeight = $(window).height();
	belowHeader = ((windowHeight - (navTop + 50)));
	tallestHomeDiv = $('.dislike').outerHeight(true);
	placeElements();
	stickyNav();
	
	showBetterThings();
});

function stickyNav() {
	$('.navbar').affix({offset: {top: navTop} });
}


function placeElements() {
	$('article.betterThings').css('position', 'absolute');
	$('article.betterThings').css('top', belowHeader / 2);
	$('article.betterThings').css('transform', 'translateY(-50%)');
	
	$('article.balance').css('margin-top', belowHeader);
	$('article.balance').css('height', tallestHomeDiv);
	
	$('article.busy').css('margin-top', belowHeader);
	$('article.busy').css('height', tallestHomeDiv);
	
	$('article.dislike').css('margin-top', belowHeader);

}

function showBetterThings() {

		$('article.betterThings').addClass('show');
	
}
/****************************************
			GLOBAL STYLES 
 ****************************************/

/*=-=-=-=-=-=-= header =-=-=-=-=-=-=-=-=*/

.header {
	background-color: #323232;
}

.fullLogo {
	padding: 1%;
	margin: 0 auto;
}

/*=-=-=-=-=-=-= navigation -=-=-=-=-=-=-=*/	
.navCont {
	min-height: 50px;
}

.navbar {
	border-radius: 0;
	margin: 0;
	background-color: #316924;
	-webkit-transition: all 1s ease-in;
		   -moz-transition: all 1.5s ease-in;
			-ms-transition: all 1.5s ease-in;
			 -o-transition: all 1.5s ease-in;
				transition: all 1.5s ease-in;
} 

.navbar.affix {
	top: 0;
	width: 100%;
	z-index: 100;
	background-color: #323232;
	-webkit-transition: all 1.5s ease-in;
	   -moz-transition: all 1.5s ease-in;
	    -ms-transition: all 1.5s ease-in;
	     -o-transition: all 1.5s ease-in;
	        transition: all 1.5s ease-in;
	
}

.navbar > .container-fluid > .navbar-collapse > .navbar-nav > .active > a {
	background-color: #323232;
}

.navbar.affix > .container-fluid > .navbar-collapse > .navbar-nav > .active > a {
	background-color: #316924;
}

.houseLogo {
	height: 45px;
	margin-top: -13px;
}
		
/*=-=-=-=-=-=-=-=- body =-=-=-=-=-=-=-=-=*/
section.content {

}

h1.home, h2.home {
	font-family: 'Kaushan Script', cursive;
	color: #b30047;
	text-align: center;
}

p.home {
	color: #5dd9d5;
}

a.home.scroll {
	color: #b30047;
	font-size: .75em;
}

article.home {
	background-color: rgba(0, 0, 0, .5);
	font-size: 1.25em;
	padding: 25px;
	border-radius: 10px;
}

article.betterThings {
	margin-right: 8.33333%;
	text-align: center;
	opacity: 0;
}

article.betterThings.show {
	opacity: 1;
	-webkit-transition: opacity 5s ease-in-out;
	   -moz-transition: opacity 5s ease-in-out;
	    -ms-transition: opacity 5s ease-in-out;
	     -o-transition: opacity 5s ease-in-out;
	        transition: opacity 5s ease-in-out;
}

div.first {
	padding-left: 0;
}

div.last {
	padding-right: 0;
}

.homeBackVideo {
	position: fixed;
	top: 50%;
	left: 50%;
	min-width: 100%;
	min-height: 100%;
	width: auto;
	height: auto;
	z-index: -100;
	transform: translateX(-50%) translateY(-50%);
	opacity: 0.5;
}

.content {
	height: 1000px;
}

.aside {
}

/*=-=-=-=-=-=-=-= footer -=-=-=-=-=-=-=-=*/

.footer {
	background-color: black;
	width: 100%;
	margin-top: 50px;
	padding: 0;
}

.footerContact {
	margin: 15px;
	height: 2em;
}

/*****************************************
			   MEDIA QUERIES
******************************************/
			   
/*=-=-=-=-=-= for mobile only =-=-=-=-=-=*/
@media only screen and (max-width: 767px) {
	.navbar > div.container-fluid > div.navbar-header > a.navbar-brand {
		opacity: 0;
		-webkit-transition: all 0.75s ease-in;
		   -moz-transition: all 0.75s ease-in;
			-ms-transition: all 0.75s ease-in;
			 -o-transition: all 0.75s ease-in;
				transition: all 0.75s ease-in;
	}
	
	.navbar.affix > div.container-fluid > div.navbar-header > a.navbar-brand {
		opacity: 1;
		-webkit-transition: all 0.75s ease-in;
		   -moz-transition: all 0.75s ease-in;
			-ms-transition: all 0.75s ease-in;
			 -o-transition: all 0.75s ease-in;
				transition: all 0.75s ease-in;
	}
}

/*=-=-=-=-=-for tablet and below=-=-=-=-=*/
@media only screen and (max-width: 991px) {
	div.first, div.middle, div.last {
		padding: 0;
	}
	
	article.busy, article.dislike {
		margin-top: 25px !important;
	}
}

/*=-=-=-=-=-= for tablet only =-=-=-=-=-=*/
@media only screen and (min-width: 768px) and (max-width: 991px) {

}

/*=-=-=-=-= for tablet and above =-=-=-=-*/
@media only screen and (min-width: 768px) {
   
	.navbar > div.container-fluid > div.navbar-header {
		width: 0;
		overflow: hidden;
		-webkit-transition: all 0.75s ease-in-out;
		   -moz-transition: all 0.75s ease-in-out;
			-ms-transition: all 0.75s ease-in-out;
			 -o-transition: all 0.75s ease-in-out;
				transition: all 0.75s ease-in-out;
	}

	.navbar.affix > div.container-fluid > div.navbar-header {
		padding: 0px;
		width: 190px;
		-webkit-transition: all 0.75s ease-in-out;
		   -moz-transition: all 0.75s ease-in-out;
			-ms-transition: all 0.75s ease-in-out;
			 -o-transition: all 0.75s ease-in-out;
				transition: all 0.75s ease-in-out;
	}
}

/*=-=-=-=-=- for desktop only =-=-=-=-=-=*/
@media only screen and (min-width: 992px) {
	h1.home {
		font-size: 3em;
		margin-bottom: .75em;
	}
}
<!DOCTYPE html>
<html>
	<head>
		<title>
		</title>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
		<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Kaushan+Script">
		<link rel="stylesheet" href="./css/styles.css">
		<script defer src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
		<script defer src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
		<script defer src="./scripts/kelliKlean.js"></script>
	</head>
	<body>
	
		<div class="container-fluid mainContainer">
		
			<!--=-= HEADER =-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-->
			<div class="row">
				<header class="header col-xs-12">
					<img class="img-responsive fullLogo" src="./resources/fullLogo.png" alt="full logo"/>
				</header>
			</div>
			
			<!--=-= NAV BAR -==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-->
			<div class="row navCont">
			
				<nav class="navbar navbar-inverse">
					<div class="container-fluid">
						<div class="navbar-header">
							<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
								<span class="icon-bar"></span>
								<span class="icon-bar"></span>
								<span class="icon-bar"></span> 
							</button>
							<a class="navbar-brand" href="#"><img class="img-responsive houseLogo" src="./resources/navLogo.png" alt="full logo"/></a>
						</div>
					
						<div class="collapse navbar-collapse" id="myNavbar">
							<ul class="nav navbar-nav">
								<li class="active"><a href="#">Home</a></li>
								<li><a href="#">Page 1</a></li>
								<li><a href="#">Page 2</a></li> 
								<li><a href="#">Page 3</a></li> 
							</ul>
							<ul class="nav navbar-nav navbar-right">
								<li><a href="#"><span class="glyphicon glyphicon-usd"></span> Quote</a></li>
								<li><a href="#"><span class="glyphicon glyphicon-map-marker"></span> Map</a></li>
							</ul>
						</div>
					</div>
				</nav>
				
			</div>
			
			<!--=-= CONTENT -==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-->
			<div class="row">
				<!---- backgroung video --------------------------------------------------------------------->
				<video loop muted autoplay class="homeBackVideo">
					<source src="./resources/beach.mp4" type="video/mp4">
				</video>
				
				<section class="content col-xs-12">
					
					<div class="row">
						<article class="home betterThings col-xs-10 col-xs-offset-1">
							<h1 class="home">Because you have better things to do!</h1>
							<p class="home">Wouldn't you rather drive to the beach and spend your Saturday basking in the warmth
								of the sun and cooling off in the shallow, salty water of the Gulf instead of cleaning
								your home? Life is short, enjoy it!</p>
							<a class="home scroll btn btn-default" href="#">Scroll Down<br>
								<span class="home glyphicon glyphicon-menu-down"></span>
							</a>
						</article>
					</div>
					
					<div class="row">
						<div class="first col-xs-10 col-xs-offset-1 col-md-3">
							<article class="home balance">
								<img class="balance img-responsive" src="./resources/balance.jpg"/>
								<h2 class="home balance">It's All About Balance</h2>
								<p class="home">After a long day at work, the last thing you want to worry about is cleaning your
									home, not to mention that it depletes valuable time that you could be enjoying other activities.
									Even if you don't need a daily housekeeper, having a scheduled cleaning a couple times a month
									will help balance the scales between work and life. Remember, we work to live, we don't live to
									work!</p>
							</article>
						</div>
						
						<div class="middle col-xs-10 col-xs-offset-1 col-md-offset-0 col-md-4">
							<article class="home busy">
								<img class="busy img-responsive" src="./resources/busy.jpg"/>
								<h2 class="home busy">Who Has the Time?</h2>
								<p class="home">If your schedule is already packed full, finding the time to clean is never easy.
									Between dropping the kids off, driving to work, cooking dinner, and walking the dog, who has
									the time to clean? Studies have shown conflict among busy families can often come from the 
									stress of finding (or spending) time to clean. Hiring a housekeeper can help lower your stress 
									level by allowing you to fit in everything else your busy days have to offer. </p>
							</article>
						</div>
						
						<div class="last col-xs-10 col-xs-offset-1 col-md-offset-0 col-md-3">
							<article class="home dislike">
								<img class="balance img-responsive" src="./resources/dislike.jpg"/>
								<h2 class="home balance">Please NO!</h2>
								<p class="home">If you are like most people, in lieu of cleaning you would rather be doing... well,
								anything! Let's face it: cleaning is not the most desirable way to spend your time. Also, some people 
								are	just better at cleaning that others. If it takes you hours to clean your home and you hate every
								minute of it, why not hire someone that would do it faster so you can devote your time to
								whatever it is you would rather be doing?</p>
							</article>
						</div>
						
					</div>
					
					<!--=-= FOOTER =-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-->
					<div class="row">
						<footer class="footer col-xs-12">
							<img class="footerContact" src="./resources/facebook.png"/>
							<img class="footerContact" src="./resources/email.png"/>
							<img class="footerContact" src="./resources/call.png"/>
						</footer>
					</div>
					
				</section>
	
			</div>
			
		</div>
	
	</body>
</html>

4
  • 1
    So what's wrong? What is the inconsistent CSS? What placement error do you have? Commented Oct 30, 2016 at 18:06
  • Too much code. See minimal reproducible example. Commented Oct 30, 2016 at 18:09
  • @Elfayer - The inconsistent behavior is regarding the placement of the <article class="betterThings">. The placement is calculated by JS, and it seems that JS is not always calculating the $('.header').outerHeight() correctly. Again, it works most of the time, but not always. I should also specify that I have only been able to reproduce in Chrome so far. Commented Oct 30, 2016 at 18:14
  • @Oriol - I am not sure where the error is, so I do not know how much code can be omitted. Do you think this deserves a downvote? Commented Oct 30, 2016 at 18:15

2 Answers 2

1

It seems to me that the problem is that your code for retrieving the height of the highest div happens before the images on the page are loaded, making the highest div quite low.

It could be solved by executing the code on window.load rather than document.ready, but please consider a more elegant solution (I would try to look up if bootstrap does not support this)

Sign up to request clarification or add additional context in comments.

3 Comments

Thanks for the feedback. I will look into this.
The inconsistent behavior seems to have been solved using window.load. I will, however, continue to look for a better solution. Thank you!
@Jaykub - you were right on both accounts. Bootstrap's .card class accomplished exactly what I wanted to do!
0

As Jakub suggested, I looked into boostrap functionality to support what I was trying to accomplish. It turns out using the built in .card class in bootstrap will achieve what I wanted. I can create a deck of card that will all have the same height and eliminate the need for the dynamically calculated values in javascript.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.