将不同尺寸的图像居中的通用方法
Generic way to center images of different sizes
我要显示一系列发射,我想将每个发射的图像居中
但是图像可以有不同的尺寸,我不想让它们变形
#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>
第二个很好,第一个不正确,我想将它垂直居中到 div,问题是我需要通用的解决方案,它可以应用于所有图像,好的或'bad'尺寸
您似乎没有相同尺寸的图片,所以可以将图片用作背景...
您还使用了 vertical-align:center
,对于 vertical-align
...[Reference Link][=26 无效 属性 =]
vertical-align
也适用于 display:table-cell
和 display:inline-block
...所以这里不需要使用...
另外我在card_emission_circle
class中使用了Flexboxdisplay:flex
所以里面的item可以占满width
and height
of parent just use flex:1
to the inner item...另一种方法是使用 width:100%
and height:100%
to the inner item without using flex
堆栈片段
#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>
这里有两个选项:
- 使用
top: 50%; transform: translateY(-50%);
方法
- 使用
flex
和 align-items
- 首选,imo
方法如下:
1. 它需要在 #emission .card_emission_image_circle
元素中添加一个 height: 100%
。
然后我们可以给 #emission .card_emission_image_circle img
元素 top: 50%; transform: translateY(-50%)
处理。
#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. 这是一个更简单的更改,只需要添加以下样式:
#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>
我要显示一系列发射,我想将每个发射的图像居中 但是图像可以有不同的尺寸,我不想让它们变形
#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>
第二个很好,第一个不正确,我想将它垂直居中到 div,问题是我需要通用的解决方案,它可以应用于所有图像,好的或'bad'尺寸
您似乎没有相同尺寸的图片,所以可以将图片用作背景...
您还使用了 vertical-align:center
,对于 vertical-align
...[Reference Link][=26 无效 属性 =]
vertical-align
也适用于 display:table-cell
和 display:inline-block
...所以这里不需要使用...
另外我在card_emission_circle
class中使用了Flexboxdisplay:flex
所以里面的item可以占满width
and height
of parent just use flex:1
to the inner item...另一种方法是使用 width:100%
and height:100%
to the inner item without using flex
堆栈片段
#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>
这里有两个选项:
- 使用
top: 50%; transform: translateY(-50%);
方法 - 使用
flex
和align-items
- 首选,imo
方法如下:
1. 它需要在 #emission .card_emission_image_circle
元素中添加一个 height: 100%
。
然后我们可以给 #emission .card_emission_image_circle img
元素 top: 50%; transform: translateY(-50%)
处理。
#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. 这是一个更简单的更改,只需要添加以下样式:
#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>