css background 充满自适应_剖析一些经典的CSS布局问题,为前端开发+面试保驾护航...

一、让一个元素水平垂直居中,到底有多少种方案?

8747f674c394d8a02db31e71254fa9f9.png

水平居中

  • 对于 行内元素: text-align: center;
  • 对于确定宽度的块级元素:
  1. width和margin实现。margin: 0 auto;
  2. 绝对定位和margin-left: -width/2, 前提是父元素position: relative
  • 对于宽度未知的块级元素
  1. table标签配合margin左右auto实现水平居中。使用table标签(或直接将块级元素设值为display:table),再通过给该标签添加左右margin为auto。
  2. inline-block实现水平居中方法。display:inline-block和text-align:center实现水平居中。
  3. 绝对定位+transform,translateX可以移动本身元素的50%。
  4. flex布局使用justify-content:center

垂直居中

  1. 利用 line-height实现居中,这种方法适合纯文字类
  2. 通过设置父容器 相对定位,子级设置 绝对定位,标签通过margin实现自适应居中
  3. 弹性布局 flex:父级设置display: flex; 子级设置margin为auto实现自适应居中
  4. 父级设置相对定位,子级设置绝对定位,并且通过位移 transform实现
  5. table布局,父级通过转换成表格形式,然后子级设置 vertical-align实现。(需要注意的是:vertical-align: middle使用的前提条件是内联元素以及display值为table-cell的元素)。

我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。

二、浮动布局的优点?有什么缺点?清除浮动有哪些方式?

浮动布局简介:当元素浮动以后可以向左或向右移动,直到它的外边缘碰到包含它的框或者另外一个浮动元素的边框为止。元素浮动以后会脱离正常的文档流,所以文档的普通流中的框就变现的好像浮动元素不存在一样。

优点

这样做的优点就是在图文混排的时候可以很好的使文字环绕在图片周围。另外当元素浮动了起来之后,它有着块级元素的一些性质例如可以设置宽高等,但它与inline-block还是有一些区别的,第一个就是关于横向排序的时候,float可以设置方向而inline-block方向是固定的;还有一个就是inline-block在使用时有时会有空白间隙的问题

缺点

最明显的缺点就是浮动元素一旦脱离了文档流,就无法撑起父元素,会造成父级元素的高度塌陷。

清除浮动的方式

  1. 添加额外标签
//添加额外标签并且添加clear属性
  1. 父级添加overflow属性,或者设置高度
//auto 也可以 //将父元素的overflow设置为hidden
  1. 建立伪类选择器清除浮动(推荐)
//在css中添加:after伪元素.parent:after{ /* 设置添加子元素的内容是空 */ content: ''; /* 设置添加子元素为块级元素 */ display: block; /* 设置添加的子元素的高度0 */ height: 0; /* 设置添加子元素看不见 */ visibility: hidden; /* 设置clear:both */ clear: both;}

三、 使用display:inline-block会产生什么问题?解决方法?

问题复现

问题: 两个display:inline-block元素放到一起会产生一段空白。

如代码:

  Document

效果如下:

18aa5e8bd493e8e62696d8ecbb3471c4.png

产生空白的原因

元素被当成行内元素排版的时候,元素之间的空白符(空格、回车换行等)都会被浏览器处理,根据CSS中white-space属性的处理方式(默认是normal,合并多余空白),原来 HTML代码中的回车换行被转成一个空白符,在字体不为0的情况下,空白符占据一定宽度,所以inline-block的元素之间就出现了空隙。

解决办法

1. 将子元素标签的结束符和下一个标签的开始符写在同一行或把所有子标签写在同一行

2. 父元素中设置font-size: 0,在子元素上重置正确的font-size

.container{ width:800px; height:200px; font-size: 0;}

3. 为子元素设置float:left

.left{ float: left; font-size: 14px; background: red; display: inline-block; width: 100px; height: 100px;}//right是同理

四、布局题:div垂直居中,左右10px,高度始终为宽度一半

问题描述: 实现一个div垂直居中, 其距离屏幕左右两边各10px, 其高度始终是宽度的50%。同时div中有一个文字A,文字需要水平垂直居中。

思路一:利用height:0; padding-bottom: 50%;

  Document
A

强调两点:

  1. padding-bottom究竟是相对于谁的?

答案是相对于 父元素的width值。

那么对于这个outwrapper的用意就很好理解了。CSS呈流式布局,div默认宽度填满,即100%大小,给outwrapper设置margin: 0 10px;相当于让左右分别减少了10px。

  1. 父元素相对定位,那绝对定位下的子元素宽高若设为百分比,是相对谁而言的?

相对于父元素的(content + padding)值, 注意不含border

延伸:如果子元素不是绝对定位,那宽高设为百分比是相对于父元素的宽高,标准盒模型下是content, IE盒模型是content+padding+border。

思路二: 利用calc和vw

  Document
A

效果如下:

5659fcd1dcb242853ea577fe57cf58db.gif

五、CSS如何进行品字布局?

第一种

 品字布局
1
2
3

效果:

f4b542ae080de10883cb4c45637cb596.png

第二种(全屏版)

  品字布局
1
2
3

效果:

7740dae1a1fb9be7f2282cb30d2313ac.png

六、CSS如何进行圣杯布局

圣杯布局如图:

4e5eff4f52a167a23ceb9bec437adaee.png

而且要做到左右宽度固定,中间宽度自适应。

1.利用flex布局

 Document
这里是头部
左边
中间部分
右边

2.float布局(全部float:left)

 Document
这里是头部
中间部分
左边
右边

这种float布局是最难理解的,主要是浮动后的负margin操作,这里重点强调一下。

设置负margin和left值之前是这样子:

995e9508e9021ecf223e5a1966a2e5ea.png

左边的盒子设置margin-left: -100%是将盒子拉上去,效果:

.left{ /* ... */ margin-left: -100%;}
4a696330029c8314374880f284eefaf2.png

然后向左移动200px来填充空下来的padding-left部分

.left{ /* ... */ margin-left: -100%; left: -200px;}

效果呈现:

445a74d0112aa67b6c22fbbe7450b3e6.png

右边的盒子设置margin-left: -250px后,盒子在该行所占空间为0,因此直接到上面的middle块中,效果:

.right{ /* ... */ margin-left: -250px;}
6e17870c22c1b91d252ffb1b9d7bb4f5.png

然后向右移动250px, 填充父容器的padding-right部分:

.right{ /* ... */ margin-left: -250px; left: 250px;}

现在就达到最后的效果了:

4e5eff4f52a167a23ceb9bec437adaee.png

3.float布局(左边float: left, 右边float: right)

 Document
这里是头部
左边
右边
中间部分

4. 绝对定位

 Document
这里是头部
左边
右边
中间部分

5.grid布局

 Document
left
middle

看看grid布局,其实也挺简单的吧,里面的参数应该不言而喻了。

另外说一点,到2019年为止,grid现在绝大多数浏览器已经可以兼容了,可以着手使用了。

4025d918e9ef972aa967056cf38282b3.png

当然,还有table布局,年代比较久远了,而且对SEO不友好,知道就可以,这里就不浪费篇幅了。

七、CSS如何实现双飞翼布局?

67db53d3eaef43687286f8ca39cf868c.png

有了圣杯布局的铺垫,双飞翼布局也就问题不大啦。这里采用经典的float布局来完成。

 Document
双飞翼布局

八、什么是BFC?什么条件下会触发?渲染规则?应用场景有哪些?

1.什么是BFC?

W3C对BFC的定义如下:浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为"visiable"的块级盒子,都会为他们的内容创建新的BFC(Block Fromatting Context, 即块级格式上下文)。

2.触发条件

一个HTML元素要创建BFC,则满足下列的任意一个或多个条件即可:下列方式会创建块格式化上下文:

  • 根元素()
  • 浮动元素(元素的 float 不是 none)
  • 绝对定位元素(元素的 position 为 absolute 或 fixed)
  • 行内块元素(元素的 display 为 inline-block)
  • 表格单元格(元素的 display为 table-cell,HTML表格单元格默认为该值)
  • 表格标题(元素的 display 为 table-caption,HTML表格标题默认为该值)
  • 匿名表格单元格元素(元素的 display为 table、table-row、 table-row-group、table-header-group、table-footer-group(分别是HTML table、row、tbody、thead、tfoot的默认属性)或 inline-table)
  • overflow 值不为 visible 的块元素 -弹性元素(display为 flex 或 inline-flex元素的直接子元素)
  • 网格元素(display为 grid 或 inline-grid 元素的直接子元素) 等等。

3.BFC渲染规则

(1)BFC垂直方向边距重叠

(2)BFC的区域不会与浮动元素的box重叠

(3)BFC是一个独立的容器,外面的元素不会影响里面的元素

(4)计算BFC高度的时候浮动元素也会参与计算

4.应用场景

1. 防止浮动导致父元素高度塌陷

现有如下页面代码:

  Document
f636fe99d4e6ad38b31f3fe5878904ff.png

接下来将inner元素设为浮动:

 .inner { float: left; background: #08BDEB; height: 100px; width: 100px; }

会产生这样的塌陷效果:

74e49555f541aa244ec086328b7ca14e.png

但如果我们对父元素设置BFC后, 这样的问题就解决了:

.container { border: 10px solid red; overflow: hidden;}

同时这也是清除浮动的一种方式。

2. 避免外边距折叠

两个块同一个BFC会造成外边距折叠,但如果对这两个块分别设置BFC,那么边距重叠的问题就不存在了。

现有代码如下:

 Document
1
2
3
0388a6431d9f804e29dad9860217d4a4.png

此时三个元素的上下间隔都是10px, 因为三个元素同属于一个BFC。现在我们做如下操作:

 
1
2
3

style增加:

.bfc{ overflow: hidden;}

效果如下:

220a9f66f061e7494fc497b14a2fdb37.png

可以明显地看到间隔变大了,而且是原来的两倍,符合我们的预期。

关于CSS布局问题,先分享到这里,后续会不断地补充,希望对你有所启发。如果对你有帮助的话,别忘了帮忙点个赞哦。

原文链接:https://mp.weixin.qq.com/s/IgHNVEvK92TW2WZnWn_2BQ
作者:前端三元同学

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net Redis缓存优化提高加载速度和服务器性能(二)

上文详细测试了每次都读取数据库的接口和通过缓存读取接口的性能对比 这里我们就准备实际简介肿么将原来的数据库加上Redis缓存优化部分接口 1.下载Redis和Redis视图管理工具 点击下载 提取码: 9tgg 备用下载地址 下载完成后先安装Redis再安装Redis视图管理工具 打开…

ASP.NET数据库访问系列教程01-概述篇 创建数据访问层(下)

ASP.NET数据库访问系列教程 本教程深入探讨了基于ASP.NET 2.0技术的数据库访问方法和模式。这些介绍非常简明,并且提供了一步步的指导和大量的截屏。 该系列教程包括: 概述篇 基础报表 主/明细报表 自定义格式报表 编辑,插入和删除数据 分页和…

C# 淘宝商品微信返利助手开发-(五)返利助手开发(3)淘口令如何通过API转换为链接

系列教程一目录:返利助手原理 系列教程二目录:返利助手开放文档以及帐号申请地址 系列教程三目录:返利助手开发(1)API介绍 系列教程四目录:返利助手开发(2)淘宝分享的内容如何只取…

C# 淘宝商品微信返利助手开发-(六)返利助手开发(4)如何通过淘口令解析的出来的地址获得返利信息

系列教程一目录:返利助手原理 系列教程二目录:返利助手开放文档以及帐号申请地址 系列教程三目录:返利助手开发(1)API介绍 系列教程四目录:返利助手开发(2)淘宝分享的内容如何只取…

template标签_Django实战: 利用自定义模板标签实现仿CSDN博客月度归档

应网友慕之岩的请求,现提供下Django项目中如何使用自定义标签实现仿CSDN博客的月度归档(如下图所示)。要求按月统计每个月发表的博文篇数, 跳过空白月份,最后结果按发布时间逆序排列。点击每个月份可以看到详细博文列表清单。本文着重讲述如何实现&#…

javascript的stack overflow

写一个很简单的页面和脚本 1<html>2<head>3<title>fanweixiaos test</title>4<script type"text/javascript">5function onclick() 6{ 7 alert(范维肖); 8} 9</script>10</head>11<body>12<input type"b…

Hibernate中inverse属性与cascade属性

Hibernate集合映射中&#xff0c;经常会使用到"inverse"和"cascade"这两个属性。对于我这样&#xff0c;Hibernate接触不深和语文水平够烂的种种因素&#xff0c;发现这两个属性实在是难以理解&#xff0c;无奈只好将这个两个属性解释工作交给了Google和Ba…

h5 nan_h5页面在不同ios设备上的问题总结

最近在写嵌入到小程序webview的一个h5页面&#xff0c;是一个文章评论的功能&#xff0c;这个过程中&#xff0c;遇到很多兼容性的问题&#xff0c;在不同机型上的表现也很不一致&#xff0c;所以总结了以下这些问题&#xff0c;记录下来&#xff0c;以便以后查看。1、日期问题…

C# 淘宝商品微信返利助手开发-(七)返利助手开发(5)如何将优惠券地址转为淘口令

系列教程一目录&#xff1a;返利助手原理 系列教程二目录&#xff1a;返利助手开放文档以及帐号申请地址 系列教程三目录&#xff1a;返利助手开发&#xff08;1&#xff09;API介绍 系列教程四目录&#xff1a;返利助手开发&#xff08;2&#xff09;淘宝分享的内容如何只取…

ftp改为sftp_科普!一文详解 FTP、FTPS 与 SFTP 的原理

FTP、FTPS 与 SFTP 简介FTPFTP 即 文件传输协议&#xff08;英语&#xff1a;File Transfer Protocol 的缩写&#xff09;是一个用于计算机网络上在客户端和服务器之间进行文件传输的应用层协议。完整的 FTP 是由 FTP 服务器 和 FTP 客户端组成的&#xff0c;客户端可以将本地的…

动手学servlet(四) cookie和session

Cookie cookie是保存在客户端的一个“键值对”&#xff0c;用来存储用户的一些信息 cookie的应用&#xff1a; -在电子商务会话中标识用户 -对网站进行定制&#xff0c;比如你经常浏览哪些内容&#xff0c;就展示哪些页面给你 -网站广告&#xff0c;比如百度联盟&#xff0c;你…

16进制 转为图片 php_Python 十六进制hex-bytes-str之间的转换和Bcc码的生成

前言近期做测试模拟器用到了hex-bytes-str之间的转换bcc码的校验&#xff0c;这里总结了一些方法。实例直接上代码转为十六进制&#xff08;Hex&#xff09;字符串def 执行代码&#xff1a;方法&#xff1a;getStringFromNumber(size,value)参数一为生成几个batys&#xff0c;参…

推荐一个国外SaaS产品-Olark

Olark www.olark.com 是国外非常出名的一个在线客服工具。 现在国内很多人创业失败的原因是&#xff1a;什么都想自己做&#xff0c;不利用现有资源&#xff0c;结果造成做出来的东西什么都有&#xff0c;什么都不好用。 我们应该好好学习国外的小团队&#xff0c;他们只做一件…

粗暴,干就完了----徐晓冬似的C语言自学笔记-----实现一个链表结构

1 #include <stdio.h>2 #include <stdlib.h>3 #define N 54 /*N 假定数组长度为5*/5 typedef struct snode6 {7 int data;8 struct snode *next; 9 } SNODE;10 11 /*第一步&#xff0c;添加链表头信息*/12 SNODE *createhead(int a[])13 {14 SNODE *h,…

C# 淘宝商品微信返利助手开发-(二)返利助手开放文档以及帐号申请地址

系列教程一目录&#xff1a;返利助手原理 系列教程二目录&#xff1a;返利助手开放文档以及帐号申请地址 系列教程三目录&#xff1a;返利助手开发&#xff08;1&#xff09;API介绍 系列教程四目录&#xff1a;返利助手开发&#xff08;2&#xff09;淘宝分享的内容如何只取…

比较难的sql面试题,令我比较郁闷!

一组通话记录&#xff08;总共500万条&#xff09;:ID 主叫号码 被叫号码 通话起始时间 通话结束时间 通话时长1 98290000 0215466546656 2007-02-01 09:49:53.000 2007-02-01 09:50:16.000 232 98290000 021546654666 2007-02-01 09:50:29.000 2007-02-01 09:5…

阿里云ESC服务器数据快速转移至轻量应用服务器

ECS服务器的换ECS的服务器已有的数据转换就很简单了&#xff0c;直接创建自定义镜像&#xff0c;创建完成后新服务器直接更换系统盘然后选择你创建的镜像就直接吧你的数据可软件一起直接移到新的ECS的服务器了 可是坑爹的是&#xff0c;新买的轻量应用服务器里面左找右找也找…

js udp通信_nodejs源码分析第十九章 -- udp模块

udp不是面向连接的协议&#xff0c;所以使用上会比tcp简单&#xff0c;他和tcp一样&#xff0c;使用四元组来标记通信的双方&#xff08;单播的情况下&#xff09;。我们看看udp作为服务器和客户端的时候的流程。1 在c语言中使用udp1.1 服务器流程&#xff08;伪代码&#xff0…

SVN 清理失败解决方案

SVN有时因各种不明原因导致清理失败&#xff0c;可以采取如下解决办法进行处理&#xff1a; 方法一&#xff1a; 删除根目录下隐藏文件夹“.svn” 然后在根目录文件夹 外面的空白处 检出。比如你项目文件夹名为“D:/source” 则svn检出时,在“source”外面的D盘(D:/) 空白处上右…