You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复刻谷歌首页时如何实现图片与表单的水平垂直居中

核心问题

当前代码无法实现logo+搜索框整体水平垂直居中,是三个基础逻辑错误导致的:

  • 父容器<body>默认高度由内容撑开,没有占满浏览器视口高度,flex垂直居中缺少计算参照
  • .centerflex容器仅设置了主轴(纵向)居中规则,缺少交叉轴(横向)对齐配置,子元素默认靠左排列
  • 搜索输入框重复声明了两次class属性,后写的class会覆盖前值,导致样式匹配异常
修正步骤

1. 修复HTML标签错误

删除搜索输入框重复的class声明,修正后的输入框代码如下:

<input class="item" maxlength="2048" name="q" type="text" aria-autocomplete="both" aria-haspopup="false" autocapitalize="off" autocomplete="off" autocorrect="off" autofocus role="combobox" spellcheck="false">

其余HTML结构无需调整。

2. 修正SCSS样式

重点调整容器高度、flex对齐规则,补充基础视觉样式贴近谷歌首页效果:

@font-face {
    font-family: 'Product Sans';
    font-style: normal;
    font-weight: 400;
    src: local('Open Sans'), local('OpenSans'), url(https://fonts.gstatic.com/s/productsans/v5/HYvgU2fE2nRJvZ5JFAumwegdm0LZdjqr5-oayXSOefg.woff2) format('woff2');
}

body {
    // 清除浏览器默认边距
    margin: 0;
    // 让body占满整个浏览器视口高度
    min-height: 100vh;
    font-family: Product Sans;
    font-size: 16px;
}

.center {
    display: flex;
    // 纵向排列子元素:logo在上,搜索框在下
    flex-direction: column;
    // 纵向(主轴)居中
    justify-content: center;
    // 横向(交叉轴)居中
    align-items: center;
    // 容器占满父级(body)的全部高度,给居中留出计算空间
    min-height: 100vh;
    // 控制logo和搜索框的间距,对齐谷歌首页的视觉比例
    gap: 30px;
}

.item {
    display: block;
}

// 控制logo尺寸
img.item {
    width: 272px;
    height: auto;
}

// 搜索框基础样式
input.item[type="text"] {
    width: 584px;
    height: 44px;
    padding: 0 16px;
    border: 1px solid #dfe1e5;
    border-radius: 24px;
    font-size: 16px;
    &:hover {
        box-shadow: 0 1px 6px rgba(32,33,36,.28);
        border-color: rgba(223,225,229,0);
    }
}

$blue: #4285F4;
$red: #EA4335;
$yellow: #FBBC05;
$green: #34A853;
.googleText {
    align-items: center;
    font-size: 5vw;
    display: inline-block;
    text-align: center;
    &:nth-child(7n+1) {
        color: $blue;
    }
    &:nth-child(7n+2) {
        color: $red;
    }
    &:nth-child(7n+3) {
        color: $yellow;
    }
    &:nth-child(7n+4) {
        color: $blue;
    }
    &:nth-child(7n+5) {
        color: $green;
    }
    &:nth-child(7n+6) {
        color: $red;
    }
    &:nth-child(7n+7) {
        color: $yellow;
    }
}
实现逻辑说明
  • flex布局的居中规则生效的前提是容器有明确的、大于内容总高度的高度值,设置min-height: 100vh就是让容器高度等于浏览器可视区域高度,为居中计算提供基准
  • 当flex设置为flex-direction: column纵向排列时,justify-content控制纵向对齐,align-items控制横向对齐,两个属性同时配置才能实现子元素的双向居中
  • 用gap控制flex子元素间距,比单独给元素加margin更易维护,不会出现边距重叠问题

内容的提问来源于stack exchange,提问作者Nitro8923

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:48:24