【问题标题】:function to calculate display height of html+css计算html+css显示高度的函数
【发布时间】:2012-07-24 15:25:35
【问题描述】:

(以下问题:html columns whose width automatically changes according to their content

从一个 PHP 脚本,我打印了一些 HTML 代码,我想知道结果的高度是多少(用于分页计算)。假设我有以下输入:

  • 我要打印的$html代码(字符串);
  • $css 代码,包含 HTML 中出现的所有项目的字体和大小的完整详细信息(字符串);
  • 所有相关的浏览器设置(字体、大小等);
  • 页面 $width,以像素 (int) 为单位。

我创建了一个如下所示的页面:

<html>
  <head>
    <style>$css</style>
  </head>
  <body style='width:$width'>
    $html
  </body>
</html>

我想知道,在 PHP 脚本中,从页面顶部到文本底部的像素数。

编辑:我需要在服务器端执行此操作,在显示内容之前,因为我使用它来计算要放置的内容。例如,如果内容太高,我可能会决定只放前半部分,等等。

另一个可能的用途是计算达到特定高度所需的宽度。比如我可能会尝试把它放在一个宽度为 200px 的 div 中,但结果可能太高了;然后我尝试宽度 400px 等,直到我找到给出我想要的高度的宽度。

【问题讨论】:

  • 用jQuery岂不是更简单?
  • 我需要在服务器端做这个,因为我用它来计算要放什么内容。例如,如果内容太高,我可能决定只放前半部分,等等。
  • @ErelSegalHalevi 您不需要它是服务器端的。只需在 JavaScript 中获取高度并将 AJAX 请求发送到包含高度信息的 PHP 脚本即可。
  • 好的,但是到那时,用户已经看到了内容......我可能需要不止一次迭代 - 将内容放在宽度为 800px 的 div 中并测量高度,然后尝试宽度600px 并测量高度等,直到找到最佳宽度。如果我使用客户端测量,用户将看到每次迭代中闪烁的内容。我需要它是服务器端,以便用户只能看到最终结果。

标签: php html css


【解决方案1】:

HTML 呈现在客户端完成,而 PHP 驻留在服务器端。
因此,PHP 无法从服务器端确定 HTML 元素的高度。

但是,您可以使用 JavaScript 来获得它。
见:Get full height of a clipped DIV

【讨论】:

  • "PHP 无法从服务器端确定 HTML 元素的高度" - 当然 PHP 无法直接访问 HTML 渲染,但必须有一种方法可以间接进行计算。毕竟,这是确定性的——所有数据都在那里。
  • 那里有什么数据?服务器端只能使用文本形式的 HTML 标签。
  • Javascript 解决方案是不够的,因为它只计算高度 after 它已显示,我需要知道高度 before 我显示它,看我的编辑。
  • 这是不可能的。您必须在客户端执行此操作,并可能通过 AJAX 反馈。
  • “只有文本形式的 HTML 标签”——我也有完整的 CSS。所以,就像浏览器(这是一个计算机程序)可以接受 HTML 和 CSS 并决定如何显示它一样,PHP 程序也是如此。
【解决方案2】:

如果您想创建自己的服务器端浏览器,则会遇到加载时间问题。如果这不是一个大问题,您可以解析 css(类似这样:link)以找出您的 $html 变量中使用的填充、边距、字体、行高等,然后,如果您知道字体细节,您可以尝试计算内容高度(自然给出,来自用户输入的浏览器)。

【讨论】:

  • 如果你知道浏览器设置和css样式,找出一个字母的宽高不是什么大问题
  • 加载时间不是问题。您是否知道已经进行计算的现有函数?
  • 我认为它不会是一个函数。这将是一个很大的库。也许this 会帮助你
  • 不错的库,但是它不做任何与显示相关的计算,它只改变 URL。
【解决方案3】:

您也许可以使用TCPDF class 来执行此操作。根据this thread,该类对 CSS 的支持有限,但如果支持您的样式,则想法是在 writeHTML 方法调用之前和之后检查当前位置(GetX() 和 GetY())。

【讨论】:

    猜你喜欢
    • 2015-09-24
    • 2013-11-26
    • 2018-04-02
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多