前端经典面试题CSS三栏布局

2023-05-16

对于前端来说,布局也是必须掌握的,一个好的布局可以让页面看起来更美观。提到布局,那就不得不说CSS三栏布局。这是前端面试经常会问到的一个问题,算是基础题。所谓的三栏布局,一般是指左右两边固定中间自适应,或者是中间固定左右两边自适应。

左右两边固定中间自适应

圣杯布局

  • HTML结构设置

    新建一个父元素,包含三个子元素:left、main、right(注意,main在写在前面,这样在页面渲染时会先加载中间,针对面试题优先加载中间部分)

  • style样式设置

    1、父元素设置高度
    2、三个元素均设置浮动
    3、中间main部分定宽100%:width: 100%,左右两边按产品需求设置宽高
    4、左边设置margin-left: -100%;右边设置margin-right: -右盒子宽
    5、父元素设置padding-left: 左盒子宽;padding-right: 右盒子宽
    6、左右盒子相对定位

    <div class="container">
      <div class="main f">go aheadgo aheadvgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo ahead</div>
      <div class="left f"></div>
      <div class="right f"></div>
    </div>
    <style>
      body {
        min-width: 700px;
      }
      .container {
         height: 300px;
         padding: 0 200px 0 200px;
      }
      .f {
         float: left;
      }
      .main {
         width: 100%;
         height: 300px;
         background-color: cornflowerblue;
      }
      .left {
         width: 200px;
         height: 300px;
         background-color: indianred;
         margin-left: -100%;
         position: relative;
         left: -200px;
      }
      .right {
         width: 200px;
         height: 300px;
         background-color: lightgreen;
         margin-left: -200px;
         position: relative;
         right: -200px;
      }
    </style>
    

该布局受内部元素影响而破坏布局的概率低,但是当浏览器屏幕缩小的一定程度时,左右两侧的内容会掉下来,或发生重叠现象。解决方案,给body加一个最小宽度(起码大于左右两侧宽度之和)

双飞翼布局

与圣杯布局的思路是一致的,只是有一些细微的差别。

  • HTML结构设置

    新建一个父元素,包含三个子元素:left、main、right(注意,main在写在前面,这样在页面渲染时会先加载中间,针对面试题优先加载中间部分)

  • style样式设置

    1、父元素设置高度
    2、三个元素均设置浮动
    3、中间main部分定宽100%:width: 100%,左右两边按产品需求设置宽高
    4、中间main部分再加一个盒子inner,放置内容(与圣杯布局的不同点)
    5、左边设置margin-left: -100%;右边设置margin-right: -右盒子宽
    6、新添加盒子,inner,设置左右padding或margin

    <div class="container">
       <div class="main f">
          <div class=inner>go aheadgo aheadvgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo aheadgo ahead</div>
       </div>
       <div class="left f"></div>
       <div class="right f"></div>
    </div>
    <style>
      .container {
         height: 300px;
      }
      .f {
         float: left;
      }
      .main {
         width: 100%;
         height: 300px;
         background-color: cornflowerblue;
      }
      .left {
         width: 200px;
         height: 300px;
         background-color: indianred;
         margin-left: -100%;
      }
      .right {
         width: 200px;
         height: 300px;
         background-color: lightgreen;
         margin-left: -200px;
      }
      .inner {
        padding: 0 200px 0 200px;
      }
    </style>
    

自身浮动

  • HTML结构设置

    新建三个元素:left、right、main(注意,main写在后面)

  • style样式设置

    1、左盒子左浮动,右盒子右浮动
    2、中间部分设置margin或padding值

    <div class="left"></div>
    <div class="right"></div>
    <div class="main">我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容</div>
    <style>
        .main {
            margin: 0 200px 0 200px;
            background-color: red;
            height: 200px;
        }
        .left {
            float: left;
            width: 200px;
            background-color: blue;
            height: 200px;
        }
        .right {
            float: right;
            width: 200px;
            background-color: pink;
            height: 200px;
        }
    </style>
    

CSS3新特性:flex

  • HTML结构设置

    新建一个父元素,包含三个子元素:left、main、right(注意,main写在中间)

  • style样式设置

    1、父元素设置宽度为100%,display: flex;
    2、左右两则按产品需求设置宽高
    3、中间部分设置flex: 1;

    <div class="container">
      <div class="left"></div>
      <div class="main">我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容</div>
      <div class="right"></div>
    </div>
    <style>
        .container {
           width: 100%;
           height: 200px;
           display: flex;
       }
       .main {
           flex: 1;
           background-color: red;
           height: 200px;
       }
       .left {
           width: 200px;
           background-color: blue;
           height: 200px;
       }
       .right {
           width: 200px;
           background-color: pink;
           height: 200px;
       }
    </style>
    

还有其他的写法,这里就不一一赘述,只是列举了一些比较常用的,以及面试可能会问到的情况。CSS3还有很多好玩的特性,在工作和学习的过程中值得深入研究。

根据建议评论网友的建议,做了修改哟

CSS3flex特性

  • HTML结构设置

    新建一个父元素,包含三个子元素:main、left、right(注意,main写在前面)

  • style样式设置

    1、父元素设置宽度为100%,display: flex;
    2、main中间部分设置flex: 1;
    3、左右两则按产品需求设置宽高;
    4、left设置order: -1;

    <div class="container">
      <div class="main">我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容我是中间内容</div>
      <div class="left"></div>
      <div class="right"></div>
    </div>
    <style>
        .container {
           width: 100%;
           height: 200px;
           display: flex;
       }
       .main {
           flex: 1;
           background-color: red;
           height: 200px;
       }
       .left {
           width: 200px;
           background-color: blue;
           height: 200px;
           order: -1;
       }
       .right {
           width: 200px;
           background-color: pink;
           height: 200px;
       }
    </style>
    

order属性是调整或设置盒模型对象的子元素出现的順序,数值越小排列越靠前,默认为0。在上面的布局中,left想要排在前面,就需要比0小,所以设置order: -1,left盒子会跑到前面。需要注意的是,如果父元素没有设置flex,则 order 属性不起作用。

感谢【非常记得你】的建议,emmm,编程的解决方法有很多种,很多时候都是靠经验的积累。所以,小伙伴们,坚持会看到胜利的曙光,虽然我也在挣扎中(#^.^#)

中间固定左右两边自适应

浮动 + 负边距 (圣杯布局)

  • HTML结构设置

    新建一个父元素,包含三个子元素:left、main、right(注意,main写在中间)

  • style样式设置

    1、左右两边各占50%的宽度
    2、左边负边距 margin-left 占中间div宽度的一半
    3、右边负边距 margin-right 也占中间div宽度的一半

     <div class="container">
       <div class="left"></div>
       <div class="main">我是中间内容</div>
       <div class="right"></div>
     </div>
     <style>
        .main {
            width: 100px;
            text-align: center;
            float: left;
            background-color: lightgreen;
            height: 300px;
        }
        .left {
            height: 300px;
            float: left;
            width: 50%;
            margin-left: -50px;
            background-color: pink;
        }
        .right {
            height: 300px;
            float: right;
            width: 50%;
            margin-right: -50px;
            background-color: cornflowerblue;
        }
     </style>
     

CSS3新特性:flex

  • HTML结构设置

    新建一个父元素,包含三个子元素:left、main、right

  • style样式设置

    1、父元素设置display: flex;flex-direction: row;
    2、左右设置flex-grow: 1,平分剩余空间

     <div class="container">
       <div class="left"></div>
       <div class="main">我是中间内容</div>
       <div class="right"></div>
     </div>
     <style>
        .container {
            display: flex;
            flex-direction : row;
        }
        .main {
            width: 200px;
            height: 300px;
            text-align: center;
            background-color: lightgreen;
        }
        .left {
            height: 300px;
            flex-grow: 1;
            background-color: pink;
        }
        .right {
            height: 300px;
            flex-grow: 1;
            background-color: cornflowerblue;
        }
     </style>
     

CSS3特性 calc(四则运算)

用于动态计算长度值。需要注意的是,运算符前后都需要保留一个空格,例如:width: calc(100% - 50px)。

  • HTML结构设置

    新建一个父元素,包含三个子元素:left、main、right

  • style样式设置

    1、父元素设置100%宽;
    2、左右设置width: calc(50%, - 中间宽/2)

     <div class="container">
       <div class="left"></div>
       <div class="main">我是中间内容</div>
       <div class="right"></div>
     </div>
     .container {
         width: 100%;
         height: 300px;
     }
     .f {
         float: left;
     }
     .main {
         width: 100px;
         text-align: center;
         background-color: lightgreen;
         height: 300px;
     }
     .left {
         height: 300px;
         background-color: pink;
         width: calc(50% - 50px);  /*平分中间部分的宽度*/
     }
     .right {
         height: 300px;
         background-color: cornflowerblue;
         width: calc(50% - 50px);  /*平分中间部分的宽度*/
     }
     

路漫漫其修远兮,没有别人聪慧,那就坚持不懈努,相信勤能补拙。每天进步一点点,总有一天会迈进一大步。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端经典面试题CSS三栏布局 的相关文章

  • ProxmoxVE 使用

    PromoxVE简介 支持 KVM OpenVZ 安装简单 WEB管理界 非常简单好用 需要注意的一点 KVM需要主板虚拟化支持 要开启主板BIOS上的虚拟化支持 PVE cluster create 多台物理机器 PVE2 0以后创建 c
  • iOS app性能优化的那些事

    iPhone上面的应用一直都是以流畅的操作体验而著称 xff0c 但是由于之前开发人员把注意力更多的放在开发功能上面 xff0c 比较少去考虑性能的问题 xff0c 可能这其中涉及到objective xff0d c c 43 43 跟lu
  • Shell生成随机密码

    tr参数 c或 complerment xff1a 取代所有不属于第一字符集的字符 xff1b d或 delete xff1a 删除所有属于第一字符集的字符 xff1b 1 生成10个小写字母 root 64 kafka60 shell l
  • 如何安装与连接MySQL?

    本文用详细的步骤说明 xff0c 帮助你一步步掌握MySQL的下载 安装和服务启动 xff0c 客户端的安装 连接和测试 帮你避开初学MySQL使用中的那些坑 需求 这是一个大数据时代 如果你开发一个大规模并发网络应用 xff0c 或者需要
  • 如何在win10系统上安装linux子系统

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 对于软件开发人员来说 xff0c linux基本上是一个绕不过去的槛 因为工作经常要用到linux xff0c 电脑用纯linux还是windows 43 虚拟机装linu
  • debian9服务器系统,如何安装Debian 9(Stretch)最小服务器

    本教程将介绍如何安装Debian 9 Stretch 最小服务器 本指南的目的是提供一个最小的Debian设置 xff0c 可以作为我们其他Debian 9教程的基础 xff0c 以及在howtoing com上完美的服务器指南 1要求 要
  • 为什么在计算机里打开U盘会闪退,U盘闪退怎么办?

    萌妮i 回答数 xff1a 80 被采纳数 xff1a 95 2018 10 09 08 30 27 U盘病毒会在U盘的根目录下生成两个文件 xff1a autorun inf和runauto 两个文件 这两个文件是有隐藏属性的 怎样显示隐
  • iOS指定程序启动后初始的ViewController

    BOOL application UIApplication application didFinishLaunchingWithOptions NSDictionary launchOptions Override point for c
  • nginx服务器出现504 gateway time-out怎么解决

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 做网站的同学经常会发现一些nginx服务器访问时候提示504 Gateway Time out错误 xff0c 而出现这种错误有两种情况 xff0c 第一种可能是由于ngi
  • CString 操作指南

    原著 xff1a Joseph M Newcomer 翻译 xff1a littleloach 原文出处 xff1a codeproject xff1a CString Management 通过阅读本文你可以学习如何有效地使用 CStri
  • iOS 触摸事件之双指先后触摸问题的解决

    问题情景的引入 xff1a 在一个画板程序中 xff0c 我定义只能用一个手指的时候 xff0c 才可以画线 xff0c 当有两个手指的时候是不可以进行绘画的 问题初解决 xff1a 那么最简单的我们会想到 xff0c 禁止多点触摸不就可以
  • Kurento Utils JS

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 概述 Kurento Utils是RTCPeerConnection的包装器对象 此对象旨在简化基于WebRTC的应用程序的开发 该项目的源代码可以从GitHub存储库克隆
  • java 校验日期字符串格式_Java 校验日期(格式:yyyyMMdd)

    今天做Android的时候遇到一个需求 xff0c 即校验yyyyMMdd格式的日期 xff0c 没有搜索到合适的于是自己写了一个简单的小算法 xff0c 权当复习SE了 xff0c 顺便记录一下 package com wl cigrec
  • C++代码文件名标准化处理工具

    工具功能 xff1a 批量处理C 43 43 代码文件 xff0c 将C 43 43 代码文件名中大写字母改为下划线 43 小写字母 为了方便代码在不同平台下的移植 xff0c 代码文件命名规范为 xff1a 不使用大写字母 xff0c 单
  • linux自定义回收空间,不断回收的Linux和Swap空间中的交换大小不断增加?

    如果信息被换出到光盘然后再读回内存 它通常会在交换区域中分配 直到交换空间不足为止 这意味着如果相同的信息需要稍后再次换出并且没有改变 操作系统可以从已分配的RAM中删除页面 而无需向磁盘节省时间 分配给已经读回内存的东西的交换也将被释放
  • python django django-debug-toolbar 不能正常使用的问题

    2019独角兽企业重金招聘Python工程师标准 gt gt gt http django debug toolbar readthedocs org en 1 3 debug toolbar 1 3 django 1 8 python2
  • xfreerdp的用法

    root 64 localhost xfreerdp 192 168 1 107 u username sec nla connected to 192 168 1 107 3389 Password SSL read Failure in
  • gitlab详细安装过程,错误解决方案

    在centos6 5中安装 GitLab 全过程和问题记录 如果你想省事 xff0c 使用最新版本的gitlab xff0c 请下载一键安装包 xff0c 一键安装 脚本 xff1a https bitnami com stack gitl
  • 声音分贝的概念,dBSPL.dBm,dBu,dBV,dBFS

    需要做个音频的PPM表 xff0c 看着一堆的音频术语真是懵了 xff0c 苦苦在网上扒了几天的文档 xff0c 终于有了点收获 xff0c 下面关于声音的分贝做个总结 分贝 Decibel 分贝 xff08 dB xff09 是一个对数单
  • Docker swarm mode初探

    为什么80 的码农都做不了架构师 xff1f gt gt gt Docker从1 12引入了swarm模式 xff0c swarm mode用来管理集群化的docker engines xff0c 被称作swarm 可以使用docker C

随机推荐

  • 在linux上安装XRDP远程登录Linux系统

    XRDP远程登录Linux系统 一般情况下我们 用ssh客户端远程登陆Linux系统 xff0c 至于图形界面下的linux远程登陆工具 xff0c 我们一般都会想到vnc xff0c 但它的安全性不够 xff0c 在这里 xff0c 我将
  • MySQL学习笔记之视图的创建,更新,删除,查询

    本篇文章通过学习 数据库系统概论 和 MySQL从入门到精通 xff0c 总结所得 在MySQL数据库中为我们提供了一种特性 xff0c 它可以简化查询 xff0c 提高安全性 xff0c 就是本章要学习的视图 视图是从一个或几个表 或视图
  • 微信备份方法

    手机空间不足 xff0c 需要清空微信空间 xff0c 如何备份微信内容以备以后之用呢 xff1f 经过摸索 xff0c 如下方法即可 xff1a 1 打开pc端微信并登陆 2 打开微信app xff0c 授权pc端微信运行 3 PC端微信
  • SQLServer 解析JSON字符串

    解析字符串函数 CREATE FUNCTION dbo fn split 64 p str VARCHAR 8000 64 p split VARCHAR 10 RETURNS 64 tab TABLE tid VARCHAR 2000 A
  • 如何用iphone导出网易云音乐的办法步骤

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 首先我是通过PP助手进行相关程序和文档进行备份 xff0c 这里我选择了要备份的网易云音乐 http www baisoujs com http www baisoujs
  • linux分区btrfs,linux btrfs文件系统及管理

    什么是btrfs xff1f Btrfs B tree文件系统 xff0c 通常念成Butter FS xff0c Better FS或B tree FS xff0c linux文件系统 xff0c 具有写时复制COW copy on wr
  • AJAX的post提交数组数据

    2019独角兽企业重金招聘Python工程师标准 gt gt gt code 前端js代码 xff1a function AlarmCondition id alarmLevel defaultOverValue isEnabled thi
  • linux 网络命令ethtool与mii-tool及nm-tool

    1 ethtool Ethtool是Linux下用于查询及设置网卡参数的命令 概要 xff1a ethtool ethX 查询ethX网口基本设置 ethtool h 显示ethtool的命令帮助 help ethtool i ethX 查
  • 使用lxc提供轻量级虚拟化

    lxc linux containers 是一种基于容器的操作系统层级的虚拟化技术 xff0c 一个容器就是一个虚拟的执行环境 xff0c 容器有效地将由单个操作系统管理的资源划分到孤立的组中 xff0c 以更好地在孤立的组之间平衡有冲突的
  • debian更新源时找不到公钥的解决办法

    W GPG error http mirrors 163 com jessie updates InRelease The following signatures couldn 39 t be verified because the p
  • esxi在线添加硬盘,系统没有识别到怎么办(重启除外)

    esxi在线添加虚拟磁盘 xff0c fdisk l没发现 xff0c 一般情况下重启服务器就可以 但是我服务器不能影响业务 xff0c 为什么新增磁盘或磁盘扩容后 xff0c Linux系统识别不到呢 xff1f 因为连接存储设备的SCS
  • CentOS 7更改阿里云源

    1 备份原镜像文件 xff0c 便于后期恢复 mv etc yum repos d CentOS Base repo etc yum repos d CentOS Base repo backup 2 下载新的CentOS Base rep
  • Ubuntu有线网络与无线网线自由切换方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 有的时候办公环境安全要求较高 xff0c 严格区分了工作网络 xff08 内部网络 xff09 和生活网络 xff08 Internet xff09 xff0c 通常生活网
  • 如何查看连接mysql的ip地址

    select SUBSTRING INDEX host 39 39 1 as ip count from information schema processlist group by ip
  • AutoCAD 许可管理器不起作用,或未正确安装,现在将关闭

    问题描述 重新安装了也还是这样 xff0c 而且第二次打开都跳不出申请码界面就关闭了 问题原因 xff0c 初步认为 xff1a AutoCAD 在首次弹出申请激活类型的类型时 xff0c 直接选择了网络激活 xff0c 而且没有激活成功
  • #ifndef详解

    ifndef 是 34 if not defined 34 的简写 xff0c 是预处理功能 xff08 宏定义 文件包含 条件编译 xff09 当中的条件编译 xff0c 可以根据是否已经定义了一个变量来进行分支选择 xff0c 其作用是
  • vue中watch的用法总结以及报错处理Error in callback for watcher "checkList"

    首先确认 watch是一个对象 xff0c 一定要当成对象来用 对象就有键 xff0c 有值 键 xff1a 就是你要监控的那个家伙 xff0c 比如说 route xff0c 这个就是要监控路由的变化 xff0c 或者是data中的某个变
  • 京东物流青龙系统分享

    QQ空间 腾讯朋友 新浪微博 人人网 开心网 微信 QQ好友 腾讯微博 浏览 xff1a 1102 2015年 xff0c 中国的大电商平台格局已定 xff0c 各大平台开始重视的方向已经从过去的价格战转向最后一公里和O2O的布局了 移动电
  • 彻底解决DZ大附件上传问题

    2012 4 13日更新 xff1a 因为这篇文章是很早以前写的了 xff0c 很多朋友看到了之后向我咨询大附件的问题 xff0c 但是以下部分信息已经失效 xff0c 如需了解这个问题的最新解决方案 xff0c 可以加我的QQ群 xff1
  • 前端经典面试题CSS三栏布局

    对于前端来说 xff0c 布局也是必须掌握的 xff0c 一个好的布局可以让页面看起来更美观 提到布局 xff0c 那就不得不说CSS三栏布局 这是前端面试经常会问到的一个问题 xff0c 算是基础题 所谓的三栏布局 xff0c 一般是指左