Слишком большой размер элемента (только в Chrome)

#javascript #html #jquery #css

Вопрос:

Я пытаюсь отобразить HTML — элемент на холсте. Для этого я заранее рассчитываю размер HTML-элемента, добавляя его в документ, получая размер, а затем удаляя его позже.

Проблема в том, что в Chrome я получаю размер, превышающий 200 пикселей по высоте. Итак, под элементом на холсте есть гигантский пробел.

Я попытался вообще не использовать настройки шрифта, проверил поля/отступы (та же проблема, даже если они удалены) и попытался использовать высоту прокрутки/смещение/высоту клиента/jQuery…все дают слишком большую высоту. Я прочитал столько других постов, сколько смог найти, и не нашел решения. Так что…надеюсь, кто-нибудь подскажет мне какие-нибудь новые идеи 🙂 В Firefox это работает идеально…

Вот код:

 function renderHTML(htmlContent, pageHeight, windowWidth, windowHeight, browserSettings, dPR) {  var containerDiv = document.createElement("div");  containerDiv.id = "container-div";  var fontSize = emToPx(parseFloat(browserSettings.plaintext.fontSize)); // This is 14px in the console  containerDiv.style.font = `${fontSize}px ${browserSettings.plaintext.fontFamily}`;  containerDiv.style.backgroundColor = "#fc0303";  containerDiv.innerHTML = htmlContent;   // Create a new HTML document to pass into drawDocument  var docToSign = document.implementation.createHTMLDocument();  docToSign.body.innerHTML = containerDiv.outerHTML;  docToSign.documentElement.style.backgroundColor = "#03fc07";   // Get size of doc  document.body.appendChild(containerDiv);  var docWidth = containerDiv.scrollWidth;  var docHeight = containerDiv.scrollHeight;  // containerDiv.parentNode.removeChild(containerDiv);  console.log("height: "   $("#container-div").height());  console.log("containerDiv.scrollHeight: "   containerDiv.scrollHeight);  console.log("containerDiv.offsetHeight: "   containerDiv.offsetHeight);  console.log("containerDiv.clientHeight: "   containerDiv.clientHeight);  console.log("docHeight: "   docHeight);   var canvas = initializeCanvas(docHeight, windowWidth, windowHeight, browserSettings, dPR, docWidth);  if (typeof canvas === "string") {  console.log(`renderHTML: Error when initializing the canvas.`);  return canvas;  }  console.log("canvas.width: "   canvas.width);  console.log("canvas.height: "   canvas.height);  ...  

Вывод в консоли выглядит так:

введите описание изображения здесь

На холсте вы можете увидеть разрыв хуууге:

введите описание изображения здесь

Красный — это фон для containerDiv , а зеленый-фон для docToSign.documentElement . Когда я добавил фон docToSign.document.body , он окрашивал не более одного элемента documentElement. Таким образом, ни один из этих элементов на самом деле не такой высокий. Откуда могли взяться лишние пробелы?

Ответ №1:

Понял! ХА! containerDiv необходимое свойство CSS display: inline-block . 4 часа на это потрачено впустую…

Комментарии:

1. Неплохо. Пожалуйста, отметьте свой ответ как «ответил», чтобы закрыть этот вопрос.

2. Я могу принять свой собственный ответ через 2 дня.

3. Ты можешь сделать это сейчас.