From 110cf961113af9d5386cd9ba35404161e473e39b Mon Sep 17 00:00:00 2001 From: Zhiming Wang <zmwangx@gmail.com> Date: Fri, 17 Jul 2015 21:27:52 -0700 Subject: fix line number placement Global font size in each style sheet has been tweaked very carefully so that the precise line height is very close to a whole number of pixels, so that precision alignment using em, which aligns something precise (top: 13.5em) to something inprecise (line heights, with accumulated errors due to rounding in every line), is not lost. Note that Firefox is NOT supported, since each line seems to always occupy one more pixel than the calculated line height. For some reason line numbers in the print view are still rather problematic at a page continuation. In Chrome and Safari, the first two line numbers on a new page tend to overlap, so everything afterwards are off (and on Firefox line numbers do not show up on the second page at all). Anyway, printing shouldn't be a big concern. --- pyblog | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'pyblog') diff --git a/pyblog b/pyblog index ef6f6d6e..605813ed 100755 --- a/pyblog +++ b/pyblog @@ -593,12 +593,12 @@ def _pre_tag_insert_line_numbers(soup, pre_tag): num_lines = len(pre_tag.text.split("\n")) for line_number in range(1, num_lines + 1): # line number divs will look like: - # <span class="line-number" data-line="1" style="top: 1px"><!----></span> - # <span class="line-number" data-line="2" style="top: 19px"><!----></span> + # <span class="line-number" data-line="1" style="top: 0em"><!----></span> + # <span class="line-number" data-line="2" style="top: 1.35em"><!----></span> ln_tag = soup.new_tag("span") ln_tag["class"] = "line-number" ln_tag["data-line"] = line_number - ln_tag["style"] = "top: %dpx" % ((line_number - 1) * CODE_LINE_HEIGHT + 1) + ln_tag["style"] = "top: %.2fem" % ((line_number - 1) * 1.35) # add a comment to the content of the span to suppress tidy5 # empty <span> tag warning ln_tag.append(soup.new_string("", bs4.Comment)) -- cgit v1.2.1