Reputation: 54148
I got a series of emission to show , and I want to center the image of each but images can have different sizes and I don't want to deform them
#emission .card_emission_container_circle {
padding: 30px;
width: 350px;
height: 350px;
position: relative;
text-align: center;
margin-bottom: 20px;
}
#emission .card_emission_circle {
box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19) !important;
text-align: center;
transition: box-shadow 0.3s;
border-radius: 50%;
width: 300px;
height: 300px;
}
#emission .card_emission_circle:hover {
box-shadow: 0 12px 16px 0 rgba(216, 63, 65, 1), 0 17px 50px 0 rgba(216, 63, 65, 1) !important;
}
#emission .card_emission_image_circle img {
border-radius: 50%;
max-width: 300px;
max-height: 300px;
}
#emission .card_emission_container_circle a {
text-decoration: none;
color: rgba(37, 39, 51, 0.9);
width: 300px;
height: 300px;
}
#emission .card_emission_descript_circle {
border-radius: 10%;
z-index: 2;
padding: 0.01em 16px;
text-align: center;
overflow-y: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
position: absolute;
top: 100px;
opacity: 0;
width: 300px;
height: 300px;
}
#emission .card_emission_descript_circle a {
text-decoration: none;
color: rgba(37, 39, 51, 0.9);
width: 300px;
height: 300px;
}
<div id="emission">
<div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
<a class="ajax" href="./contentEmission.php?chrid=7">
<div class="card_emission_circle">
<div class="card_emission_image_circle">
<img src="https://www.chassimages.com/mag/wp-content/uploads/2017/02/ImageJour-ThomasMeunier-300x160.jpg" alt="Image de l'émission">
</div>
<div class="card_emission_descript_circle">
<p>Description</p>
</div>
</div>
<div class="card_emission_title_circle">
<h3>Title</h3>
</div>
</a>
</div>
<div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
<a class="ajax" href="./contentEmission.php?chrid=7">
<div class="card_emission_circle">
<div class="card_emission_image_circle">
<img src="https://www.france.tv/image/carre/300/300/0/9/9/b5b0b7bd-b4ed2457c172bf7c0abd9e904aff7f5f1a0fea5d60eca094df1dd476b0c6a990.jpg" alt="Image de l'émission">
</div>
<div class="card_emission_descript_circle">
<p>Description</p>
</div>
</div>
<div class="card_emission_title_circle">
<h3>Title</h3>
</div>
</a>
</div>
</div>
The second is good, the first one is incorrect and I would like to center it vertically into its div, the problem is that I need generic solution, which can be applied to all images, good or 'bad' size
Upvotes: 0
Views: 77
Reputation: 16855
It look like you don't have images with same size so can use the images as background...
Also you have used vertical-align:center
which is invalid property for the vertical-align
...[Reference Link]
Also vertical-align
works with display:table-cell
and display:inline-block
...so no need to use here...
Also I have used Flexbox display:flex
in card_emission_circle
class so that inner item can take full width
and height
of parent just using flex:1
to the inner item...another approach is use width:100%
and height:100%
to the inner item without using flex
Stack Snippet
#emission .card_emission_container_circle {
padding: 30px;
width: 350px;
height: 350px;
position: relative;
text-align: center;
margin-bottom: 20px;
}
#emission .card_emission_circle {
box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19) !important;
text-align: center;
transition: box-shadow 0.3s;
border-radius: 50%;
width: 300px;
height: 300px;
display: flex;
}
#emission .card_emission_circle:hover {
box-shadow: 0 12px 16px 0 rgba(216, 63, 65, 1), 0 17px 50px 0 rgba(216, 63, 65, 1) !important;
}
#emission .card_emission_container_circle a {
text-decoration: none;
color: rgba(37, 39, 51, 0.9);
width: 300px;
height: 300px;
}
.card_emission_image_circle {
flex: 1;
border-radius: 50%;
background-size: cover;
background-position: center center;
}
<div id="emission">
<div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
<a class="ajax" href="./contentEmission.php?chrid=22">
<div class="card_emission_circle">
<div class="card_emission_image_circle" style="background-image:url(https://www.chassimages.com/mag/wp-content/uploads/2017/02/ImageJour-ThomasMeunier-300x160.jpg)">
</div>
</div>
</a>
</div>
<div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
<a class="ajax" href="./contentEmission.php?chrid=22">
<div class="card_emission_circle">
<div class="card_emission_image_circle" style="background-image:url(https://www.france.tv/image/carre/300/300/0/9/9/b5b0b7bd-b4ed2457c172bf7c0abd9e904aff7f5f1a0fea5d60eca094df1dd476b0c6a990.jpg)">
</div>
</div>
</a>
</div>
</div>
Upvotes: 1
Reputation: 62753
Two options here:
top: 50%; transform: translateY(-50%);
methodflex
with align-items
- preferred, imoHere are the methods:
1. It will require adding a height: 100%
to the #emission .card_emission_image_circle
element though.
Then we can give the #emission .card_emission_image_circle img
element the top: 50%; transform: translateY(-50%)
treatment.
#emission .card_emission_image_circle {
height: 100%;
}
#emission .card_emission_image_circle img {
position: relative;
top: 50%;
transform: translateY(-50%);
border-radius: 50%;
max-width: 300px;
max-height: 300px;
}
#emission .card_emission_container_circle {
padding: 30px;
width: 350px;
height: 350px;
position: relative;
text-align: center;
margin-bottom: 20px;
}
#emission .card_emission_circle {
box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19) !important;
text-align: center;
transition: box-shadow 0.3s;
border-radius: 50%;
width: 300px;
height: 300px;
position: relative;
}
#emission .card_emission_circle:hover {
box-shadow: 0 12px 16px 0 rgba(216, 63, 65, 1), 0 17px 50px 0 rgba(216, 63, 65, 1) !important;
}
#emission .card_emission_image_circle {
height: 100%;
}
#emission .card_emission_image_circle img {
position: relative;
top: 50%;
transform: translateY(-50%);
border-radius: 50%;
max-width: 300px;
max-height: 300px;
}
#emission .card_emission_container_circle a {
text-decoration: none;
color: rgba(37, 39, 51, 0.9);
width: 300px;
height: 300px;
}
#emission .card_emission_descript_circle {
border-radius: 10%;
z-index: 2;
padding: 0.01em 16px;
text-align: center;
overflow-y: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
position: absolute;
top: 100px;
opacity: 0;
width: 300px;
height: 300px;
}
#emission .card_emission_descript_circle a {
text-decoration: none;
color: rgba(37, 39, 51, 0.9);
width: 300px;
height: 300px;
}
<div id="emission">
<div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
<a class="ajax" href="./contentEmission.php?chrid=7">
<div class="card_emission_circle">
<div class="card_emission_image_circle">
<img src="https://www.chassimages.com/mag/wp-content/uploads/2017/02/ImageJour-ThomasMeunier-300x160.jpg" alt="Image de l'émission">
</div>
<div class="card_emission_descript_circle">
<p>Description</p>
</div>
</div>
<div class="card_emission_title_circle">
<h3>Title</h3>
</div>
</a>
</div>
<div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
<a class="ajax" href="./contentEmission.php?chrid=7">
<div class="card_emission_circle">
<div class="card_emission_image_circle">
<img src="https://www.france.tv/image/carre/300/300/0/9/9/b5b0b7bd-b4ed2457c172bf7c0abd9e904aff7f5f1a0fea5d60eca094df1dd476b0c6a990.jpg" alt="Image de l'émission">
</div>
<div class="card_emission_descript_circle">
<p>Description</p>
</div>
</div>
<div class="card_emission_title_circle">
<h3>Title</h3>
</div>
</a>
</div>
</div>
2. This is bit of a simpler change, and only requires adding the following style:
#emission .card_emission_image_circle {
height: 100%;
display: flex;
align-items: center;
}
#emission .card_emission_container_circle {
padding: 30px;
width: 350px;
height: 350px;
position: relative;
text-align: center;
margin-bottom: 20px;
}
#emission .card_emission_circle {
box-shadow: 0 12px 16px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19) !important;
text-align: center;
transition: box-shadow 0.3s;
border-radius: 50%;
width: 300px;
height: 300px;
}
#emission .card_emission_circle:hover {
box-shadow: 0 12px 16px 0 rgba(216, 63, 65, 1), 0 17px 50px 0 rgba(216, 63, 65, 1) !important;
}
#emission .card_emission_image_circle {
height: 100%;
display: flex;
align-items: center;
}
#emission .card_emission_image_circle img {
border-radius: 50%;
max-width: 300px;
max-height: 300px;
}
#emission .card_emission_container_circle a {
text-decoration: none;
color: rgba(37, 39, 51, 0.9);
width: 300px;
height: 300px;
}
#emission .card_emission_descript_circle {
border-radius: 10%;
z-index: 2;
padding: 0.01em 16px;
text-align: center;
overflow-y: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
position: absolute;
top: 100px;
opacity: 0;
width: 300px;
height: 300px;
}
#emission .card_emission_descript_circle a {
text-decoration: none;
color: rgba(37, 39, 51, 0.9);
width: 300px;
height: 300px;
}
<div id="emission">
<div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
<a class="ajax" href="./contentEmission.php?chrid=7">
<div class="card_emission_circle">
<div class="card_emission_image_circle">
<img src="https://www.chassimages.com/mag/wp-content/uploads/2017/02/ImageJour-ThomasMeunier-300x160.jpg" alt="Image de l'émission">
</div>
<div class="card_emission_descript_circle">
<p>Description</p>
</div>
</div>
<div class="card_emission_title_circle">
<h3>Title</h3>
</div>
</a>
</div>
<div class="card_emission_container_circle grid-4 grid-t-6 grid-m-12">
<a class="ajax" href="./contentEmission.php?chrid=7">
<div class="card_emission_circle">
<div class="card_emission_image_circle">
<img src="https://www.france.tv/image/carre/300/300/0/9/9/b5b0b7bd-b4ed2457c172bf7c0abd9e904aff7f5f1a0fea5d60eca094df1dd476b0c6a990.jpg" alt="Image de l'émission">
</div>
<div class="card_emission_descript_circle">
<p>Description</p>
</div>
</div>
<div class="card_emission_title_circle">
<h3>Title</h3>
</div>
</a>
</div>
</div>
Upvotes: 1