2023-07-02 17:15:27 来源:互联网
hello大家好,我是城乡经济网小晟来为大家解答以上问题,css实现垂直居中的5种方法,css实用手册CSS垂直居中的七种方法很多人还不知道,现在让我们一起来看看吧!
我之所以整理这类专题的手册,就是CSS相关的内容实在太碎和零散,同时又夹杂着相关的兼容问题。遇到问题时,我们有时候过度依赖搜索引擎进行求证解决,解决完也没做认真的归纳和总结。再次遇到此类问题时,我们有可能还不会,这就是我归纳这个手册的目的,我会把日常工作中经常会用到的高频CSS相关方法归纳到这个手册里(有的内容可能来源其它作者),欢迎你持续的订阅和关注。
今天我们一起来梳理下CSS垂直居中的几种方法,我们在布局一个页面时,通常都会用到水平置中和垂直置中,处理水平居中很好处理,不外乎就是设定margin:0 auto;或是text-align:center;,就可以轻松解决掉水平居中的问题,但一直以来最麻烦对齐问题就是「垂直居中」,以下将介绍七种单纯利用CSS垂直置中的方式,其实一点也不难(当然跟水平居中比起来难了一点),只需要理解背后的原理就可以轻松应用。
(资料图片)
设定行高是垂直居中最简单的方式,适用于「单行」的「行内元素」 ( inline、inline-block ),例如单行的标题,或是已经设为inline-block属性的div,若将line-height设成和高度一样的数值,则内容的行内元素就会被垂直置中,因为是行高,所以会在行内元素的上下都加上行高的1/2,所以就垂直置中了!不过由此就可以看出,为什么必须要单行的行内元素,因为如果多行,第二行与第一行的间距会变超大,就不是我们所期望的效果了。CSS范例:外层div0,内容redbox,让redbox水平垂直置中。
.div0{ width:200px; height:150px; border:1px solid #000; line-height:150px; text-align:center;}.redbox{ display:inline-block; width:30px; height:30px; background:#c00;}
刚刚第一种方法,虽然是最简单的方法(适用于单行标题),不过就是只能单行,所以我们如果要让多行的元素也可以垂直居中,就须要使用伪元素的方式。在此之前,先解释一下CSS里头vertical-align这个属性,这个属性虽然是垂直置中,不过却是指在元素内的所有元素垂直位置互相置中,并不是相对于外框的高度垂直居中。(下面的CSS会造成这种样子的垂直居中)
.div0{ width:200px; height:150px; border:1px solid #000; text-align:center;}.redbox{ width:30px; height:30px; background:#c00; display:inline-block; vertical-align:middle;}.greenbox{ width:30px; height:60px; background:#0c0; display:inline-block; vertical-align:middle;}.bluebox{ width:30px; height:40px; background:#00f; display:inline-block; vertical-align:middle;}
因此,如果有一个方块变成了高度100%,那么其他的方块就会真正的垂直居中。
.greenbox{ width:30px; height:100%; background:#0c0; display:inline-block; vertical-align:middle;}
但是我们总不能每次要垂直居中,都要添加一个奇怪的div在里头吧!所以我们就要把脑筋动到「伪元素」身上,利用::before和::after添加div进到框框内,让这个「伪」div的高度100%,就可以轻松地让其他的div都居中。不过不过不过!div记得要把display设为inline-block,毕竟 vertical-align:middle 是针对行内元素,div本身是block,所以必须要做更改!
.div0::before{ content:""; width:0; height:100%; display:inline-block; position:relative; vertical-align:middle; background:#f00;}
看到这边或许会有疑问,如果今天我的div必须是block,我该怎么让它垂直居中呢?这时候就必须用到CSS特有的calc动态计算的能力,我们只要让要居中的div的top属性,与上方的距离是「50%的外框高度- 50%的div高度」,就可以做到垂直居中,至于为什么不用margin-top,因为margin抓到的是水平高度,必须要用top才会正确。
.div0{ width:200px; height:150px; border:1px solid #000;}.redbox{ position:relative; width:30px; height:30px; background:#c00; float:left; top:calc(50% - 15px); margin-left:calc(50% - 45px);}.greenbox{ position:relative; width:30px; height:80px; background:#0c0; float:left; top:calc(50% - 40px);}.bluebox{ position:relative; width:30px; height:40px; background:#00f; float:left; top:calc(50% - 20px);}
或许有些人会发现,在表格这个HTML里,要实现垂直置中是相当容易的,只需要下一行vertical-align:middle就可以,为什么呢?最主要的原因就在于table的display是table,而td的display是table-cell,所以我们除了直接使用表格之外,也可以将要垂直置中元素的父元素的display改为table-cell,就可以轻松实现,不过修改display有时候也会造成其他样式属性的连动影响,需要小心使用。
HTML:
| 表格垂直居中 |
CSS:
.like-table{ display:table-cell;}td,.like-table{ width:150px; height:100px; border:1px solid #000; vertical-align: middle;}td div,.like-table div{ width:100px; height:50px; margin:0 auto; color:#fff; font-size:12px; line-height: 50px; text-align: center; background:#c00;}.like-table div{ background:#069;}
transform是CSS3的新属性,主要用于元素的变形、旋转和位移,利用transform里头的translateY (改变垂直的位移,如果使用百分比为单位,则是以元素本身的长宽为基准),搭配元素本身的top属性,就可以做出垂直居中的效果,需要注意的地方是,子元素必须要加上position:relative,不然就会没有效果喔。
.use-transform{ width:200px; height:200px; border:1px solid #000;}.use-transform div{ position: relative; width:100px; height:50px; top:50%; transform:translateY(-50%); background:#095;}
绝对定位就是CSS里头的position:absolute,利用绝对位置来指定,但垂直置中的做法又和我们正统的绝对位置不太相同,是要将上下左右的数值都设为0,再搭配一个margin:auto,就可以办到垂直置中,不过要特别注意的是,设定绝对定位的子元素,其父元素的position必须要指定为relative喔!而且绝对定位的元素是会互相覆盖的,所以如果内容元素较多,可能就会有些问题。
.use-absolute{ position: relative; width:200px; height:150px; border:1px solid #000;}.use-absolute div{ position: absolute; width:100px; height:50px; top:0; right:0; bottom:0; left:0; margin:auto; background:#f60;}
Flexbox可谓是我们在移动端用的最多的布局方法,因为大部分现代手机浏览器都支持这个方法了。Flexbox,使用align-items或align-content的属性,轻轻松松就可以做到垂直居中的效果喔!
.use-flexbox{ display:flex; align-items:center; justify-content:center; width:200px; height:150px; border:1px solid #000;}.use-flexbox div{ width:100px; height:50px; background:#099;}
由于flexbox布局的属性众多,如何方便记忆,笔者赠送大家一张图:
上图有可能你看不清楚,此图高清无码地址,欢迎下载使用:
https://www.qianduandaren.com/demo/images/flex.png
本文内容参考来源
https://www.oxxostudio.tw/articles/201502/css-vertical-align-7methods.html
由于源文是繁体,笔者在内容上做了一些调整。
以上就是笔者整理的一些垂直居中的方法,由于垂直居中往往会动用到修改display这个属性,往往会在排版上造成一些影响,例如不该用flexbox 的地方如果用了flexbox,不该用table 的地方用了table,不该用inline-block 的地方用了inline-block,后续反而要多写许多其他的定位样式来进行修正,那就有点本末倒置了,因此如何活用这些CSS 垂直居中的方法,就要依据大家的版面结构进行灵活运用啰!^_^ 如果你有其他本文没有提及到的垂直居中方法,欢迎到留言区进行分析哟。
更多精彩内容,请关注“前端达人”公众号
本文就为大家讲解到这里,希望对大家有所帮助。
标签:
- 电信诈骗致2万余人受骗 26名涉案被告人在长春受审
- 内蒙古扎赉诺尔区除提供主副食品商店和药店外 其余暂时停业
- 黄埔海关破获案值5.2亿元走私进口木材案
- 四川省纪委监委曝光6起工程招投标领域突出问题系统治理典型案例
- 内蒙古满洲里新增本土确诊病例8例
知识
- 他把银行卡卖给骗子,“黑吃黑”“截胡”十万元
- “老司机”4S店试驾豪车 结果油门当刹车撞了
- 新开工改造城镇老旧小区5.34万个
- 发动巡河志愿者2万余名 “用心护好每一条河”
- 假客服的套路:伪装成大平台客服,层层布局引人上钩
人物
- css实现垂直居中的5种方法 css实用手册CSS垂直居中的七种方法|环球即时看
- “成都—长滩岛”7月1日复航 首班客座率达100% 环球滚动
- 【天天速看料】回顾中国女篮的夺冠一刻!沉浸式感受中国女篮夺冠喜悦
- 最新消息:安化有哪些旅游景点好玩
- 每日视点!专场招聘、优化政策……各地为毕业生就业创业保驾护航
- 留下里皇!湖人4年5600万美元锁定里夫斯,拉塞尔降薪2年3700万留队|每日看点
- 带7
- 视点!刘炟鑫:指数下跌幅度或有限 寻觅低位整理充分的优质品种
- 电脑花屏的原因_电脑花屏的原因|环球报道
- 当前快讯:何雄率团赴老挝部分城市和企业考察交流:促进优势互补互联互通 推动双方共同繁荣发展
- 今日播报!匏怎么读拼音_匏怎么读
- 稀土镁硅铁合金行情_稀土镁硅铁合金 合金
- diy是什么意思是纯手工(diy是什么意思)
- 全球实时:南昌高温黄色预警【2023-07-01】
- 天天热门:定做一个他
- 【时快讯】音响有时候有一个不响了_音响一下响一下不响是怎么回事简介介绍
- 【天天报资讯】刘涛秦海璐蒋勤勤什么恩怨_妻子们素颜曝光
- 视讯!周心怀任中国海油总裁
- 天津拓慧儿童发展中心-聚看点
- 天天微资讯!有钱能使鬼推磨,网红cici生日十余位港星齐聚,现场堪比颁奖典礼
- 癌症是对人性的考验-最新
- 当前滚动:3d文件保存很慢_3d保存慢怎么解决
- 手指富贵命图解大全 手指短粗水星丘饱满财运佳-全球今头条
- 世界观速讯丨段宏斌
- 环球精选!澳门6月份幸运博彩毛收入152.07亿澳元,同比增长513.9%
- 广东考生高考657分想复读一年冲清华北大 张雪峰发话3个字
- 贺州治疗不育的医院有哪些?精道不畅也是不育的原因之一
- 正邦科技收问询函 被要求说明去年继续大额亏损的原因及其合理性
- 面试官如何提问应聘者(面试官如何提问)
- 世界焦点!我国对《信息技术协定》扩围产品实施第八步降税
- 林振强 百科-林振强
- 现代化产业体系要坚持智能化-天天新消息
- 每日看点!苏州旅游攻略完整版_苏州旅游攻略
- 视点!天奈科技股价跌70%一季度扣非降66% 拟募20亿扩产被指过度融资重复建设
- 今年前5月家电以旧换新销售额同比增长83.7% 环球精选
- 人这辈子“最黑暗”的时间:55岁,出现这几个不吉之兆-天天微速讯
- 6月30日基金净值:招商品质升级混合A最新净值0.7232,涨0.86%
- 记者:利物浦正与莱比锡商谈索博斯洛伊转会费的支付结构
- 580元的LV遭遇疯抢,奢侈品牌为何纷纷做起了「低价刺客」? 天天热消息
- 广播剧mp3 下载(广播剧下载大全)
- 深科达:公司滚珠丝杠产品尚未在人形机器人领域布局-热闻
- 7月8日起 北京大学、清华大学恢复校园预约参观通道 资讯推荐
- 世界今日报丨日联科技(688531.SH):拟500万美元在新加坡设立全资子公司
- 成都蓉城7月3日主场在哪里2023?(附交通指南)_焦点滚动
- 北京今年高温日数已达12天,本周末北方气温将再上40℃
- 夜骑记得守秩序,烧烤撸串别扰民……夜游京城别忘了这些细节|世界观焦点
- 西城区月坛街道工委举办“光荣在党50年”纪念章颁发仪式 即时焦点
- 贵阳市民注意!即日起,贵阳公交将开通13条大站快线 快讯
- 我与红领巾的约定_我与红领巾征文 世界热资讯
- 当前观点:缺铁吃菠菜还是猪肝 缺铁不能吃菠菜吗
精彩阅读
- 在他们的画作里,看到“江南之春”
- 天天百事通!苹果的Vision Pro具有巨大潜力的概念原型
- 动漫设计怎么样?值得学吗?
- 中药板块冲高 莱茵生物盘中触及涨停
- 中崎股份北交所IPO获受理 焦点
- 双乐股份:连续3日融资净偿还累计70.97万元(06-29) 世界快讯
- 当前关注:迈威生物:6月29日获融资买入56.47万元,占当日流入资金比例3.59%
- 长三角G60科创走廊金融服务联盟走进六安|世界新动态
- 7月1日,5生肖运势飙升,吉祥如意,生活幸福美满,事业顺顺利利
- 世贸股份-世茂股份股吧|世界速看
- 焦点报道:全球今头条!老板“转让”健身房逃避执行,法官发现协议“猫腻”促成拍卖方案
- 汇丰策略师认为夏季风险资产大幅回调可能性不大 建议增持美股_环球看热讯
- 1959年出生是什么命?_土猪之命_1959年出生是什么命-环球聚焦
- 望湘人·风水涣(关于望湘人·风水涣介绍) 环球今热点
- 全球视讯!激烈冲突!买提江赛后疯狂庆祝:国安球迷朝他狂砸水瓶!
- 环球速递!第五届中国天然氧吧旅游文化节在香港召开
- 浙江医药:对中国大陆保健品市场持乐观态度 公司在维生素产品线上仍维持盈利
- 铁拳2023|田庄派出所加强夜间巡逻 给群众看得见的安全感 天天消息
- 强县行|一家县城造纸厂的自我进化:从濒临倒闭到汽车滤芯纸龙头-资讯
- 坐上“开往幸福”的公交车 看“千万工程”如何让乡村蝶变
- 央行:第二季度房地产企业贷款需求指数为47.0% 比上季下降8.4个百分点
- 恒瑞医药:磷酸瑞格列汀片、奥特康唑胶囊(SHR8008胶囊)获药品注册证书|全球动态
- 焦点关注:微信号注册机_微信号注册平台
- A股市场“专精特新”企业队伍再扩容 资本市场多纬度助力做大做优做强
- 3999元起!vivo X90s明天首销_环球时快讯
- 1公司获得推荐评级-更新中
- 支柱 世界要闻
- 波司登绩后股价大跌,盘中跌近15%,公司净利润创五年新高 | 看财报
- 宝塔实业股份有限公司-今日聚焦
- qq电脑管家官方下载2013(qq电脑管家好用吗)-全球焦点
- 实景模拟演练、5G智能巡检……新津这场城市管理保障和应急综合演练活动好“硬核” 环球信息
- 国家能源局公开征求能源行业电力市场标委会和负载测试装置标准化工作组组建方案意见
- 每日热文:快来参加!“78健康生活每一天”保险公益活动开始啦!
- 暴风城去南海镇怎么走(南海镇怎么去)
- 杭州第二课堂刷卡点有哪些_杭州第二课堂刷卡点
- 速率大幅提升!我国成功实现星地激光高速通信工程应用 全球资讯
- 万代南梦宫日本外首家实体店7月英国伦敦开业-全球微资讯
- 焦点要闻:阿维塔11对比宝马iX3,谁的性价比更好?
- 新基金密集成立 增量资金逢低入市
- 智驾功能将在这5城开放!余承东最新发文 世界新消息
- 爱国主义教育法等4件法律草案今起公开征求意见
- 伊通农产品精深加工科技产业园项目建设如火如荼
- 淘宝客服怎么做 淘宝客服怎么做的
- WANG ON GROUP(01222.HK)年度归母净利1300万港元 微动态
- 环球今日报丨贵州检察机关对刘华龙决定逮捕
- 10050是什么电话_10050_焦点快报
- 世界微动态丨神契幻奇谭(1)(关于神契幻奇谭(1)介绍)
- 古晨出生日期_古晨旗舰店
- 实时:10岁菜鸟:不“纠结”了!下场自营快递
- 相约尼山!用国风BGM打开世界互联网大会
