盒模型

在敲代码之前,首先建立一个盒模型,这让写代码的时候变得思路清晰。

本案例中,所要实现的是图片居中显示,超出浏览器窗口部分的图片隐藏。因此,盒模型如图:

图片以浏览器窗口作为定位元素,居中显示。超出浏览器窗口部分的图片则被隐藏。

法一:body元素作为父元素,图片采用img元素

< HTML >

结构部分就是这么简单,我们所需要的实际内容只有一张图片。剩下的则是CSS所完成的部分。

< CSS >

*{

margin:0;/* 1 */

padding:0;/* 2 */

}

html,body{

overflow-x:hidden;/* 9 */

}

body{

position:relative;/* 3 */

min-width:图片宽度的80%;/* 10 */

min-height:图片的高度;/* 8 */

}

img{

position:absolute;/* 4 */

left:50%;/* 5 */

top:0;/* 6 */

margin-left:-图片宽度的一半;/* 7 */

}

说明:注释的部分是代码书写顺序。我们并不是一口气将所有想要的效果直接实现的,而是从最基本效果一步步添加实现的。

首先,我们初始化浏览器信息,内外边距全部设置为0;其次,我们以body作为定位元素,所以要设置body元素的定位方式为相对定位 ; 图片以body元素居中定位,所以要设置定位方式,左右偏距,以及左外偏距为负的图片宽度的一半,这样就实现了图片中心点位于浏览器窗口,即body中心位置。

注意:一旦设置了绝对定位,一定要设置left和top的值,即使上述中不设置top的值没有任何影响情况下,也要设置。

当浏览器窗口宽度小于图片宽度时,超出窗口部分的图片就会溢出,body元素出现滚动条。为了消除滚动条,我们添加/* 9 */这条语句。

注意:消除浏览器窗口滚动条,标准写法是html,body{overflow:hidden;},而不是body{overflow:hidden;}

此时,基本完全实现了功能。但是大家可以尝试下,当窗口的宽度拉到很小时,由于图片始终居中显示,图片两侧超出部分的内容全部被隐藏,使得图片只能显示非常小一部分内容,这显然是不行的。我们希望,当窗口宽度小到一定程度时,图片不再发生位置移动。因此,我们添加了/* 10 */这条语句。设置body的最小宽度,当窗口宽度小于body最小宽度时,body宽度将不再发生变化,自然,img元素以其作为定位元素,img的位置也不会发生变化了。至于最小值取多少,大家可以自己设定。取图片的80%为最小值,可以保证图片大部分有效信息将得到保留。

注意:img元素绝对定位后,对于body父元素来说相当于不存在。此时,body元素的高度为0(不存在任何内容)。因此,为了能够让img元素正常显示,需要设置body元素的高度,且为了能够增加新的内容,应该设置min-height属性。

思考:以body作为父元素进行定位,有什么缺点?

答:显然,img绝对定位后,脱离了文档流(也就是说,对于img元素后面的内容,仿佛img元素不存在了,其他内容会在img元素的位置显示内容,而不是img下面显示内容。)比如:

上面是一张图片

若img元素绝对定位了,则位于img元素后面的p元素,它的内容大家可能就看不到了。原因是,p元素的内容显示在img图片的位置,而img图片又将p元素的内容覆盖了。大家若想查看p元素内容,可以给p元素设置padding-top,值为图片的高度,则可以看到p元素的内容了。

提醒:关于绝对定位,我还想说两点内容。

第一,设置完绝对定位后,是否要给元素设置width和height?

答:一般不需要。绝对定位是对元素进行压缩,压缩到最小尺寸。上述中,我们对img元素绝对定位,img元素是一个行级元素,是无法被压缩的。也就是说,图片的尺寸是多少,绝对定位以后img元素的宽高还是多少。因此,没有必要再重新指定img元素的宽高了。然而,有些情况下,是需要指定width值的。比如,一个块级元素,div或ul。这里用ul元素更能说明问题。假设,原来的ul显示效果示意如图:

我是第一个

我是第二个

ul下的每一个li元素单独占据一行。当ul绝对定位以后,显示效果仍然没变,只是原本li元素是占据整行的宽度,现在被压缩成实际所需要的宽度了。此时,如果我们希望ul中的每一项显示效果示意如图所示:

●我是第一个  ●我是第二个

即水平显示,则我们可以对ul设置width值,width值足够容下两个li元素内容时,自然就水平分布了。

综上,该问题的回答是:高度是不需要设置的。因为一旦设置了高度,则不能够扩展内容。宽度视情况而定,对于图片这样的行级元素,无需设定;对于块级元素,可以设定width值。

第二,绝对定位是怎么个意思,上述举的p元素内容被覆盖怎么理解?

答:绝对定位,大家可以想象成上升一个高度,即浮起来了。比如上述举例中,img绝对定位,它浮起来了,后面的p元素自然钻了空子,占据它原来的位置,并且在img元素的下方。说道这,大家就知道为什么绝对定位后会增加一个属性,叫做z-index。只有绝对定位的元素才有该属性,用来说明该元素浮动了多高。实际上,就是从平面,变成了三维坐标。有人可能会想,img元素不是浮起来了吗,我们将它z-index设置为负值,不就到z轴的负数部分,不就能显示p元素内容了吗?实际上是这样的,对于没有浮动的元素,相当于z-index等于0。因此,我们设置img的z-index为-1,则能显示p元素的内容了。(若仍然看不出,可能是因为p元素的字体颜色,可以设置p元素字体颜色为白色或其他易观察颜色。)

法二:div元素进行定位,图片采用img元素

大部分时候,我们并不想对body元素进行操作,也不想以body元素作为定位元素。同时,以body作为定位元素,img绝对定位以后,后续元素收到绝对定位影响无法正常显示(后续会讲如何解决该问题)。因此,我们设置一个空元素div,以div作为定位元素。盒模型如图:

设置一个空元素div,让该div居中浏览器窗口。图片元素以该div元素进行绝对定位,超出浏览器窗口部分图片被隐藏。

< HTML >

< CSS >

*{

margin:0;/* 1 */

padding:0;/* 2 */

}

html,body{

overflow-x:hidden;/* 10 */

}

#container{

width:800px;/* 3 */

margin:0 auto;/* 4 */

position:relative;/* 5 */

height:图片高度;/* 11 */

}

#container img{

position:absolute;/* 6 */

left:50%;/* 7 */

top:0;/* 8 */

margin-left:-图片宽度的一半;/* 9 */

}

说明:首先还是初始化;设置#container元素居中,所以设置了width值,该值大家可以自己取,决定图片最小有效部分的大小,然后作为定位元素设置为相对定位;设置图片绝对定位,及定位位置;为了消除滚动条,增加/* 10 */这条语句;此时会发现,图片不见了!这是因为被overflow隐藏了。为了显示出图片,需要给作为定位元素的父元素,即#container元素设置一个高度,这个高度就是显示的图片的高度,因此增加了/* 11 */这条语句。

现在我们在img元素下面也加入一个p元素,看看效果。

上面是一张图片

发现,p元素的内容出现在图片的后面,仿佛图片没有脱离文档流一样,我们能看到啦!

实际上,这是因为我们给#container设置了高度的原因,这个高度等于图片的高度,因此图片虽然脱离了文档流,但是被显示地撑了起来,这就是解决绝对定位对后续元素影响的方法:给绝对定位的元素套一个父元素,并设置父元素的高度,撑起来!

比如法一中,若想消除img定位的影响,就可以给img套一个div,然后设置div的高度为图片的高度就行了。

总结:根据不同的盒模型,还有好多种实现方法。同时,img元素也可以用背景图来代替,这样的话,又衍生出好多盒模型。大家自己尝试下吧,有问题或文章哪些不足与错误,请大家留言不吝赐教。

需要牢记的一些东西:

1.设置了绝对定位,一定要设置left和top

2.绝对定位元素会浮起来,视情况设置绝对定位的宽度。

3.绝对定位元素大小超过父元素大小,不会产生溢出。实际上,父元素已经不将绝对定位的元素认作‘儿子’了,看作不存在。

4.消除绝对定位影响的方法,是给作为定位的父元素设置一个高度。

手机端扣扣浏览器图片居中_实现图片始终居中显示于浏览器窗口中心位置相关推荐

  1. 手机端别用谷歌了,好用到爆的小众浏览器你确定不试试

    每天都有各种新鲜事涌入互联网世界,在平时的生活中,我们习惯使用浏览器去探索世界,寻求答案.正因为它的重要性,所以成为手机使用频率很高的软件之一.但是很多手机浏览器界面很复杂,还有很多广告弹窗,用户体验 ...

  2. PC+手机端最好用的去视频、图片水印的工具,再也不折腾Photoshop

    对于小伙伴工作需求需要把视频或者图片除去水印,也是今天一个小伙伴留言问的,很多人不是专业学过photoshop或者不是很熟练,当然很多ps的功能都独立垂直化的,所以可以借助更简单的方式处理,省时省力! ...

  3. android的文本框内容居中显示图片,DIV+CSS中让布局居中_背景图片居中_文字内容居中...

    在DIV CSS布局的页面里,从布局内容到页面里文章文字居中都是非常重要的,而 1.首先介绍使用css属性让整体布局的居中: 设置对象的父级内容居中,这里一个页面的为父级是什么呢?我们可以想象整个页面 ...

  4. 安卓手机端运行的adb工具_苹果、安卓手机端 移动营销、办公+华为云

    企业欠帐.业务员手机下单收款 管理软件试用18092778127王肖 华为云+速达天耀S3: 给您稳定的软件使用环境,24小时的随时使用,极速的扫码出货速度,严谨的客户权限控制: 让您的移动营销.办公 ...

  5. c++浏览器自动化操作_精:C# 利用Selenium实现浏览器自动化操作

    概述 Selenium是一款免费的分布式的自动化测试工具,支持多种开发语言,无论是C. java.ruby.python.或是C# ,你都可以通过selenium完成自动化测试.本文以一个简单的小例子 ...

  6. android手机 环境变量 文件,【图片】【教程】配置安卓Java环境变量【手机端反编译吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我:Baksmaling- 我:加载资源表-- 我:加载. 我:解码AndroidManifest.xml资源-- 从文件加载资源表:? / apktoo ...

  7. 安卓java环境配置文件_【图片】【教程】配置安卓Java环境变量【手机端反编译吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我:Baksmaling- 我:加载资源表-- 我:加载. 我:解码AndroidManifest.xml资源-- 从文件加载资源表:? / apktoo ...

  8. 手机端php mime设置,php,_如何使用MIME协议配合表单在iphone手机上下载文件?,php - phpStudy...

    如何使用MIME协议配合表单在iphone手机上下载文件? 做了一个在线下载音乐网站的工具,使用PHP编写,包含MIME协议中的Content-type&Content-Disposition ...

  9. 关于手机端input获取焦点呼起键盘背景图片挤压解决方案

    1.解决图片挤压问题 可以将背景图片height: 100%改为min-height:100%即可 2.解决android下键盘不遮挡input输入框 // 处理android 下键盘遮挡inputl ...

最新文章

  1. v9php 碎片信息,phpcms v9碎片管理及调用技巧分享
  2. kotlin面向对象之接口、代理与委托、单例模式
  3. 接口中不能有方法体吗-------不是
  4. iOS Icon Size 快速得到三种大小的图标
  5. WeChat:微信小程序设计流程注册完善、设计开发、审核发布之详细攻略
  6. system.img格式打包学习
  7. Python脚本解密RSA加密密码
  8. vs 创建控制器 一直收集信息_日产Pro-Pilot的ADAS控制器拆解
  9. ActiveMQ简述
  10. mysql把latin1编码的中文转成gbk(或utf8)编码
  11. html表格右键可编辑,Bootstrap table右键功能实现方法
  12. python log函数_python装饰器的使用
  13. python有参装饰器详解_Python 带有参数的装饰器实例代码详解
  14. 高等数学学习笔记——第十三讲——变号级数收敛性判别方法
  15. 捕鱼源码 免费提供和分享,仅供unity和Java初学者学习参考,希望能带来帮助
  16. 研华USB4761 C#编程
  17. EPON和GPON的区别
  18. C语言:运算符-符号常量-输入输出
  19. 中国内燃机及配件行业产销状况与未来需求规模预测报告(2022-2027年)
  20. C#项目中Form1页面属性介绍

热门文章

  1. 微信小程序_Flex布局
  2. Whale 帷幄:用户旅程的「情绪算法」
  3. 文件夹打包成pkg_linux如何解压tar.gz到指定文件夹或目录
  4. android am pm命令
  5. 网络安全漏洞原理利用与渗透
  6. SVA(立即断言、并发断言、触发判断)-概述
  7. 内存不能为“read”或written的解决
  8. 华南X99主板-报AE(RE)错误排查
  9. 基于单片机四路多路超声波雷达测距系统设计-毕设课设资料
  10. 枚举法——python