面试官:怎么使用css和css3实现水平居中?

news/2025/2/25 13:32:27

文章目录

  • 行内或类行内元素
    • 示例
  • 块级元素
    • 示例
  • 多个块级元素
    • 示例1
    • 示例2
  • 脱离文档流元素的水平居中
    • absolute绝对定位的元素
      • 示例
    • float定位的元素
      • 示例




行内或类行内元素

例如:文本和链接

在块级父容器中让行内元素居中,只需使用 text-align: center;

这种方法可以让 inline/inline-block/inline-table/inline/flex 等类型的元素实现居中。




示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body {
            background: #f06d06;
        }

        header, nav {
            text-align: center;
            background: white;
            margin: 20px 0;
            padding: 10px;
        }

        nav a {
            text-decoration: none;
            background: #333;
            border: 3px solid red;
            border-radius: 5px;
            color: white;
            padding: 3px 8px;
        }
    </style>
</head>
<body>

<header>
    This text is centered.
</header>

<nav role='navigation'>
    <a href="#0">One</a>
    <a href="#0">Two</a>
    <a href="#0">Three</a>
    <a href="#0">Four</a>
</nav>
</body>
</html>




块级元素

​ 让块级元素居中的方法就是设置 margin-leftmargin-rightauto(前提是已经为元素设置了适当的 width 宽度,否则块级元素的宽度会被拉伸为父级容器的宽度)。

无论父级容器和块级元素的宽度如何变化,都不会影响块级元素的居中效果。

常见用法如下所示:

.center {
  margin: 0 auto;
}




示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

        body {
            background: yellow;
        }

        main {
            background: white;
            margin: 20px 0;
            padding: 10px;
        }

        .center {
            margin: 0 auto;
            width: 200px;
            background: black;
            padding: 20px;
            color: white;
        }
    </style>
</head>
<body>
<main>
    <div class="center">
        I'm a block level element and am centered.
    </div>
</main>
</body>
</html>

img



这种情况下,有多个子块级元素时,会显示成如下的样子。

img



多个块级元素

如果要让多个块级元素在同一水平线上居中,那么可以修改它们的 display 值。

  • 使用 inline-block 的显示方式 + text-align

  • 使用了 flexbox 的显示方式 + justify-content: center



示例1

使用 inline-block 的显示方式 + text-align。

这种情况下,遇到宽度不够时,子元素会进行换行。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body {
            background: yellow;
            font-size: 80%;
        }

        main {
            background: white;
            margin: 20px 0;
            padding: 10px;
        }

        main div {
            border: 2px solid black;
            background: yellowgreen;
            color: white;
            padding: 15px;
            max-width: 125px;
            margin: 5px;
        }

        .inline-block-center {
            text-align: center;
        }

        .inline-block-center div {
            display: inline-block;
            text-align: left;
        }
        
    </style>
</head>
<body>
<main class="inline-block-center">
    <div>
        测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试
    </div>
    <div>
        测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试
    </div>
    <div>
        测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试
    </div>
</main>


</body>
</html>

img






示例2

使用了 flexbox 的显示方式 + justify-content: center,默认情况下,flex-wrap为nowrap,此时元素将不会换行,而是进行缩放。

如果想具体改变缩放时如何处理元素宽度,可使用flex-basis和flex-shrink来设置。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body {
            background: yellow;
            font-size: 80%;
        }

        main {
            background: white;
            margin: 20px 0;
            padding: 10px;
        }

        main div {
            border: 2px solid black;
            background: yellowgreen;
            color: white;
            padding: 15px;
            max-width: 125px;
            margin: 5px;
        }

        .flex-center {
            display: flex;
            justify-content: center;
        }
    </style>
</head>
<body>
<main class="flex-center">
    <div>
        测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试
    </div>
    <div>
        测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试
    </div>
    <div>
        测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试
    </div>
</main>
</body>
</html>

img

img

脱离文档流元素的水平居中

这里的情况主要有两种。

  • absolute绝对定位的元素

  • float定位的元素

absolute绝对定位的元素

  • 首先是父元素设置成相对定位relation,子元素设置成绝对定位absolute。

  • 子元素的left设置为50%,效果为,子元素的左边对上父元素的中间。

  • 子元素的margin-left设置为子元素本身宽度的一半x,意思为告诉浏览器,这个元素的占位宽度往左移动x个单位,实际效果就是子元素往左拉了x个单位。

  • 如此一来,子元素和父元素的中间都在统一垂直线上。


示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

        main {

            margin: 20px 0;
            padding: 10px;
            position: relative;

            height: 100%;
        }

        .float-center-box{
            border: 2px solid black;
            padding: 10px;

            background: yellowgreen;
            font: 20px white;


            /* 精髓部分 */
            width: 500px;
            position: absolute;
            left: 50%;

            /* 自己一半的宽度 */
            margin-left: -250px;

        }
    </style>
</head>
<body>
<main>
    <div class="float-center-box">
        <p>
            测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试
            测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试
            测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试
        </p>

    </div>
</main>
</body>
</html>

img

float定位的元素

实现这种布局的核心就在于使用伪元素充当占位符:

  • 让占位符在文本中浮动

  • 左边一栏右浮动

  • 右边一栏左浮动

  • 同时占位符的高度要等于相应的图片,宽度等于相应图片的一半。

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .container{
            border: 2px solid black;
            overflow: hidden;
        }

        #l, #r{
            width: 49%;
            height: 300px;
            background-color: yellow;

            border: 2px solid black;
        }

        #l{
            float: left;
        }

        #r{
            float: right;
        }

        /* 假设此处元素为 250px * 250px  */
        #l:before, #r:before {
            content: "";
            width: 125px;
            height: 250px;
            background: blue;
            border: 2px solid black;
        }

        #l:before {
            float: right;
        }

        #r:before {
            float: left;
        }

    </style>
</head>
<body>
<div class="container">
    <div class="float-center-box"></div>
    <div id="l"></div>
    <div id="r"></div>
</div>
</body>
</html>

img


http://www.niftyadmin.cn/n/555193.html

相关文章

MySQL数据库备份工具mysqldump的使用(转)

说明&#xff1a;MySQL中InnoDB和MyISAM类型数据库&#xff0c;这个工具最新版本好像都已经支持了&#xff0c;以前可能存在于MyISAM的只能只用冷备份方式的说法。 备份指定库&#xff1a; mysqldump -h127.0.0.1 -uroot -p --lock-tables --events --triggers --routines --fl…

讲一下css如何实现垂直居中?

文章目录行内或类行内元素单行示例示例2多行示例1示例2示例3块级元素已知元素的高度示例未知元素的高度示例flexbox示例行内或类行内元素 例如&#xff1a;文本和链接等。 单行 case1 对于单行行内或者文本元素&#xff0c;只需为它们添加等值的 padding-top 和 padding-bo…

100个容器引擎项目,点亮你的容器集群技能树

大规模的容器技术运用从来不是一项独立工程&#xff0c;而是一个汇集虚拟化技术、容器编排、任务调度、操作系统、容器仓库、跨节点网络、分布式存储、动态扩缩、负载均衡、日志监控、故障自恢复等系统性难题的复杂有机体。随着Docker的诞生和Google等互联网公司的推波助澜&…

前端笔试题:实现一个备忘录ToDoList

题目描述 实现一个备忘录&#xff0c;通过搜索框来增加todo事件 每个todo都要有对应的删除方法 搜索框要实现补全功能 补全时&#xff0c;只显示匹配的todo项 补全时&#xff0c;匹配的字体要显示为红色 文章目录题目描述实现效果图开撕代码进阶版 防抖加持实现效果图 先…

Vue.set() this.$set()引发的视图更新思考

引文 vue文档列表渲染中有条注意事项&#xff1a; 这里提到的两种情况实际改变了数据但是没有触发视图更新。 由此引出Vue.set()&#xff0c;先上文档API&#xff1a; this.$set()和Vue.set()本质方法一样&#xff0c;前者可以用在methods中使用。 set方法调用时&#xff0c;可…

CSS3实现旋转头像效果

效果 如图&#xff0c;当鼠标移到头像上时&#xff0c;头像将会顺时针旋转360度。 思路 transition :hover transform: rotate(360deg) 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Tit…

linux之磁盘配额(quota)使用方法(转)

1.什么是quota 简单的说就是限制用户对磁盘空间的使用量。 因为Linux是多用户多任务的操作系统&#xff0c;许多人共用磁盘空间&#xff0c;为了合理的分配磁盘空间&#xff0c;于是就有了quota的出现。 2.quota的用途 显示磁盘使用情况和配额 3.quota的一般作用对象 &a…

面试官:知道用CSS3玩转旋转卡片的正确姿势吗?

文章目录思路demo1 旋转少女效果代码实现demo2 旋转表单效果关键思路代码面试官&#xff1a;知道用CSS3玩转旋转卡片的正确姿势吗&#xff1f; 我&#xff1a;这个当然知道啊&#xff0c;我精通css3&#xff0c;这可难不倒我 面试官&#xff1a;好&#xff0c;那你实现一个旋…