CSS之不使用Media Queries的自适应CSS

虽然标题说不用Media Queries,但我还是要在开头讲清楚,本文并不是要大家丢掉Media Queries,也不是要抨击Media Queries。Media Queries实际上非常有用,我在各种地方都会用到。但Media Queries并不能解决所有的自适应的设计问题

本文要解决的是根据元素所在的组件本身的大小来决定元素的排列,而不是整个视窗的宽高的问题

第一种. flex-wrap的Flexbox

Flex-wrap可以解决很多和容器大小相关的自适应性问题。例如,如果有足够的空间,那就把两个元素并排陈列;如果没有足够空间,就把这两个元素上下排列

没有什么华丽的技巧,就是用了flex-wrap的Flexbox,非常完美。Flexbox可以用在很多种情况下,比如下面这个两列的情况,不过这个例子其实是我简化后的。核心部分其实非常简单

这里写图片描述

第二种. 神奇四剑客

使用width,min-width,max-width以及calc(也就是“神奇四剑客”)来创建一个基于分隔点(25em)的宽度变化解决方案,是Rémi Parmentier的点子。这最初是用来做自适应的邮件模板,然后就扩展到了平常的web页面,现在以及发展到,可以用来创建各种自适应的模块

这里写图片描述

这个方法在width是百分比的时候很有效,也就是元素宽度是所在容器宽度的百分比的时候有效。然后,calc函数将该值与所需的断点做减法,如果宽度值小于断点,那会得到一个非常大的正数,或者如果宽度值大于断点,那会得到一个非常大的负数,或者两者完全相等,得到零。但是有max-width 和min-width 对较大的正数或者负数进行封顶

这里,我们的断点设的是25em。字号是16px的话,就相当于400px。如果容器宽度在400px及以上,也就是大于或等于断点,该元素的宽度就是0了,(400 - 400 = 0) * 1000 = 0或者(400 - 401 = -1) * 1000 = -1000

像这样的情况,min-width就会生效,元素的宽度就会变成50%。然而,如果容器的宽度是399px或者更低(也就是比断点更小),那么这个元素的宽度就是个很大的正数:(400 - 399 = 1) * 1000 = 1000

这样的话,max-width就生效,最后的结果就是100%。下面这个图也许可以帮你理解这个逻辑

这里写图片描述

这里上面的图表示当断点距离400px小于容器宽度100%的时候,因为结果会是一个非常大的负值,所以就会取min-width的宽度,也就是父容器的50%

这里下面的图表示当断点距离400px大于容器宽度100%的时候,因为结果会是一个非常大的正值,所以就会取max-width的宽度,也就是父容器的100%

下面的几个demo使用了上面的这些技巧,通过不同的方式来切换元素的宽度以适应其容器宽度

2.1 浮动图片:整体和部分的宽度处理

这个例子里,我会使用神奇四剑客和float属性,阐述如何根据断点确定容器的宽度来切换图片显示的方法(图片占容器的所有宽度和容器的部分宽度的方法)

这里写图片描述

这里写图片描述

这里写图片描述

这里当屏幕大于等于40em的时候,添加md-50类的div的最大宽度是50%,而如果屏幕小于40em的时候就不再遵循这个css样式

然后计算图片容器div所占据的宽度,因为图片已经100%充满图片容器,所以图片容器到底占据屏幕的一半还是全部就成为图片是怎么展示的关键了,这里当大于断点的时候就会取最大值max-width–100%,也就是占据屏幕展示区域的全部,所以此时图片就在全部的展示区域内显示,而如果小于断点的时候就会取最小值min-width–50%,也就是图片占据屏幕展示区域的一半显示

这里写图片描述

这里首页展示区域大于等于40em,所以div的宽度是展示区域的50%,而图片容器小于断点,所以取min-wdith占据展示区域的一半

这里写图片描述

这里首页展示区域小于40em,所以div的宽度是展示区域的100%,而图片容器大于断点,所以取max-wdith占据展示区域的全部

这里就是根据外部容器不同的宽度来决定内部图片是怎么排列的

2.2 浮动图片的显示和隐藏

接着上面的例子,我改了一下计算逻辑,去掉了min-width,好做一个开关。这个方法在容器宽度较小时可以有效节省可用空间

这里写图片描述

当小于25em的时候,width变成0或者负值,那么图片容器便会消失

这里也是根据外部容器的变化来决定内部图片是展示还是隐藏的效果

2.3 文字和图片:覆盖和堆叠

这里写图片描述

和前例的代码相似,不过我又额外增加了一个div来把文字覆盖到图片上,但如果图片过小,那么反而文字会让图片不清晰,这时就把文字排放在图片下。这个技巧有些复杂,所以我在这解释一下

这里写图片描述

这里,负的margin会把文字的位置上移,好让它能够覆盖图片区域。随着容器宽度变小,我需要让它消失,否则它就会覆盖图片,但由于此时没有min/max-width的属性限制,我们就不能用神奇四剑客的方法做到这一点

不过好在有另一种方法,如果padding是百分比数值,那么它就是容器宽度的百分比,而padding-top和padding-bottom都会影响元素的高度,这样就能通过容器宽度的变化达到间接控制容器高度的办法。了解这一点以后,我们就可以创造一个根据容器宽度变化而变化的padding-bottom

padding-bottom:calc((30em - 100%) * 1000)

我们不能给这个.pull 的div直接使用min/max-padding的类似方法,因为没有这样的属性;正确的做法是设法给这个padding加一个开关,这个开关是通过增加一个伪元素并控制这个伪元素的高度实现的,当宽度变化到30em的时候这里padding-bottom就变成了0,那么伪元素就不存在了,伪元素不存在那么pull这个div也就不存在了

这里展示了根据外部容器的变化来决定内部文字容器是怎么覆盖图片的

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

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

相关文章

Taro+react开发(32) Please use the ‘new‘ operator, this DOM object constructor cannot be called as a fu

2.Failed to construct Image: Please use the new operator, this DOM object constructor cannot be called as a function 像上面这种错误都是使用了元素,但没有import到文件导致。

0920

今天的亚洲区网络赛我们学校第一次把工大和工程干掉了 有一种慕名奇妙的自豪感 转载于:https://www.cnblogs.com/zhanzhao/p/3983866.html

Linux下的文件系统与目录系统简介

Linux下的文件系统与目录系统简介一. 文件系统 LINUX有四种基本文件系统类型:普通文件、目录文件、连接文件和特殊文件,可用file命令来识别。 普通文件:如文本文件、C语言元代码、SHELL脚本、二进制的可执行文件等,可用cat、less、…

修改DOS窗口编码格式

1、打开CMD.exe命令行窗口 2、通过 chcp命令改变代码页,UTF-8的代码页为65001 F:\trash> chcp 65001执行该操作后,代码页就被变成UTF-8了。但是,在窗口中仍旧不能正确显示UTF-8字符。 3、修改窗口属性,改变字体 在命令行标题栏…

CSS3属性之text-indent文本缩进使用详解

1、定义:text-indent 属性规定文本块中首行文本的缩进。 2、使用: 将段落的第一行缩进2em: div{text-indent:2em;} 注意: 1em等于一个汉字的大小 3、注意事项: 3-1、允许使用负值。如果使用负值,那么首行会被缩进…

CSS之Responsive设计和CSS3 Media Queries的结合

随着高科技的发展,现在我们浏览网页不在局限于PC机上了,用户可使用上网的设备是越来越多的品种:手机、小笔记本、iPad、Playbook,以及PC机,而且PC机的显展大小各不一致。这样一来不同的屏幕分辨率范围就产生了&#xf…

服务器性能测试典型工具介绍

服务器性能测试典型工具介绍 众所周知,服务器是整个网络系统和计算平台的核心,许多重要的数据都保存在服务器上,很多网络服务都在服务器上运行,因此服务器性能的好坏决定了整个应用系统的性能。现在市面上不同品牌、不同种类的服务…

select count(*) into 也会报 NO_DATA_FOUND 异常?!

From: http://www.cnblogs.com/howelei/archive/2006/12/21/599268.html 我们知道NO_DATA_FOUND异常情况仅仅被SELECT..INTO语句触发,当该WHERE子句没有找到任何行的时候就会触发它。 解决的方法通常有两种: 一种是我们将查询语句写成游标,这…

CSS之Responsive设计的关键三步

下面我们就通过这篇教程,帮助大家从三个步骤来了解和学习“Responsive”设计 第一步:Meta标签 大家都知道,现在智能手机上浏览web页面会让页面适应屏幕的大小,显示在屏幕上。不过我们可以通过“meta”标签对他进行重置&#xff…

三招快速重新打开被关闭的Chrome标签页

在 Chrome 这样的多标签页浏览器中,不小心关闭一个标签页实在是太常见的事情了。当这种情况发生时,我们有三个办法可以重新打开这个刚刚关闭的页面。 1,打开一个新的标签页,在新标签页页面最下方会有一行 Recently closed 最近关闭…

JS获取当前对象大小以及屏幕分辨率等

这些天用JS调界面,就在网络上搜索了一些关于获取当前窗口对象大小的写法.记录一下~ JS获取大小各参数<script>function getInfo(){var s ""; s " 网页可见区域宽&#xff1a;" document.body.clientWidth; s " 网页可见区域高&#xf…

有了JSON.stringify(),处理json将变得更简单!!

之前处理json 需要拼接json字符串&#xff0c;但是&#xff0c;如果用上JSON.stringify()的话&#xff0c;忘了json语法以没关系了.....1 {2 ViewBag.Title "GetStr";3 }4 5 <html>6 <head>7 <title> </title>8 &l…

CSS之七个高度有效的媒体查询技巧

我们都知道&#xff0c;Media Queries是实现响应式设计的秘密武器。在这篇文章中&#xff0c;将向大家介绍制定高质量的Media Queries需要注意的一些事项 1. 让内容确定断点 很多时候&#xff0c;在响应式设计中&#xff0c;你经常看到的断点值是&#xff1a;320px、480px、7…

vue项目使用.env文件配置全局环境变量

关于文件名&#xff1a;必须以如下方式命名&#xff0c;不要乱起名&#xff0c;也无需专门手动控制加载哪个文件 .env 全局默认配置文件&#xff0c;不论什么环境都会加载合并 .env.development 开发环境下的配置文件 .env.production 生产环境下的配置文件 关于文件内容&a…

在HTML网页中使用ActiveX控件

From: http://blog.163.com/haizai219126/blog/static/4441255520097264447968/ 1. 摘要&#xff1a; 在企业应用中&#xff0c;为了实现一些特殊的功能&#xff0c;如播放自有协议的视频&#xff0c;我们需要在传统的HTML网页中插入ActiveX控件&#xff0c;由ActiveX控件来满足…

CSS之深入理解 flex 布局以及计算

起因&#xff1a;对于Flex布局&#xff0c;阅读了大漠老师和其他老师写的文章后&#xff0c;我还是不太理解Flexbox是如何弹性的计算子级项目的大小以及一些其他细节。在大漠老师的帮助下&#xff0c;我去查阅Flexbox 的 W3C 规范文档 1. 对于flex盒模型的设计期望&#xff1a…