2017-02-17 2 views
0

В нижеприведенном фрагменте есть четыре div с 33 символами. В зависимости от ширины и обертывания слова div может принимать одну, две или три строки. Каков хороший способ рассчитать это заранее?Рассчитать, сколько строк будет использовано в div?

Причина, по которой я нуждаюсь в этом, заключается в том, что я использую компонент списка реактивов (https://bvaughn.github.io/react-virtualized/#/components/List), который принимает фиксированное значение для высоты элемента списка или функцию для вычисления высоты элемента списка в зависимости от индекса. Используя этот индекс, я могу получить текст, который будет в div, и получить ширину списка с помощью JavaScript. Из этих переменных я могу надеяться вычислить соответствующую высоту.

.p100 { 
 
    width: 100px; 
 
} 
 

 
.p150 { 
 
    width: 200px; 
 
}
<div id="div1" class="p100"> 
 
    Hello Hello Hello Hello Hello 
 
</div> 
 
<hr> 
 
<div id="div2" class="p100"> 
 
    abcd abcd abcd abcd abcd abcd 
 
</div> 
 
<hr> 
 
<div id="div3" class="p150"> 
 
    Hello Hello Hello Hello Hello 
 
</div> 
 
<hr> 
 
<div id="div4" class="p150"> 
 
    abcd abcd abcd abcd abcd abcd 
 
</div>

+0

Если вы установите ширину/высоту в 'auto', div будет достаточно большим, чтобы содержать его содержимое. –

+1

Что значит «рассчитать это заранее»? Как хранить количество строк в качестве переменной JavaScript? Или найти количество строк в CSS? – Santi

+0

Рядом с вопросом от @Santi вы могли бы также сказать, зачем вам это нужно? Возможно, есть еще одно решение исправить то, что вы после – caramba

ответ

2

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

Hi :) Автор реактивной виртуализации здесь.

Я думаю, вы должны проверить компонент CellMeasurer. Я создал его для использования, как тот, который вы описываете. Просмотрите демо-версию here и документы here.

По существу, CellMeasurer позволит отложить измерение текста до времени исполнения. List мог использовать предполагаемый размер до тех пор, пока строки, которые еще не видны.

+0

Привет, Брайан! Благодаря! Я попробую и дам вам знать в Slack, если у меня возникнут проблемы. –

+0

Как подтверждено в Slack, это сработало! –

0

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

Если это так, вы можете изменить ширину на width:auto или установить ее на 100%. Таким образом, он будет расширяться с помощью ваших «линий».

+0

Я добавил свою мотивацию. Я не могу установить ширину, она задана. –

0

По JQuery вы можете иметь ширину и высоту каждого DIV по:

$('#the-div-id').width(); 
$('#the-div-id').height(); 

и JavaScript:

document.getElementById('the-div-id').clientWidth; 
document.getElementById('the-div-id').clientHeight; 
+0

Мне нужно рассчитать, какая высота будет (в зависимости от количества текста и ширины), прежде чем делать это. –

+0

Так что я не думаю, что javascript может помочь, я думаю, он должен рассчитать на сервере. –

+0

Возможно, вы разрабатываете очень особенную вещь, иначе это не нормально, что вы хотите, и будут лучшие способы. –

Смежные вопросы