Сохранить фиксированное соотношение сторон для div

#javascript #html #css #reactjs

#javascript #HTML #css #reactjs

Вопрос:

У меня есть CSS-сетка в моем приложении React. Столбцы уже имеют правильную ширину. В одну из ячеек этой сетки я хочу добавить <div> , которая поддерживает фиксированное соотношение сторон при увеличении (или укорачивании) ширины ячейки; это означает, что высота должна изменяться соответствующим образом.

Примечание: поскольку это <div> является частью повторно используемого компонента, я передаю высоту и ширину <div> в качестве встроенных стилей для maxHeight и MaxWidth. Я хочу, чтобы это работало, даже если внутри div нет содержимого, поскольку это часть последовательности анимации, и мне нужно, чтобы это пространство было свободным.

JS:

 <div className="img-container" style={{maxHeight: props.dimensions.height, maxWidth: props.dimensions.width}}>  (content goes here)  </div>
  

Затем я применяю классы CSS к «img-container», чтобы установить ширину на 100%. Также установить фон на «красный», просто чтобы посмотреть, работает ли это.

CSS:

 .img-container { width: 100%; background: red; }
  

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

Ответ №1:

ваша div структура тега указана неправильно. вам нужно вот так:

 <div className="img-container" style={{maxHeight: props.dimensions.height, maxWidth: props.dimensions.width}}>  (content goes here)  </div>
  

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

1. Ах да, извините. Это так, я ввел ошибку при переполнении стека : (

Ответ №2:

Вы можете достичь желаемых результатов, добавив дочерний div с минимальной шириной и минимальной высотой, чтобы сохранить соотношение сторон.

 <div className="img-container" style={...styles}>   
   <div className='inner-div'></div>
</div>
  

CSS

 .inner-div {
   min-height: 200px;
   min-width: 200px; 
}

//change the above values according to your requirements.
  

Ответ №3:

Найден ответ!

Давайте поработаем над моим примером, однако изменим JS и CSS как таковые, а также включим inner div с именем класса ‘img-inner’ в качестве примера.

JS:

Давайте также вставим paddingTop в качестве реквизита.

 <div className="img-container" style={{maxHeight: props.dimensions.height, maxWidth: props.dimensions.width, paddingTop: `${props.dimensions.height/props.dimensions.width*100}%`}}>  (content goes here, e.g. a div with className="img-inner")  </div>
  

CSS:

 .img-container { width: 100%, position: relative }

.img-inner { position: absolute, top: 0, bottom: 0, left: 0, right: 0 }