Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Вычислить реальную ширину элемента без его отрисовки (https://javascript.ru/forum/dom-window/14282-vychislit-realnuyu-shirinu-ehlementa-bez-ego-otrisovki.html)

archytector 10.01.2011 00:21

Вычислить реальную ширину элемента без его отрисовки
 
Итак, изначальная задача:
Есть таблица из двух колонок. Необходимо ширину первой поставить по максимальному контенту, но не более 50%. Контент может представлять собой или
<div class="some_style">Text</div>

или
<div class="some_style"> 
   <img class="some_style_2" src="/images/image.gif" id="some_id"> 
   <div class="some_style_3" id="some_id_2">Text</div> 
</div>

Таким образом задача преобразуется в:
Необходимо с учётом используемых стилей посчитать ширину контента в пикселях. На просторах и-нета было найдено решение, что мы отрисовываем невидимый span, содержащий копию этого элемента и берём его размер. Начальство сказало, что это хакерство, и надо писать собственную функцию, вычисляющую размер. Главная проблема, как я это себе представляю, это вычислить ширину надписи, потому что все границы, отступы и прочее из стилей извлечь можно.
Кто может чего посоветовать на эту тему?

Gvozd 10.01.2011 00:29

Цитата:

Сообщение от archytector
Начальство сказало, что это хакерство, и надо писать собственную функцию, вычисляющую размер.

объясни им, что они ошибаются, и это наиболее верное решение.
как раз таки то, что они просят - это хакерство.

правда, незачем создавать невидимый элемент, если уже есть на странице видимый, у которого можно все узнать

dmitriymar 10.01.2011 00:41

Поищи ,была на форуме уже тема узнать длину текста в пикселях

x-yuri 10.01.2011 01:39

Цитата:

Сообщение от archytector
Необходимо ширину первой поставить по максимальному контенту, но не более 50%

надо максимально ужать контент по ширине? <ширина первого столбца> = max(<ширина изображения>, <ширина слова>) ?

а вообще, исходя из того, что ты сказал, начальство просто провоцирует тебя на хакерские решения. Раз оно такое умное, я думаю ему стоит для начала ознакомиться с алгоритмом определения ширины столбцов

для нормального решения проблемы тебе надо показать таблицу с реальной информацией (без корректировок ширины) и сказать, что не нравится начальству в получившемся результате

Vulkan 10.01.2011 08:13

А что обычный offsetWidth не подойдёт?
Кликните по тексту в примере ниже:
<span onclick="alert(this.offsetWidth+'px');">Текст</span>

archytector 11.01.2011 22:17

К сожалению я забыл уточнить, что используется свой достаточно сложный фреймворк, поэтому и есть необходимость узнать ширину текста + картинки. Настройкой css тут не обойтись.
To Vulkan: данное поле покажет ширину отображаемой части. Но текст может быть обрезан за счёт "overflow: hidden;"
В данный момент пытаюсь реализовать вышеуказанная, используя canvas.measureText() и плюсуя отступы и границы из стилей. Пока не очень работает

x-yuri 11.01.2011 22:33

Цитата:

Сообщение от archytector
данное поле покажет ширину отображаемой части. Но текст может быть обрезан за счёт "overflow: hidden;"
В данный момент пытаюсь реализовать вышеуказанная, используя canvas.measureText() и плюсуя отступы и границы из стилей. Пока не очень работает

мышки резались, кололись, но продолжали есть кактус...

ksa 12.01.2011 09:26

Цитата:

Сообщение от archytector
Есть таблица из двух колонок. Необходимо ширину первой поставить по максимальному контенту, но не более 50%.

Эти 50% от чего исчисляются? От ширины всей таблицы?


Часовой пояс GMT +3, время: 06:30.