文字和图片垂直居中

一、文字垂直居中

习惯性的我们想对文字进行垂直居中,首先想到的是设置line-height与height相等

<div style="width:300px;height:150px;line-height:150px;border:1px solid red">
      我是垂直居中位置,我就这么帅!
</div>

效果如图:

但是如果出现多行文字效果就...

<div style="width:300px;height:150px;line-height:150px;border:1px solid red">
      我是垂直居中多行文字,我就这么帅!
      我是垂直居中多行文字,我就这么帅!
</div>

立刻就不帅了!!

然后就想到了控制垂直的属性vertical-align:middle;

但是加上去之后好像一点效果也没有

vertical-align:middle直接用是无效的,当它放在table里面的tr效果就实现了

基于这个原理,只要把div的display属性改成table-cell就可以了

<style>
    .out_box{
        display:table-cell; 
        width:550px; 
        height:1em; 
        padding:0 0.1em; 
        border:4px solid red; 
        color:#069; 
        font-size:10em; 
        vertical-align:middle;
    }
    .inner_word{
        display:inline-block; 
        font-size:0.1em; 
    }
</style>
<div class="out_box">
    <span class="inner_word">我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字我是多行文字</span>
</div>

效果如下图

这里要说一下的是字体大小用了em,out_box设置了font-size:10em; height的高度就字体大小的1.14倍

2016.1.12

问题:当使用float后垂直居中效果失效,即vertical-align:middle失效,正研究解决方法。

 二、图片垂直居中

来先看看效果

效果还是挺满意的(效果为火狐与ie10)

<style>
        .out_box{
            display: table-cell;
            width:550px; 
            height:300px; 
            border:4px solid #beceeb; 
            color:#069; 
            vertical-align: middle;
        }
        .inner_word{
            width:100px;
            display:block;
            margin: 0 auto;
            border:1px solid black;
        }
    </style>
     <div class="out_box">
        <img src='img/male.png' class="inner_word">
     </div>

上面的效果,其实也没有什么好说的,水平居中用了margin:0 auto;稍微要注意一下的是img默认的display为inline-block;所以这里要设置一下display:block;

今天刚好看到另外一种很实用的居中方法:

① 透明gif图片+背景定位

效果:

<style>
        .center_box li{
            width:1em; 
            height:1em; 
            padding:0.1em; 
            margin:0 0.1em 0 0; 
            font-size:128px; 
            float:left; 
            border:1px solid #beceeb;
            list-style: none;
        }
        .center_box li img{
            display:block; 
            width:100%; 
            height:100%; 
            background-repeat:no-repeat; 
            background-position:center;
        }
       <style>
       <ul class="center_box">
         <li>
          <img src="./img/pixel.gif" style="background-image:url(img/male.png);border:1px solid red" />
        </li>
        <li>
          <img src="./img/pixel.gif" style="background-image:url(img/male.png);border:1px solid black" />
        </li>
        <li>
          <img src="./img/pixel.gif" style="background-image:url(img/male.png);" />
        </li>
      </ul>
这里利用了background-position:center实现图片居中显示。这是个很实用也是很聪明的办法,对于维护控制成本都很不错。微软必应图片搜索的图片排列就是使用的这种方法。
方法的原理很简单,使用一个透明的gif图片做覆盖层,高宽拉伸至所需要的大小,然后给这个gif图片一个background-position:center center的属性。而background-image建议写在页面上,因为实际项目中,这肯定是个动态的URL地址,css文件似乎不支持动态URL地址。

② display:table-cell和文字大小控制居中

作者原版的代码

 <style>
    .zxx_align_box_4 li{
            float:left; 
            margin-right:13px;
            list-style:none;
            border:1px solid red;
            padding:5px;
        }
    .zxx_align_box_4 li div{
        display:table-cell; 
        width:144px; 
        height:144px; 
        border:1px solid #beceeb; 
        font-size:118px; 
        text-align:center; 
        vertical-align:middle;
    }
    .zxx_align_box_4 li div img{
        vertical-align:middle;
    }
    </style>
 <ul class="zxx_align_box_4 fix">
    <li>
        <div><img src="http://image.zhangxinxu.com/image/study/s/s128/mm1.jpg" /></div>
    </li>
</ul>

效果如图:

不知道为什么没有居中,测试了几乎所有浏览器,效果都一样,然后决定还是换回上面用的margin:0 auto 来控制

  .zxx_align_box_4 li{
            float:left; 
            margin-right:13px;
            list-style:none;
            border:1px solid red;
            padding:5px;
        }
    .zxx_align_box_4 li div{
        display:table-cell; 
        width:144px; 
        height:144px; 
        border:1px solid #beceeb; 
        font-size:118px; 
        vertical-align:middle;
    }
    .zxx_align_box_4 li div img{
        display:block;
        margin:0 auto;
    }

效果出来了

③ display:inline-block和文字大小控制居中

原作者的这种方法,利用vertical-align:middle,垂直居中,我就是实现不了(我做出来的效果都是如上)

④ 使用空白图片实现垂直对齐

.zxx_align_box_6 li{
        height:128px; 
        width:150px; 
        padding:13px 0; 
        float:left; 
        margin-right:10px; 
        border:1px solid #beceeb; 
        text-align:center; 
        font-size:0;
    }
    .zxx_align_box_6 li .alpha_img{
        height:100%; width:1px; 
        vertical-align:middle;
    }
    .zxx_align_box_6 li .show_img{
        vertical-align:middle;
    }
 <ul class="zxx_align_box_6 fix">
    <li>
        <img class="show_img" src="./img/male.png" />
        <img class="alpha_img" src="../image/pixel.gif" />
    </li>
</ul>

效果

一句话,将要显示的图片与一张透明的高度100%,宽度1像素的透明图片vertical-align:middle对齐。

其核心原理其实与第二种利用font-size大小实现IE下图片垂直居中是一致的。将font-size设置得很大,目的是撑开IE下默认文字空间的高度,其性质类似于空格,然后通过vertical-align:middle属性让图片与这个高高的空白空格空间垂直居中对齐;而这里将这个看不见的文字空间实例成一张透明的gif图片,高度可以轻松设置为外部标签的高度,然后通过vertical-align:middle对齐,就实现效果了,在各个浏览器下都是一样的表现,不需要担心什么兼容性的问题。而且代码很简单,很易懂,想出错都难!

 

原作者链接:http://www.zhangxinxu.com/study/200908/img-text-vertical-align.html

转载于:https://www.cnblogs.com/waisonlong/p/5070651.html

### 回答1: 想要将图片文字垂直居中,需要使用一些 CSS 技巧。 对于图片,可以在其父元素上设置 display: flex 和 align-items: center,即可实现图片垂直居中。对于文字,则需要将其包裹在一个 div 元素内,设置这个 div 元素的 line-height 等于其父元素的高度,即可让文字垂直居中。 具体步骤如下: 1. 设置图片父元素属性 ``` .img-container { display: flex; align-items: center; } ``` 2. 设置文字父元素属性 ``` .text-container { height: 100px; line-height: 100px; } ``` 其中,text-container 的高度需要与其父元素相同,即实现文字垂直居中。 最后,将图片文字分别放进各自的容器内,然后将两个容器整合在一起,即可实现图片文字垂直居中效果。 以上就是使用 CSS 实现图片文字垂直居中的方法。 ### 回答2: 在网站开发过程中,经常需要将图片文字在某一个容器中进行垂直居中,本文将介绍两种常用的方法。 方法一:使用 flex 布局 Flexbox 布局是现代网页设计中常用的布局之一,主要用于对容器中的子元素进行定位和排序。要使用 flex 布局进行图片文字垂直居中,需要将容器的 display 属性设置为 flex,在子元素上使用 align-items 和 justify-content 来实现垂直和水平方向的居中。 例如,下面的代码段将一个容器 div 内的图片文字进行垂直居中: ```html <div class="container"> <img src="image.png" alt="图片"> <p>Lorem ipsum dolor sit amet</p> </div> ``` ```css .container { display: flex; align-items: center; /* 控制垂直居中 */ justify-content: center; /* 控制水平居中 */ } ``` 方法二:使用绝对定位 另一种实现图片文字垂直居中的方法是使用绝对定位。此方法适用于元素有固定高度和宽度,且父元素的高度和宽度也已确定的情况下。 下面的代码段将一个容器 div 中的图片文字进行垂直居中: ```html <div class="container"> <img src="image.png" alt="图片"> <p>Lorem ipsum dolor sit amet</p> </div> ``` ```css .container { position: relative; /* 定位父元素 */ height: 300px; /* 设定父元素高度 */ width: 300px; /* 设定父元素宽度 */ } .container img, .container p { position: absolute; /* 针对子元素设置绝对定位 */ top: 50%; /* 设定向上偏移50% */ left: 50%; /* 设定向左偏移50% */ transform: translate(-50%,-50%); /* 根据子元素自身的高度宽度进行微调 */ } ``` 总结 以上两种方法均可实现图片文字在父容器中的垂直居中,具体使用哪种方法取决于实际情况。通过灵活运用这些方法,可以在网站开发过程中更好地实现页面布局效果。 ### 回答3: 在前端开发中,我们经常会遇到将文本和图片垂直居中的需求。这种需求看似简单,但却不容易实现。下面我将介绍几种实现的方法。 1. 使用 Flexbox Flexbox 是 CSS3 中一个非常强大的布局方式。我们可以使用 align-items 和 justify-content 属性将内容垂直居中。 ```CSS .parent { display: flex; align-items: center; /* 垂直居中 */ justify-content: center; /* 水平居中 */ } ``` 在上面的代码中,我们将父元素设置为 flexbox 布局,并使用 align-items 和 justify-content 属性将内容(图片和文本)垂直和水平居中。 2. 使用 table-cell table-cell 布局方式可以实现垂直居中文本和图片。 ```CSS .parent { display: table-cell; width: 300px; /* 确定父元素宽度 */ height: 300px; /* 确定父元素高度 */ vertical-align: middle; /* 垂直居中 */ text-align: center; /* 水平居中 */ } .child { display: inline-block; /* 防止默认的块级元素 */ vertical-align: middle; /* 垂直居中 */ } ``` 在上面的代码中,我们将父元素设置为 table-cell 布局方式,并设置宽度和高度来确定父元素的大小。我们还使用 vertical-align 和 text-align 属性将内容垂直和水平居中。 3. 使用绝对定位 我们可以使用绝对定位来实现垂直居中。 ```CSS .parent { position: relative; /* 确定父元素为相对定位 */ width: 300px; /* 确定父元素宽度 */ height: 300px; /* 确定父元素高度 */ } .child { position: absolute; /* 使子元素脱离文档流 */ top: 50%; /* 设置子元素顶部位置为父元素高度的一半 */ left: 50%; /* 设置子元素左侧位置为父元素宽度的一半 */ transform: translate(-50%, -50%); /* 将子元素向左上方移动子元素宽度的一半和高度的一半 */ } ``` 在上面的代码中,我们将父元素设为相对定位,并设置宽度和高度来确定父元素的大小。我们还将子元素设为绝对定位,并使用 top 和 left 属性将其放置到父元素的正中央位置。最后,我们使用 transform 属性来移动子元素半个宽度和半个高度的位置,将其完美垂直居中。 通过以上的方法,我们可以很方便地将文本和图片垂直居中。根据需要选择合适的方式来达到想要的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值