webForumDet fria alternativet

Hur fungerar måttet "em" egentligen?

HTML & CSSur HTML, XHTML & CSS

29 svar · 2 476 visningar · startad av olarsson

Medlem sedan feb. 200777 inlägg
Frågan#1

Hur är det med em i CSS egentligen? Tas detta måttet utifrån normalstorleken på texten hela sidan eller utifrån textstorleken på det aktuella blocket. Anta att man har en sektion som har bredden i em och man får för sig att ändra textstorleken i detta block kommer då sektionen bli bredare? Vad händer om man har många olika textstorlekar i en viss sektion?

Medlem sedan apr. 200312 679 inlägg
#2

http://www.w3schools.com/css/css_units.asp skrev:

1em is equal to the current font size. 2em means 2 times the size of the current font. E.g., if an element is displayed with a font of 12 pt, then '2em' is 24 pt. The 'em' is a very useful unit in CSS, since it can adapt automatically to the font that the reader uses

Medlem sedan feb. 200777 inlägg
#3

Tack för svaret. Så mycket förstår jag också. Men vad är "current font size" är det något sorts ursprungsmått för hela dokumentet eller är det ett mått för varje ellement? Det vore mer praktisk om det vore ett normalmått för hela dokumentet för då skulle man kunna ändra textstorleken i olika sektioner utan att de blev oproportioenellt stora i förhållande till varandra.

Medlem sedan apr. 200312 679 inlägg
#4

olarsson skrev:

Tack för svaret. Så mycket förstår jag också. Men vad är "current font size" är det något sorts ursprungsmått för hela dokumentet eller är det ett mått för varje ellement?

Har du inget mått satt i din body, så är det väl standardstorleken i webbläsaren som avgör.

Du kan ju sätta olika storlekar på olika element. Har du t.ex. satt storleken i body till 2em, så kan du bestämma att p ska ha .7em, och den storleken kommer ju då bli .7 * 2em = 1.4em.

Förstår jag dig rätt? :) (Förstår jag själv? :p)

Medlem sedan feb. 200777 inlägg
#5

Ok tack så mycket för svaret.

Man kunde tänka sig att det fanns ett standardmått för hela dokumentet och att man sedan kunde göra text i varje del större eller mindre om man ville.

Medlem sedan juli 20013 378 inlägg
#6

Hmm...

Det gör det. Det är den storlek du ställer in på body (och om den saknas, webbläsarens grundinställning - som sagt :) )

"em" är ett av de mått du kan ta till för att ändra textstorlek relativt grundinställningen, "%" är ett annat.

Tricket är att placera ut dem fiffigt mha id och/eller class på lämpliga containers. Eftersom de "ärver" från sina "föräldrar" (dvs de "containers" de ligger inpetade i (och eftersom relativa mått räknas ihop som silfver nämner).

Här är ett modifierat gammalt tvåspaltsexempel med nya typsnittsinställningar som illustrerar ett sätt du kan jobba på om du vill (kolla speciellt hur storleken på h1 skiljer sig mellan spalterna och hur det är deklarerat:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"  "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Ett av Jarvklos exempel</title>
	<style type="text/css">
	html,body {margin:0;padding:0;height:100%; font-size: 16pt}
	#main, #head, #meny, #foot {
		width:800px;
		margin:0 auto;
	}
	
	h1 {font-size: 2em;} /* dubbla storleken gentemot grundtexten i "föräldern" */

	#head {	background-color:#ee0; font-size: 2.9em}
	#meny {	background-color:#e0e; font-size: 0.5em}

	#main {	background-color:#eee; } /* sätt font-storlek antingen här, eller i mainleft/mainright - ej bägge, de räknas samman! ;) */
		#mainleft {float: left; width: 390px; font-size: 0.5em}
		#mainright {float: right; width: 390px; font-size: 1em}
		
	#foot { clear: both; background-color:#0ee; font-size: 1.8em}

	</style>

</head>

<body>
<div id="head">Head</div>
<div id="meny">Meny</div>
<div id="main">
	<div id="mainleft">
	<h1>mainleft</h1>
	Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 
	Sed ut ante a sapien venenatis euismod. 
	Ut vitae leo non tellus congue pulvinar. Vestibulum sed risus. 
	Aenean eget lectus ac dui tincidunt imperdiet. 
	Curabitur vestibulum augue in odio. Quisque eget tortor.
	</div>
	<div id="mainright">
	<h1>mainright</h1>
	Etiam hendrerit velit nec nisl. 
	Quisque et sapien eu odio aliquet vehicula. 
	Suspendisse volutpat, magna et iaculis accumsan, 
	ante purus rutrum mauris, non sodales dolor mauris et urna. 
	Nam at ligula. Vestibulum ante ipsum primis in faucibus orci
	luctus et ultrices posuere cubilia Curae; 
	Curabitur vitae justo. Nam tellus ipsum, adipiscing quis, 
	imperdiet vel, gravida id, sem. 
	Maecenas et magna nec erat tincidunt placerat. 
	Sed viverra, erat vitae euismod tristique, eros arcu molestie sem, 
	id sagittis justo urna at erat.
	</div>

	<div id="foot">Foot</div>  <!-- inuti main! -->
</div>

</body>
</html>

Testa: http://member.webforum.nu/2241/emexempel.html

Om du mekar genom att ställa in ny font-size: för body tror jag du får en känsla för hur det hänger ihop.

Lycka till :bire

Medlem sedan apr. 200312 679 inlägg
#7

jarvklo: Betyder detta att jag inte var ute och cyklade? :birp

Medlem sedan feb. 200777 inlägg
#8

...

Jaha det var ju trevligt. Tack för svaret.

Medlem sedan juli 20013 378 inlägg
#9

OT: (och ursäkta tramset)

silfver skrev:

jarvklo: Betyder detta att jag inte var ute och cyklade? :birp

Hur skall jag kunna veta var du var och vad du gjorde förutom knackade på ett tangentbord när du skrev ditt inlägg? :moose

Medlem sedan apr. 200312 679 inlägg
#10

Bah. :e

Medlem sedan mars 20021 152 inlägg
#11

olarsson skrev:

... Men vad är "current font size" ...

Det är den aktuella selektorns font-size, gäller för allt utom för font-size där 1em är förälderns font-size.

D.v.s i en paragraf med font-size 16px, får en span med fontsize 0.8em och line-height 1em en fontstorlek på 13px och en radhöjd på 13px.

Nästade em kan vara svåra att hålla reda på storleken på.

Medlem sedan okt. 20001 285 inlägg
#12

alltså .. "översätta" mått i px till em för block? funkar inte med 960px/13 = 73.84 ser inte ut som 960px för mig iaf

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head profile="http://gmpg.org/xfn/11">
	
		<meta http-equiv="pragma" content="no-cache" />
		<meta http-equiv="cache-control" content="no-cache" />
		
		<style type="text/css" id="internalStyle"><!--/*--><![CDATA[/*><!--*/
			html,body
			{
				font-size: 100.1%;
				font-family: sans-serif, verdana, arial;
				background-color: #ffffff;
				color: #333;
				margin: 0 auto;
				padding: 0;
				width: 100%;
				height: 100%;
			}
			
			div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td
			{
				margin:0;
				padding:0;
			}
			
			table
			{
				border-collapse:collapse;
				border-spacing:0;
			}
			
			fieldset,img
			{ 
				border:0;
			}
			
			address,caption,cite,code,dfn,em,strong,th,var
			{
				font-style:normal;
				font-weight:normal;
			}
			
			ol,ul
			{
				list-style:none;
			}
			
			caption,th
			{
				text-align:left;
			}
			
			h1,h2,h3,h4,h5,h6
			{
				font-size:100%;
				font-weight:normal;
			}
			
			q:before,q:after
			{
				content:'';
			}
			
			abbr,acronym
			{
				border:0;
			}
			
			/*
			--------------------------------------------------------------------------------
			Test
			--------------------------------------------------------------------------------
			*/
			
			#wrapper
			{
				padding:2em;
			}
			
			#wrapper h1
			{
				padding: 0 0 1em 0;
				font-weight:bold;
			}
			
			#div1, #div2, #div3
			{
				padding: 0;
				margin-bottom: 1em;
			}
			
			#div1 p, #div2 p, #div3 p
			{
				padding: 0.5em 1em;
			}
			
			#div1
			{
				background-color:#FF8000; width:960px;
			}
			
			#div2
			{
				background-color:#FF80C0; width:73.84em;
			}
			
			#div3
			{
				background-color:#FFcc33; width:59.90em;
			}
		/*]]>*/--></style>
		<title>CSS px / em</title>
	</head>
	<body>
		<div id="wrapper">
			<h1>Examples</h1>
			<div id="div1">
				<p>960px</p>
			</div>
			<div id="div2">
				<p>73.84em</p>
			</div>
			<div id="div3">
				<p>59.90em</p>
			</div>
			<p>In firefox, use ctrl + scrollwheel</p>
		<div>
	</body>
</html>
Medlem sedan mars 20021 152 inlägg
#13

Fuel skrev:

alltså .. "översätta" mått i px till em för block? funkar inte med 960px/13 = 73.84 ser inte ut som 960px för mig iaf

Bara om du ändrar fontstorleken till 13px, och bara i IE. ;)

Medlem sedan okt. 20001 285 inlägg
#14

joser skrev:

Bara om du ändrar fontstorleken till 13px, och bara i IE. ;)

que?

Medlem sedan mars 20021 152 inlägg
#15

1em är ju lika med "current font-size". Ditt exempel hade 100% av webbläsarens användarfont, och det är bara i IE som font satt i pixel inte kan ändras av användaren.

Medlem sedan okt. 20001 285 inlägg
#16

ehh.. hänger inte med :q jag försöker omvandla ett blocks (div) size från px till em

Medlem sedan mars 20021 152 inlägg
#17

Testa:

			#div1
			{
				background-color:#FF8000; width:960px;
			}

			#div2
			{
			  font-size:13px;
				background-color:#FF80C0; width:73.84em;
			}

			#div3
			{
			  font-size:16px;
				background-color:#FFcc33; width:59.90em;
			}
Medlem sedan okt. 20001 285 inlägg
#18

width:en är densamma

Medlem sedan okt. 20001 285 inlägg
#19

Om.. jag sätter font-size: 90.14%; i body (testade mig fram) så blir width i px/13= width i em

edit i FF iaf :bla x( va f....

Medlem sedan maj 2000444 inlägg
#20

Fuel skrev:

Om.. jag sätter font-size: 90.14%; i body (testade mig fram) så blir width i px/13= width i em

edit i FF iaf :bla x( va f....

Om jag förstår dig rätt vill du ha ett enkelt sätt att omvandla pixlar till em?

Sätt body-taggen till "font-size:62.5%;" så motsvarar 1em 10px.

141 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)