Браузер вычисляет высоту строки как 20.8px, т.е. 16х1.3.
Но если изменить код на line-height:1.3em; высота изменяется на 21px. Никак не пойму почему, ведь базовый шрифт же не изменяется? Может кто-то знает в чем причина в разнице этих 2-х десятых?
Думаю, тут зависит от браузера. У вас какой? Мои замеры:
у body задана line-height: 1.3:
Chrome body font-size: 16px; line-height: 20.7999992370605px; h1 font-size: 20.7999992370605px; line-height: 27.0400009155273px; p font-size: 16px; line-height: 20.7999992370605px;
FF body font-size: 16px; line-height: 20.8px; h1 font-size: 20.8px; line-height: 27.0333px; p font-size: 16px; line-height: 20.8px;
у body задана line-height: 1.3em:
Chrome body font-size: 16px; line-height: 20.7999992370605px; h1 font-size: 20.7999992370605px; line-height: 20.7999992370605px; p font-size: 16px; line-height: 20.7999992370605px;
FF body font-size: 16px; line-height: 20.8px; h1 font-size: 20.8px; line-height: 20.8px; p font-size: 16px; line-height: 20.8px;
Из этих данных видно, что браузеры немного по-разному округляют значения.
Также видно, для p (и у самого body) и при line-height: 1.3, и при line-height: 1.3em вычисленная высота строки не меняется, т.к. им не задан явный размер шрифта, и он наследуется от body.
А для h1, т.к. у него явно задан размер шрифта, вычисление высоты строки идёт от с учётом его собственного значения font-size. В случае line-height: 1.3; высота строки высчитывается как 16(px) * 1.3(em) * 1.3 = 27.04. А в случае line-height: 1.3em; высота строки 16(px) * 1.3(em) = 20.8, как вы уже сказали.