webForumDet fria alternativet

"Frysa" tabellrubrik likt excel

HTML & CSS

7 svar · 1 520 visningar · startad av lilja

Medlem sedan juli 20041 183 inlägg
Frågan#1

Jag har en tabell men massvis av rader i och det skulle vara snyggt om jag kunde låsa huvudet så att det alltid syns överst. Det enda jag hittar är att en lösning med tbody och overflow-x: auto; inte fungerar i IE. De flesta exemplen säger att man ska ha en egen tabell för datat och sedan se till så att kolumnerna i headern-tabellen och data-tabellen är lika breda, men det känns inte bra. Jag vill helst ha allt i en och samma tabell.

Jag vet att jag sett nån hemsida där en horisontell menyn (under nån rubrikbild) åker upp till toppen av sidan när mans scrollar och sedan stannar där när man scrollar vidare. Jag kommer inte på vad sidan heter, någon annan som gör det? Går detta att göra på nåt smidigt sätt?

Medlem sedan jan. 2003296 inlägg
#2

http://www.pmob.co.uk/temp/table-fixed-header-example.htm

svd.se använder ju en meny som fungerar på det sätt du beskriver om jag förstår dig rätt. Att få en tabellrubrik att fungera på samma sätt är jobbigare än med en fristående meny dock.

Medlem sedan juli 20041 183 inlägg
#3

Oj, vad snyggt. Precis vad jag ville ha. Ska se om jag lyckas implementera det. :)

Det var precis som på svd jag menade. Även om det inte verkar vara det jag är ute efter till min tabell. Är det något som har gjort något liknande här? Är det javascript eller bara ren css? Jag titta lite på det och det finns kanske nåt i http://www.svd.se/template/ver1-0/js/svdcore.min.js?v=212 men allt är på en rad och jag ser inte riktigt om det har med menyn att göra. Menyn verkar ligga i diven stickyoff och det finns nåt i js-filen som heter stickynav...

Medlem sedan juli 2003555 inlägg
#4

Det för tabellen är bara css, på svd är det en kombination. I princip så går svd:s ut på att ett javascript på något sätt känner av ifall menyn är "utanför" eller inte, och sätter sedan css style-attributet "position" till antingen static (menyn ligger inbäddad som vanligt) eller fixed (bryr sig inte om scrollningen utan ligger fast överst)

Medlem sedan jan. 2003296 inlägg
#5

Hade en liten stund över så här får du ett exempel på svd-menyn, enligt den princip onkelborg beskrev:

<!DOCTYPE html>
<html lang="sv">
<head>
<meta charset="utf-8" />
<title>Scrolltest</title>

<style>
body { margin: 0 auto; width: 600px; }
#nav { background: #800; list-style: none; margin: 0; overflow: hidden; padding: 0; position: static; width: 600px; }
#nav li { display: inline; }
#nav li a { background: #800; color: #fff; float: left; padding: 5px 10px; text-decoration: none; }
#nav a:focus, #nav a:hover { background: #000; }
</style>
</head>

<body>
<h1>Testsida</h1>

<ul id="nav">
	<li><a href="#">Test 1</a></li>
	<li><a href="#">Test 2</a></li>
	<li><a href="#">Test 3</a></li>
	<li><a href="#">Test 4</a></li>
</ul>

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla in risus risus, non dignissim magna. Nam nibh mi, condimentum ac vestibulum in, mattis sit amet velit. Donec pretium consequat convallis. Maecenas tincidunt felis eu nibh vestibulum sollicitudin. Pellentesque gravida risus nec metus consectetur ullamcorper. Etiam in mauris velit. Aenean nec pharetra ligula. Phasellus mattis placerat molestie. Mauris id erat nisi, non iaculis dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam porttitor facilisis pharetra.</p>
<p>Nullam venenatis leo ut eros condimentum eget faucibus libero pretium. Praesent rutrum interdum aliquet. Sed non odio sapien, ac laoreet justo. Curabitur quis lectus a velit rutrum sagittis a elementum orci. Phasellus neque leo, elementum quis sollicitudin id, imperdiet quis dui. Mauris dictum ligula id massa dapibus ac vestibulum magna sagittis. Curabitur tincidunt ligula a risus venenatis non elementum ante rhoncus. Phasellus vel odio non metus rutrum dapibus id vel nisl. In hac habitasse platea dictumst. Nullam dapibus consequat ligula, ac vulputate nulla convallis sed. Nullam a porttitor tellus. Sed eget elit ac massa imperdiet pellentesque et sit amet sem.</p>
<p>Ut posuere ligula scelerisque felis sagittis vestibulum. Vivamus mollis volutpat risus, quis eleifend odio pretium quis. Nam adipiscing, dolor eu sagittis venenatis, magna orci pulvinar nunc, eget eleifend tortor nibh et metus. Proin nec eros tortor. Pellentesque mollis imperdiet sapien, varius bibendum urna aliquet quis. Proin tristique adipiscing lorem non interdum. Phasellus tristique metus a erat bibendum posuere. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin iaculis lectus eu eros pellentesque luctus. Pellentesque nisi elit, faucibus id consectetur et, dignissim in orci. Praesent felis tellus, sollicitudin nec elementum in, pharetra in justo. In a lorem at nibh porta vestibulum. Aenean turpis lacus, elementum at fringilla vehicula, blandit a elit. Aliquam faucibus volutpat orci, non iaculis justo tempus non. Etiam at tortor quis risus posuere placerat sit amet porta nisi. Nam ac sem eget quam cursus imperdiet. Praesent pretium magna ut lacus tempus eget tincidunt orci gravida. Donec orci leo, suscipit a congue at, varius eget mi. Nullam at turpis vel velit aliquet dignissim.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla in risus risus, non dignissim magna. Nam nibh mi, condimentum ac vestibulum in, mattis sit amet velit. Donec pretium consequat convallis. Maecenas tincidunt felis eu nibh vestibulum sollicitudin. Pellentesque gravida risus nec metus consectetur ullamcorper. Etiam in mauris velit. Aenean nec pharetra ligula. Phasellus mattis placerat molestie. Mauris id erat nisi, non iaculis dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam porttitor facilisis pharetra.</p>
<p>Nullam venenatis leo ut eros condimentum eget faucibus libero pretium. Praesent rutrum interdum aliquet. Sed non odio sapien, ac laoreet justo. Curabitur quis lectus a velit rutrum sagittis a elementum orci. Phasellus neque leo, elementum quis sollicitudin id, imperdiet quis dui. Mauris dictum ligula id massa dapibus ac vestibulum magna sagittis. Curabitur tincidunt ligula a risus venenatis non elementum ante rhoncus. Phasellus vel odio non metus rutrum dapibus id vel nisl. In hac habitasse platea dictumst. Nullam dapibus consequat ligula, ac vulputate nulla convallis sed. Nullam a porttitor tellus. Sed eget elit ac massa imperdiet pellentesque et sit amet sem.</p>

<script>
(function() {
	function getScrollHeight()
	{
		var h = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
		return h ? h : 0;
	}

	var nav = document.getElementById("nav");
	if (nav)
	{
		var initialTop = nav.offsetTop;
		nav.style.top = 0;
		window.onscroll = function() {
			var h = getScrollHeight();
			if (h > nav.offsetTop && h > initialTop)
				nav.style.position = "fixed";
			else
				nav.style.position = "static";
		}
	}
})();
</script>
</body>
</html>

Förutom i IE6 då, där position: fixed inte fungerar, där är du shit out of luck. Precis som vanligt när det gäller IE6 :)

Medlem sedan okt. 20001 285 inlägg
#6

fixed ? .. ditt exempel säger static ;)

Doh x( .. sry .. jag såg inte javascriptet

Medlem sedan juli 20041 183 inlägg
#7

Snyggt, två frågor bara.

1. Varför är all koden omringad av paranteser och avslutas med paranteser.

(kod..)();

2. Varför funkar det bara om jag lagt javascriptet efter menyn?

Medlem sedan juni 20019 519 inlägg
#8

1. det kallas att en funktion är annonym, du vill inte att man skall kunna köra samma kod om och om igen tex.

2. JS koden letar efter DOM trädet, vilket inte finns förrän du har kört din HTML kod, du kan lösa det med att lägga kod i onload(dock om du har bilder så kommer det att laddas först efter allt är inladdat på sidan), JS kod brukar man lägga längst ner idag för att presentera innehåll snabbare.

258 ms totalt · 3 externa anrop · v20260731065814-full.767b4345
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)