Free
Navbar
Kinetiq Navbar
A navbar block extracted from the Kinetiq template, available in Tailwind CSS and Bootstrap.
0
3
A navbar block extracted from the Kinetiq template, available in Tailwind CSS and Bootstrap.
<!DOCTYPE html>
<html lang="en">
<head>
<script>
window.FontAwesomeConfig = { autoReplaceSvg: 'nest' };
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/js/all.min.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kinetiq Navbar | Tailwind CSS UI Block</title>
<meta name="description" content="A navbar block extracted from the Kinetiq template, available in Tailwind CSS and Bootstrap.">
<meta name="keywords" content="Kinetiq, Tailwind CSS template, HTML website template, consulting template, startup accelerator website, innovation consultancy, venture studio, corporate innovation, team page, newsletter signup">
<meta name="author" content="Let's templates">
<link rel="canonical" href="">
<meta property="og:type" content="product">
<meta property="og:site_name" content="Let's templates">
<meta property="og:locale" content="en_US">
<meta property="og:url" content="">
<meta property="og:title" content="Kinetiq | Tailwind CSS Consulting Template">
<meta property="og:description" content="A bold Tailwind CSS template for startup accelerators and innovation consultancies, with chrome-tube hero art, count-up stats and a filterable team grid.">
<meta property="og:image" content="">
<meta property="og:image:alt" content="Kinetiq template preview">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:url" content="">
<meta name="twitter:title" content="Kinetiq | Tailwind CSS Consulting Template">
<meta name="twitter:description" content="A bold Tailwind CSS template for startup accelerators and innovation consultancies, with chrome-tube hero art, count-up stats and a filterable team grid.">
<meta name="twitter:image" content="">
<meta name="twitter:image:alt" content="Kinetiq template preview">
<script src="https://cdn.tailwindcss.com/3.4.17"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Big+Shoulders+Display:wght@600;800;900&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
<script>
tailwind.config = {
theme: {
extend: {
colors: { lime: { DEFAULT: '#e2f43a', soft: '#f3fbb8' }, coal: { DEFAULT: '#222528', soft: '#2c3035', line: '#3a3f45' } },
fontFamily: { sans: ['Inter', 'sans-serif'], display: ['"Big Shoulders Display"', 'sans-serif'] }
}
}
}
</script>
<style>
@view-transition { navigation: auto; }
::view-transition-old(root) { animation: 180ms ease-out both page-fade-out; }
::view-transition-new(root) { animation: 220ms ease-in both page-fade-in; }
@keyframes page-fade-out { to { opacity: 0; } }
@keyframes page-fade-in { from { opacity: 0; } }
html { scroll-behavior: smooth; }
[hidden] { display: none !important; }
.tube { filter: drop-shadow(0 18px 18px rgba(0, 0, 0, .18)); }
.neon { filter: saturate(1.4) hue-rotate(-12deg); }
.glow { text-shadow: 0 0 28px rgba(226, 244, 58, .45); }
.reveal-ready [data-reveal] { opacity: 0; transform: translateY(24px); transition: opacity .6s ease, transform .6s ease; transition-delay: var(--reveal-delay, 0ms); }
.reveal-ready [data-reveal].is-visible { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
html { scroll-behavior: auto; }
::view-transition-old(root), ::view-transition-new(root) { animation: none; }
}
</style>
</head>
<body class="bg-coal font-sans text-white antialiased">
<% active_page = "index" %>
<% nav = { "work" => "Our work", "about" => "About", "contact" => "Contact" } %>
<% audiences = { "startups" => "For startups", "corporates" => "For corporates" } %>
<!-- block:start navbar -->
<header class="sticky top-0 z-40 bg-coal">
<nav class="mx-auto grid max-w-7xl grid-cols-[1fr_auto_1fr] items-center gap-4 px-5 py-4 md:px-10" aria-label="Main">
<ul class="hidden items-center gap-8 text-xs font-semibold uppercase tracking-wider lg:flex">
<% nav.each do |slug, label| %>
<% active = active_page == slug %>
<li><a href="<%= slug %>.html" <%= 'aria-current="page"'.html_safe if active %> class="transition <%= active ? 'text-lime' : 'hover:text-lime' %>"><%= label %></a></li>
<% end %>
</ul>
<a href="index.html" class="col-start-1 font-display text-3xl font-black uppercase tracking-tight lg:col-start-2">Kinet<span class="italic text-lime">i</span>q</a>
<ul class="hidden items-center justify-end gap-8 text-xs font-semibold uppercase tracking-wider text-lime lg:flex">
<% audiences.each do |slug, label| %>
<% active = active_page == slug %>
<li><a href="<%= slug %>.html" <%= 'aria-current="page"'.html_safe if active %> class="inline-flex items-center gap-1.5 transition hover:text-white <%= 'underline underline-offset-4' if active %>"><%= label %><i class="fa-solid fa-arrow-up rotate-45 text-[10px]" aria-hidden="true"></i></a></li>
<% end %>
</ul>
<button type="button" data-menu-toggle aria-controls="mobile-menu" aria-expanded="false" class="col-start-3 grid h-10 w-10 place-items-center justify-self-end border-2 border-white/80 lg:hidden" aria-label="Open menu"><i class="fa-solid fa-bars" aria-hidden="true"></i></button>
</nav>
<div id="mobile-menu" class="hidden border-t border-coal-line px-5 pb-8 pt-4 lg:hidden">
<ul class="grid gap-1 font-display text-4xl font-extrabold uppercase">
<% { "index" => "Home" }.merge(nav).merge(audiences).each do |slug, label| %>
<% active = active_page == slug %>
<li><a href="<%= slug %>.html" <%= 'aria-current="page"'.html_safe if active %> class="block py-1 <%= active ? 'text-lime' : 'hover:text-lime' %>"><%= label %></a></li>
<% end %>
</ul>
</div>
</header>
<!-- block:end navbar -->
<script>
const reducedMotion = matchMedia('(prefers-reduced-motion: reduce)').matches;
const watchMotion = !reducedMotion && !navigator.webdriver && 'IntersectionObserver' in window;
document.querySelectorAll('[data-menu-toggle]').forEach((button) => {
const menu = document.getElementById(button.getAttribute('aria-controls'));
button.addEventListener('click', () => {
const open = button.getAttribute('aria-expanded') === 'true';
button.setAttribute('aria-expanded', String(!open));
menu.classList.toggle('hidden', open);
});
});
document.querySelectorAll('[data-draw]').forEach((root) => {
if (!watchMotion) return;
root.querySelectorAll('[data-draw-path]').forEach((path, index) => {
const length = path.getTotalLength();
path.style.strokeDasharray = length;
path.style.strokeDashoffset = length;
requestAnimationFrame(() => requestAnimationFrame(() => {
path.style.transition = `stroke-dashoffset .7s ease-out ${index * 150}ms`;
path.style.strokeDashoffset = 0;
}));
});
});
document.querySelectorAll('[data-team]').forEach((root) => {
const chips = [...root.querySelectorAll('[data-filter]')];
chips.forEach((chip) => chip.addEventListener('click', () => {
chips.forEach((other) => other.setAttribute('aria-pressed', String(other === chip)));
root.querySelectorAll('[data-category]').forEach((item) => { item.hidden = chip.dataset.filter !== 'all' && item.dataset.category !== chip.dataset.filter; });
}));
});
document.querySelectorAll('[data-newsletter]').forEach((form) => {
const status = form.parentElement.querySelector('[data-form-status]');
form.addEventListener('submit', (event) => {
event.preventDefault();
const email = form.elements.email;
if (!email.checkValidity()) { status.textContent = 'Please enter a valid email address.'; email.focus(); return; }
status.textContent = "You're on the list — see you next month.";
form.reset();
});
});
document.querySelectorAll('[data-count]').forEach((el) => {
const stat = el.closest('[data-stat]');
const target = Number(el.dataset.count);
const decimals = el.dataset.count.includes('.') ? 1 : 0;
const format = (value) => (decimals ? value.toFixed(1) : Math.round(value).toLocaleString('en-US'));
if (!watchMotion) { stat.classList.replace('text-white/40', 'text-lime'); return; }
const observer = new IntersectionObserver(([entry]) => {
if (!entry.isIntersecting) return;
observer.disconnect();
const start = performance.now();
const tick = (now) => { const t = Math.min(1, (now - start) / 700); el.textContent = format(target * t); if (t < 1) requestAnimationFrame(tick); else stat.classList.replace('text-white/40', 'text-lime'); };
requestAnimationFrame(tick);
});
observer.observe(el);
});
if (watchMotion) {
document.documentElement.classList.add('reveal-ready');
const observer = new IntersectionObserver((entries) => entries.forEach((entry) => {
if (entry.isIntersecting) { entry.target.classList.add('is-visible'); observer.unobserve(entry.target); }
}), { threshold: 0.15 });
document.querySelectorAll('[data-reveal]').forEach((el) => observer.observe(el));
}
</script>
</body>
</html>
Professional Services
Unlock the entire library of premium templates and blocks. Renews automatically, cancel anytime.