CSS常用布局实现03-水平垂直居中

1. 简介

其实,水平居中和垂直居中都是水平垂直居中的一部分,所以这一章节所讲到的方法稍微改下就可用于前面两章。说道水平垂直居中,那么居中的元素肯定是有宽度和高度的,要么是指定宽高,要么就是自适应的宽高。

2. 已知宽高

这种情况比较简单,因为已知宽高,根据宽高就能做很多处理。这里我只记录一种方法。 使用 -margin + absolute(relative):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>负margin + absolute</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .wrap {
            position: relative;
            background: gray;
            height: 300px;
        }
        .inner {
            background: blue;
            width: 200px;
            height: 100px;
            position: absolute;
            top: 50%;
            left: 50%;
            margin-top: -50px;
            margin-left: -100px;
        }
    </style>
</head>
<body>

<div class="wrap">
    <div class="inner">inner content</div>
</div>
</body>
</html>

image.png

当然,这里使用这个方法的简化方法也可以,就是不设置父元素为absolute,设置子元素为relative,其余保持一样。

3. 未知宽高

3.1 使用 -margin + absolute:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>负margin + absolute</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .wrap {
            position: relative;
            background: gray;
            height: 300px;
        }
        .inner {
            background: blue;
            width: 200px;
            height: 100px;
            position: absolute;
            top: 0;
            right: 0;
            bottom: 0;
            left: 0;
            margin: auto auto;
        }
    </style>
</head>
<body>

<div class="wrap">
    <div class="inner">inner content</div>
</div>
</body>
</html>

这种方法很巧妙,使用也很多。IE7及之前版本不支持。

3.2 flex

是的,flex,flex,flex。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>flex</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .wrap {
            background: gray;
            display: flex;
            height: 60px;
            align-items: center;
            justify-content: center;
        }
        .inner {
            background: blue;
        }
    </style>
</head>
<body>

<div class="wrap">
    <div class="inner">inner content</div>
</div>
</body>
</html>

3.3 grid

还有grid,grid,grid。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>grid</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .wrap {
            background: gray;
            display: grid;
            height: 60px;
            align-items: center;
            justify-content: center;
        }
        .inner {
            background: blue;
        }
    </style>
</head>
<body>

<div class="wrap">
    <div class="inner">inner content</div>
</div>
</body>
</html>

3.4 table

当然,这种情景使用table也很方便。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>table</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .wrap {
            display: table-cell;
            background: gray;
            height: 100px;
            width: 300px;
            text-align: center;
            vertical-align: middle;
        }
        .inner {
            background: blue;
        }
    </style>
</head>
<body>

<div class="wrap">
    <div class="inner">
        inner content
    </div>
</div>
</body>
</html>

ie8以后兼容。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云端架构

【云端架构】前端必备常用CSS语法

属性(property)是你希望设置的样式属性(style attribute)。每个属性有一个值。属性和值被冒号分开。

3648
来自专栏phodal

WebStorm重构快捷键

JavaScript重构 结合 快捷键 是真正的神器。 ? 按下Command + Option + Shift + T,会有重构的菜单出现 ? 重构之前...

5025
来自专栏Android先生

Android开发人员不得不学习的Vue.js基础

Vue是一套用于构建用户界面的渐进式框架。Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一...

1442
来自专栏Python

Django比较相等或者不相等的模板语法ifequal / ifnotequal

ifequal / ifnotequal      在模板语言里比较两个值并且在他们一致的时候显示一些内容,Django提供了 ifequal 和 ifnote...

3096
来自专栏积累沉淀

JavaScript DOM操作表格及样式

一.操作表格 <table>标签是HTML中结构最为复杂的一个,可以通过DOM来创建生成它(比较麻烦),或者HTML DOM来操作它。 //需要操作的table...

22710
来自专栏互联网开发者交流社区

JS总结

1584
来自专栏Angular&服务

数据绑定

1113
来自专栏微信小程序开发

理解jquery的$.extend & $.fn.extend用法

jQuery为开发插件提拱了两个方法,分别是: 1、jQuery.fn.extend(); //dom方法 2、jQuery.extend(); // 工具...

3329
来自专栏HTML5学堂

querySelector与querySelectorAll

HTML5学堂:JS获取节点的方法很多,但真正常用的或许就是通过id和标签获取节点,用传统的几种方法想要快速的查找到某个标签,就意味着需要更多的id,命名多了自...

3657
来自专栏flutter开发者

Flutter动画【2】

在上次的文章中我们学习了Tween动画的用法,我们也一块看了下AnimatedBuilder和AnimatedWidget的用法,通过Tween动画结合相应的W...

8774

扫码关注云+社区

领取腾讯云代金券