#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")
— 0element.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")
— 0element.getPropertyInt("border-spacing")
— 0element.getStyle().getProperty("webkitBorderHorizontalSpacing")
— пустая строкаelement.getPropertyInt("webkitBorderHorizontalSpacing")
— 0element.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, чтобы добавить его.