Узнайте текущее расстояние между границами элементов таблицы в GWT 2.8.2

#css #html-table #gwt

Вопрос:

У меня есть элемент , созданный с помощью DOM.createTable() , который создает простой <table> элемент без cellspacing . Когда я просматриваю этот элемент в Chrome, я вижу, что он имеет стиль по умолчанию border-spacing: 2px , который взят из таблицы стилей агента пользователя. И в некоторых моих темах приложений это значение было переопределено border-spacing: 0 . Вычисленные стили для элемента не отображаются border-spacing , но есть -webkit-border-horizontal-spacing: 2px (или 0 при использовании переопределяющей темы), которая указывает на border-spacing стиль.

Мне любопытно, как я мог бы проверить во время выполнения, каково текущее значение интервала?

Вот некоторые из моих попыток вывести значение на консоль (в частности, первый набор довольно очевиден, так как я еще не звонил setCellSpacing -если бы я это сделал, первый вариант, конечно, вернул бы это значение).:

  • ((TableElement) element.cast()).getCellSpacing() — пустая строка
  • element.getStyle().getProperty("cellspacing") — не определено
  • element.getPropertyInt("cellspacing") — 0
  • element.getStyle().getProperty("border-spacing") Error: java.lang.AssertionError: The style name 'border-spacing' should be in camelCase format
  • element.getStyle().getProperty("borderSpacing") — пустая строка
  • element.getPropertyInt("borderSpacing") — 0
  • element.getPropertyInt("border-spacing") — 0
  • element.getStyle().getProperty("webkitBorderHorizontalSpacing") — пустая строка
  • element.getPropertyInt("webkitBorderHorizontalSpacing") — 0
  • element.getPropertyInt("-webkit-border-horizontal-spacing") — 0

Эти значения не меняются , использую ли я border-collapse: collapse или border-collapse: separate , но, конечно, только последнее фактически отображает интервал. Вычисленное -webkit-border-horizontal-spacing значение также не меняется ни в том, ни в другом случае.

Если я попробую это в Firefox, у него, естественно, не будет стиля webkit или даже border-spacing стиля по умолчанию, но если я установлю его в тему, он отобразит border-spacing себя в разных стилях. Все еще не дал мне никаких полезных значений с неполным выбором вызовов, перечисленных выше.

Я явно упускаю здесь что-то довольно простое.

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

1. Возможно, вы пытаетесь прочитать значение интервала слишком рано, до table того, как оно будет фактически отображено. Попробуйте использовать отложенное чтение: com.google.gwt.core.client.Scheduler.get().scheduleDeferred(...); .

2. Это хорошая мысль, но печать привязана к нажатию кнопки, и я могу печатать offsetWidth для одного и того же элемента просто отлично.

Ответ №1:

Вы можете попробовать использовать elemental2, чтобы получить элемент в виде HTMLElement, затем получить его CssStyleDecleration, а затем получить значение свойства

 elemental2.dom.HTMLElement element = //get the element as elemental2 HTML element
String propertyValue = element.style.getPropertyValue("border-spacing");
 

обязательно используйте версию elemental2, которая работает с gwt 2.8.2, если style свойство HTMLElement недоступно для этой версии elemental2, вы всегда можете вручную написать JsInterop, чтобы добавить его.