Ответ 1
На самом деле можно добиться этого с помощью этого опрятного трюка, который я нашел в этот блог
#square {
width: 100%;
height: 0;
padding-bottom: 100%;
}
Надеюсь, что поможет
Если у меня есть <div>
с относительной шириной (например, ширина: 50%), есть ли простой способ сделать его равной ширине, чем высота, не прибегая к JavaScript?
На самом деле можно добиться этого с помощью этого опрятного трюка, который я нашел в этот блог
#square {
width: 100%;
height: 0;
padding-bottom: 100%;
}
Надеюсь, что поможет
Хорошо, так что короткий ответ "нет" невозможен. Длинный ответ: "да", учитывая определенные ограничения и уступки (т.е. Дополнительная html-разметка и ограничения на то, что можно сделать).
Учитывая этот CSS:
.square {
position: relative;
margin: 20px;
display: inline-block; /* could be float */
overflow: auto; /* UPDATE: if content may overflow square */
}
.sq-setter-w {
width: 100%;
height: auto;
visibility: hidden;
}
.sq-setter-h {
width: auto;
height: 100%;
visibility: hidden;
}
.sq-content {
position: absolute;
z-index: 1;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
С помощью этого HTML:
<div class="square" style="width: 200px">
<img src="http://dummyimage.com/50x50/000/fff.gif&text=50x50" class="sq-setter-w"/>
<div class="sq-content">Here is content</div>
</div>
<div class="square" style="height: 100px">
<img src="http://dummyimage.com/50x50/000/fff.gif&text=50x50" class="sq-setter-h"/>
<div class="sq-content">Here is content</div>
</div>
<div class="extrawrapper">
<div class="square" style="width: 200px">
<img src="http://dummyimage.com/50x50/000/fff.gif&text=50x50" class="sq-setter-w"/>
<div class="sq-content">Here is content</div>
</div>
</div>
<div class="extrawrapper">
<div class="square" style="height: 100px">
<img src="http://dummyimage.com/50x50/000/fff.gif&text=50x50" class="sq-setter-h"/>
<div class="sq-content">Here is content</div>
</div>
</div>
Ключами являются:
img
является единственным элементом, который может выполнять такую пропорциональную работу, поскольку он может основывать свой размер на пропорции самого изображения).width
или height
, чтобы вы могли правильно установить класс изображения для его размера. При желании, установите width
или height
в самой img
, тогда вам не нужно беспокоиться о том, чтобы установить класс в значение 100%
. Моя демонстрация предполагала, что вы задаете размер в div-оболочке (мой .square
класс).div
вокруг img
, который управляет пропорциональным размером, вам нужно установить display: inline-block
или float
на div
(как отмечено в css выше).div
выполнял больше "блочных", вам нужно предоставить им дополнительную обертку div
, как показано на третьем и четвертом.Очевидно, что в этом решении есть много дополнительной надбавки. Поэтому во многих отношениях лучше сказать "просто использовать javascript", но я действительно хотел доказать, что это может быть сделано (по крайней мере в некоторых случаях) чисто с HTML и CSS.
Посмотрите эту скрипту для процентов, приводящих размер, с этим примером html (width
установлено значение 30%
):
<div class="square" style="width: 30%">
<img src="http://dummyimage.com/50x50/000/fff.gif&text=50x50" class="sq-setter-w"/>
<div class="sq-content">Here is content</div>
</div>
Мне нужно было добиться чего-то подобного сегодня и иметь ту же идею с изображением. Я хотел проверить другие возможности, и Google привел меня сюда.
... вам не нужен образ src
. вы можете просто использовать hash
, если хотите квадрат.
Он сохраняет запрос http.
Если вы хотите получить разные пропорции, вы должны использовать src
. Если вы хотите иметь соотношение 16: 9, изображение должно быть 16px
wide и 9px
high (как можно меньше)
img
vs. padding-bottom
Здесь сценарий, чтобы показать, насколько более совместима версия img
(может легко обрабатывать значение px
) (интервал будет изменяйте размер квадрата каждую секунду)
Если вы используете процентные значения, оба метода могут достичь того же результата, но для версии дополнений не требуется дополнительная разметка (<img src="#"/>
)
В зависимости от реализации у каждой техники есть плюсы и контрасты.
<div class="floater">
<div class="square square_noImg">
<div class="inner">Hey blue you look totally squared</div>
</div>
<div class="square square_img">
<img src="#"/>
<div class="inner">Hey red you seem off</div>
</div>
</div>
.floater {
font-size: 0;
}
.square {
position: relative;
display: inline-block;
width: 100px;
margin: 0 5px;
}
.square_noImg {
padding-bottom: 100px;
background: red;
}
.square_img {
background: blue;
}
img{
width: 100%;
height: auto;
border: 0;
visibility: hidden;
}
.inner {
position: absolute;
top: 10%;
right: 10%;
bottom: 10%;
left: 10%;
background: white;
font-size: 14px;
text-align: center;
overflow: hidden;
padding: 10px 5px;
}
Это невозможно сделать только с помощью CSS. Используя jQuery, вы можете добиться этого, выполнив
var chld = $('.child').width();
$('.child').css({'height':chld+'px'});
Проверьте рабочий пример http://jsfiddle.net/4Jnfq/
Решение только для CSS можно найти здесь в последнем обновлении "Изменение размера с содержимым".
Хотя это применимо и для кругов, вы можете удалить border-radius: 50%
, чтобы он работал для квадратов.
Не с относительными единицами типа %
, потому что они будут вычисляться относительно элемента контейнера. Но можно сделать квадрат элемента, если вы используете единицы, такие как px
или em
, чтобы установить оба измерения.
Собственный подход JS в ответ на комментарий @Dave относительно ответа @praveen-kumar:
var squareElement = function(el) {
el.style.height = el.offsetWidth + 'px';
}
и использовать его в любом месте
squareElement(document.querySelector('your-selector'));