Image height same as width
If you're willing to use a background image then this solution will work https://codepen.io/anon/pen/jpyrwB .
This will keep a square ratio and make the image cover the whole div. It will also keep the image centered and crop the sides if the image is wider than the height.
HTML
<div class='square-box'>
<div class='square-content'></div>
</div>
CSS
.square-box{
position: relative;
width: 50%;
overflow: hidden;
}
.square-box:before{
content: "";
display: block;
padding-top: 100%;
}
.square-content{
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background-image: url(https://images.pexels.com/photos/1249588/pexels-photo-1249588.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260);
background-position: center;
background-size: 100% 100%;
background-size: cover;
}
Many of us had given you some hints in the comments, so by now you should be able to create a responsive square.
Fit the image inside the square Just in case you are missing the last part, here is how you can fit the image (with any aspect ratio) into that square. It also means that your image will be cropped if it's not squared.
Snippet:
.container {
position: relative;
width: 37%; /* The size you want */
}
.container:after {
content: "";
display: block;
padding-bottom: 100%; /* The padding depends on the width, not on the height, so with a padding-bottom of 100% you will get a square */
}
.container img {
position: absolute; /* Take your picture out of the flow */
top: 0;
bottom: 0;
left: 0;
right: 0; /* Make the picture taking the size of it's parent */
width: 100%; /* This if for the object-fit */
height: 100%; /* This if for the object-fit */
object-fit: cover; /* Equivalent of the background-size: cover; of a background-image */
object-position: center;
}
<div class="container">
<img src="https://images.pexels.com/photos/1249588/pexels-photo-1249588.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260"/>
</div>