JSFiddle - React, Tailwind, and code Playground

by Vinícius Pontin

HTML

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
		<nav id="site_navbar" class="navbar navbar-inverse navbar-fixed-top">
			<div class="container">
				<!-- Brand and toggle get grouped for better mobile display -->
				<div class="navbar-header">
					<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
					<span class="sr-only">Habilitar navegação</span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					</button>
					<a class="navbar-brand" href="#">LOGO</a>
				</div>
				<!-- Collect the nav links, forms, and other content for toggling -->
				<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
					<ul class="nav navbar-nav">
						<li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
						<li><a href="#">Link</a></li>
					</ul>
					<ul class="nav navbar-nav navbar-right">
						<li><a href="#">Link</a></li>
					</ul>
				</div>
			</div>
		</nav>
		<header id="site_header">
		
		</header>
		<main id="site_content">
			<div class="container">
				<h1>TEST</h1>
				<div id="debug_data"></div>
				<p>Test Line</p>
				<p>Test Line</p>
				<p>Test Line</p>
				<p>Test Line</p>
				<p>Test Line</p>
				<p>Test Line</p>
				<p>Test Line</p>
				<p>Test Line</p>
				<p>Test Line</p>
				<p>Test Line</p>
				<p>FINAL LINE!</p>
			</div>
		</main>
		<footer id="site_footer">
			<div class="container">
				<p class="muted credit">Adaptable Footer (or not)</p>
			</div>			
		</footer>

CSS

#site_header
{
	padding-top: 70px;
}

#site_content
{
	height: auto;
}

#site_footer
{
	background-color: #f5f5f5;
	width: 100%;
}
	#site_footer .container
	{
		padding: 20px;	
	}

JavaScript

function footer_fix(jQuery)
{
	// Variáveis
	var altura_viewport = $(window).height();
	var altura_conteudo = $('#site_content').outerHeight(true) + $('#site_header').outerHeight(true);	
	var altura_rodape = $('#site_footer').outerHeight(true);
	
	$('#debug_data').html("");
	
	$('#debug_data').append("<p>Altura do cabeçalho > " + $('#site_header').outerHeight(true) + "</p>");
	
	$('#debug_data').append("<p>Altura do miolo > " + $('#site_content').outerHeight(true) + "</p>");
	
	$('#debug_data').append("<p>Altura do conteudo (dois acima juntos) > " + altura_conteudo + "</p>");
	
	$('#debug_data').append("<p>O que deveria dar > " + $('#site_header').outerHeight(true) + " + " + $('#site_content').outerHeight(true) + "</p>");
	
	$('#debug_data').append("<p>Altura da janela > " + altura_viewport + "</p>");
	
	$('#debug_data').append("<p>Altura do rodapé > " + altura_rodape + "</p>");
	
	// Se a altura da viewport (mais o tamanho do footer) forem maiores que o tamanho da altra do conteúdo (ou seja, sobrar espaço)
	if (altura_conteudo > (altura_viewport-altura_rodape))
	{
		$('#site_footer').css('position','static');
	}
	else
	{
		$('#site_footer').css('position','fixed');
		/* $('#site_footer').css('bottom','0px'); */
		$('#site_footer').css('top',altura_viewport-$('#site_footer').outerHeight());
	}
	$('#debug_data').append("<p>Posição > " + $('#site_footer').css('position') + "</p>");
	// PARA FIXAR O FOOTER NA PARTE INFERIOR DA PAGINA
	
}


$(document).ready(footer_fix);
$(window).resize(footer_fix);
$('#debug_textarea').resize(footer_fix);