Установите высоту правой стороны, используя высоту левой стороны

#css #reactjs #semantic-ui-react

#CSS #реагирует на #семантический-пользовательский интерфейс-реагирует

Вопрос:

Я использую semanti-UI-react. Пользовательский интерфейс, которого я хочу достичь, — это модальный, который разделен по вертикали на 2 части. В левой части отображается видео, а в правой-временные метки и описания индексов видео. Моя правая сторона с индексами должна быть прокручиваемой.

 lt;Gridgt;  lt;Grid.Rowgt;  lt;Grid.Column style={{margin: '0', padding: '0'}} computer={10} mobile={16} table={16} gt;  lt;Segment raised inverted style={{ padding: '2.5rem 0'}}gt;  lt;ReactPlayer style={{margin: '0 auto'}} ref={this.ref} url={this.state.url} controls={true} playing={true}/gt;  lt;/Segmentgt;  lt;/Grid.Columngt;  lt;Grid.Column style={{margin: '0', padding: '0'}} computer={6} mobile={16} table={16}gt;  lt;Segment basic style={{overflowX: 'hidden', margin: '0 auto', height: '450px'}}gt;  lt;List relaxedgt;  {_.keys(this.props.videoMeta.timestamps).map(ts =gt; (  lt;List.Item className='clickable' onClick={() =gt; this.forward(this.props.videoMeta.timestamps[ts])}gt;  lt;List.Icon name='video' size='fullscreen' verticalAlign='middle'/gt;  lt;List.Contentgt;  lt;List.Header style={{textTransform: 'capitalize'}}gt;{ts}lt;/List.Headergt;  lt;List.Descriptiongt;{this.props.videoMeta.timestamps[ts]}lt;/List.Descriptiongt;  lt;/List.Contentgt;  lt;/List.Itemgt;  ))}  lt;/Listgt;  lt;/Segmentgt;  lt;/Grid.Columngt;  lt;/Grid.Rowgt;  lt;/Gridgt;  

Это обеспечивает вышеупомянутый пользовательский интерфейс. Но мне пришлось установить жестко заданное значение высоты в моем правом столбце сетки. Если я его не установлю, он не будет прокручиваться. Я попробовал процентные значения, но это делает мою правую сторону другой высоты по сравнению с высотой левой стороны.

Вместо жесткого кодирования, как мне установить высоту для столбца сетки с левой стороны ?

Скриншот моего пользовательского интерфейса прямо сейчас: введите описание изображения здесь

Редактировать:

Добавление к ответу ниже. Ранее я уже пробовал ту же идею гибкого дисплея, но она не сработала. Одна вещь, которую я добавил из приведенного ниже ответа, — это свойство позиции css, которое исправило гибкость отображения.

Сейчас мой код выглядит так —

 lt;Gridgt;  lt;Grid.Row style={{display: 'flex'}}gt;  lt;Grid.Column style={{margin: '0', padding: '0'}} computer={10} mobile={16} table={16}gt;  lt;Segment raised inverted style={{padding: '2.5rem 0'}}gt;  lt;ReactPlayer style={{margin: '0 auto'}} ref={this.ref} url={this.state.videoMeta.link} controls={true} playing={true}/gt;  lt;/Segmentgt;  lt;/Grid.Columngt;  lt;Grid.Column style={{margin: '0', padding: '0', overflowX: 'hidden', position: 'relative', flexGrow: 1}} computer={6} mobile={16} table={16}gt;  lt;Segment basicgt;  lt;Headergt;lt;stronggt;Timestamps:lt;/stronggt; lt;/Headergt;  lt;List relaxed style={{position: 'absolute'}}gt;  {_.keys(this.state.videoMeta.timestamps).map(ts =gt; (  lt;List.Item className='clickable' onClick={() =gt; this.forward(this.state.videoMeta.timestamps[ts])}gt;  lt;List.Icon name='video' size='fullscreen' verticalAlign='middle'/gt;  lt;List.Contentgt;  lt;List.Header style={{textTransform: 'capitalize'}}gt;{ts}lt;/List.Headergt;  lt;List.Descriptiongt;{this.state.videoMeta.timestamps[ts]}lt;/List.Descriptiongt;  lt;/List.Contentgt;  lt;/List.Itemgt;  ))}  lt;/Listgt;  lt;/Segmentgt;  lt;/Grid.Columngt;  lt;/Grid.Rowgt;  lt;/Gridgt;  

Обратите внимание на css-свойства позиции relative для тега контейнера и позиции absolute для внутреннего элемента с правой стороны. Без свойства position гибкий дисплей не работал.

Ответ №1:

У меня нет опыта работы с react или semantic-ui, но вы можете сделать это в css, используя flexbox и некоторые умные методы позиционирования. Вот простой пример, который, как мы надеемся, вы сможете адаптировать к своему собственному коду. Содержимое в левом столбце имеет фиксированный размер, а правый столбец будет одинаковой высоты, прокручиваясь, если он слишком высокий.

 .container {  display: flex; }  .right-col {  overflow-y: auto;  flex-grow: 1;  position: relative; }  .right-col ul {  position: absolute; }  /* -- The following css is just for demo purposes: -- */ .content {  height: 100px;  width: 200px;  background-color: purple; } .container {  border: 2px solid black; } .left-col {  border: 2px solid blue; } .right-col {  border: 2px solid green; } 
 lt;div class="container"gt;  lt;div class="left-col"gt;  lt;div class="content"gt;lt;/divgt;  lt;/divgt;    lt;div class="right-col"gt;  lt;ulgt;  lt;ligt;Itemlt;/ligt;  lt;ligt;Itemlt;/ligt;  lt;ligt;Itemlt;/ligt;  lt;ligt;Itemlt;/ligt;  lt;ligt;Itemlt;/ligt;  lt;ligt;Itemlt;/ligt;  lt;ligt;Itemlt;/ligt;  lt;/ulgt;  lt;/divgt; lt;/divgt; 

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

1. разве вы все еще не устанавливаете высоту левой стороны сейчас ? до 100 пикселей?

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

3. Да. Понял. Это работает. Спасибо