CSS查缺补漏之《媒体查询@media与BFC》

news2024/12/27 12:43:39

示例代码如下:

<div class="box">世界你好</div>
.box {
  width: 200px;
  height: 200px;
  background-color: yellow;
  color: white;
  font-size: 24px;
  text-align: center;
  line-height: 200px;
}

 

媒体类型

媒体类型允许指定文件将如何在不同媒体上呈现,使用媒体类型,可以指定一个媒体查询和一个cdd块,主要有以下几种类型:

all:检测所有设备

screen:检测电子屏幕,包括电脑屏幕、平板屏幕、手机屏幕等

print:检测打印机或打印预览模式

语法如下:

@media 媒体类型
{
    /* 正常写代码样式 */
}
@media print {
      /* 在打印机设备上或在打印预览时显示如下样式 */
      .box {
        background-color: blue;
        color: black;
        text-decoration: 1px solid orange;
        text-align: center;
      }
    }

 

媒体特性

媒体特性(media feature)描述了用户代理、输出设备或环境的具体特性。

媒体特性表达式是完全可选的,其用于检测这些特征是否存在指定值,每个媒体特性表达式都必须用括号括起来~

常见的媒体特性表达式如下:

width: 检测视口宽度

height: 检测视口高度

min-width:检测视口最小宽度

min-height: 检测视口最小高度

max-width:检测视口最大宽度

max-height:检测视口最大高度

device-width:检测设备屏幕的宽度;

max-device-width:检测设备屏幕的最大宽度;

min-device-width:检测设备屏幕的最小宽度;

orientation:检测视口的旋转方向(是否横屏)

        portrait 视口为纵向,即高度大于等于宽度;

        landscape:视口为横线,即宽度大于高度;

@media (min-width: 600px) {
      /* 在所有媒体介质上宽度大于等于600px时显示如下样式 */
      .box {
        background-color: orange;
      }
    }

如在电脑屏幕上,拖动屏幕宽度时,若宽度大于等于800时,背景颜色变为orange;宽度小于800时是黄色;

   

@media (device-width: 1366px) {
      /* 在宽度为1366px的设备上显示如下样式 */
      .box {
        background-color: gray;
      }
    }

媒体查询操作符

逻辑操作符,包含and(与)、or(或)、not(非)、only(仅仅);

 @media screen and (min-width: 600px) {
      /* 在屏幕宽度大于600px的设备上显示如下样式 */
      .box {
        background-color: orange;
      }
    }

上述代码在打印机或打印预览情况下即使宽度大于600也不显示上述效果;

@media not screen {
      /* 在非屏幕类设备上显示如下样式 */
      .box {
        background-color: orange;
      }
    }

上述代码在非屏幕类设备上才显示效果~

或逻辑运算符也可以使用关联,下述两段代码都可在小于200px或者大于800px的设备实现效果

@media (min-width: 800px) or (max-width: 200px)  {
      /* 在小于200px或者大于800px的设备上显示如下效果 */
      .box {
        background-color: orange;
      }
    }
@media (min-width: 800px), (max-width: 200px)  {
      /* 在小于200px或者大于800px的设备上显示如下效果 */
      .box {
        background-color: orange;
      }
    }

媒体查询使用方式

由于可以对不同的媒体设备或规格进行不同的样式定义,除上述方式在对应页面使用外,可通过link标签引入方式;

通过link标签引入方式,利用media属性设置媒体类型

<link rel="stylesheet" media="具体的媒体查询" href="xxx.css文件">

<!-- 在屏幕宽度为1024px的设备上加载如下样式 -->
  <link rel="stylesheet" media="screen and (width: 1024px)" href="xxx.css文件">
<!-- 在屏幕宽度最大为600px的设备上加载smallscreen.css样式 -->
<link rel="stylesheet" media="screen and (max-width: 600px)" href="smallscreen.css">

在xxx.css文件中正常写样式即可~

BFC

BFC(Block Formatting Context,块格式化上下文)是Web页面的可视css渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其它元素交互的区域~

上述解释见mdn块格式化上下文 - Web 开发者指南 | MDN

简言之,某元素通过设置某种样式(满足某些条件),使其产生一些特定影响(解决一些问题),则称该元素开启了BFC(创建了BFC)

开启BFC后可以解决哪些问题(产生哪些影响)

① 元素开启BFC后,其子元素不会再产生margin塌陷问题。

② 元素开启BFC后,自己不会被其它浮动元素所覆盖。

③ 元素开启BFC后,就算其子元素浮动,元素自身高度也不会塌陷

设置哪些样式可以开启BFC?

① 根元素

② 浮动元素

③ 绝对定位或固定定位的元素

④ 行内块元素

⑤ 设置display为table或flow-root

⑥ overflow为非visible的块元素⑦

⑦ 伸缩项目(即设置了display为flex的子元素)

⑧ 多列容器(即设置column-count的元素)

⑨ 设置column-span为all的元素(即使该元素没有包裹在多列容器中)

可以验证,在分别设置上述样式后,均可以解决上述所述的三个问题~

验证一:可以解决margin塌陷问题

如下示例代码会产生margin塌陷问题(第一个子元素margin-top与最后一个子元素的margin-bottom都给了父元素)

<div class="box">
  <div class="box1"></div>
  <div class="box2"></div>
</div>
<div>我是测试代码</div>
.box {
  background-color: rgba(255, 255, 0, 0.647);
  width: 400px;
}
.box1 {
  width: 100px;
  height: 100px;
  background-color: rgba(255, 34, 0, 0.647);
  margin-top: 50px;
}
.box2 {
  width: 100px;
  height: 100px;
  background-color: rgba(0, 255, 21, 0.607);
  margin-bottom: 50px;
}

① 设置浮动,塌陷问题解决~

.box {
  background-color: rgba(255, 255, 0, 0.647);
  width: 400px;
  /* 设置左浮动 */
  float: left;
}

 

② 设置固定、绝对定位,问题解决~

.box {
  background-color: rgba(255, 255, 0, 0.647);
  width: 400px;
  /* 设置定位 */
  position: absolute;
}

③ 变为行内块元素,问题解决~

.box {
  background-color: rgba(255, 255, 0, 0.647);
  width: 400px;
  /* 变为行内块元素 */
  display: inline-block;
}


④ 设置为table,问题解决~

.box {
  background-color: rgba(255, 255, 0, 0.647);
  width: 400px;
  /* 变为table */
  display: table;
}

⑤ 设置overflow为非visible值,问题解决~

.box {
  background-color: rgba(255, 255, 0, 0.647);
  width: 400px;
  /* overflow变为非visible值 */
  overflow: hidden;
}

⑥ 使该元素成为伸缩项目,问题解决~

body {
  /* 使box成为伸缩项目 */
  display: flex;
}
.box {
  background-color: rgba(255, 255, 0, 0.647);
  width: 400px;
}

 

⑦ 设为多列容器,问题解决~

.box {
  background-color: rgba(255, 255, 0, 0.647);
  width: 400px;
  /* 设置为多列容器,且为1列 */
  column-count: 1;
}

 

⑧ 设置column-span为all,问题解决~

.box {
  background-color: rgba(255, 255, 0, 0.647);
  width: 400px;
  /* 使元素没有包裹在多列容器中 */
  column-span: all;
}

⑨ 设置dispaly为flow-root,问题解决~

.box {
  background-color: rgba(255, 255, 0, 0.647);
  width: 400px;
  /* 设置display为flow-root */
  display: flow-root;
}

 

tips:flow-root可产生一个块级元素盒,其会建立一个新的BFC(块级格式化上下文)。


验证二:不会被其它浮动元素覆盖

代码示例如下,如下代码box1设置浮动后,兄弟元素box2会被box1所覆盖~

<div class="box1"></div>
<div class="box2"></div>
.box1 {
  width: 150px;
  height: 100px;
  background-color: red;
  float: left;
}
.box2 {
  width: 100px;
  height: 100px;
  background-color: green;
}

 

① 设置浮动,问题解决~

.box2 {
  width: 100px;
  height: 100px;
  background-color: green;
  float: left;
}

 

 ② 设置定位,问题解决~

.box2 {
  width: 100px;
  height: 100px;
  background-color: rgba(0, 255, 21, 0.607);
  position: absolute;
}

③ 设置为行内块元素,问题解决~

.box2 {
  width: 100px;
  height: 100px;
  background-color: green;
  display: inline-block;
}

 

④ 设置为display为table

.box2 {
  width: 100px;
  height: 100px;
  background-color: green;
  display: table;
}

 

⑤ 设置display为flow-root

.box2 {
  width: 100px;
  height: 100px;
  background-color: green;
  display: flow-root;
}

 

⑥ 设置overflow为非visible的块元素

.box2 {
  width: 100px;
  height: 100px;
  background-color: green;
  overflow: auto;
}

⑦ 设置为伸缩项目

body {
  display: flex;
}

 

⑧ 设置为多列容器

.box2 {
  width: 100px;
  height: 100px;
  background-color: green;
  column-count: 1
}

 

⑨ 设置column-span为all

.box2 {
  width: 100px;
  height: 100px;
  background-color: green;
  column-span: all
}


 验证三:元素开启BFC后,就算其子元素浮动,元素自身高度也不会塌陷

 示例代码如下,下述代码在子元素设置浮动后,自身高度为0(塌陷)

<div class="box">
  <div class="box1"></div>
</div>
.box {
  width: 200px;
  background-color: yellow;
}
.box1 {
  width: 100px;
  height: 100px;
  background-color: red;
  float: left;
}

 

① 设置浮动,问题解决

.box {
  width: 200px;
  background-color: yellow;
  float: left;
}

 

② 设置定位,问题解决

.box {
  width: 200px;
  background-color: yellow;
  float: fixed;
}

 

③ 设置为行内块元素,问题解决

.box {
  width: 200px;
  background-color: yellow;
  display: inline-block;
}

④ 设置display为table

.box {
  width: 200px;
  background-color: yellow;
  display: table;
}

 

⑤ 设置display为flow-root

.box {
  width: 200px;
  background-color: yellow;
  display: flow-root;
}

 

⑥ 设置overflow为非visible

.box {
  width: 200px;
  background-color: yellow;
  overflow: scroll;
}

 

⑦ 变为伸缩项目

body {
  display: flex;
}

 

⑧ 设置column-count

.box {
  width: 200px;
  background-color: yellow;
  column-count: 1;
}

 

⑨ 设置column-span为all

.box {
  width: 200px;
  background-color: yellow;
  column-span: all;
}

 

以上所有例子都可以实现开启BFC,虽然也会产生其它影响~

补充:

column-count与column-span多用于多列布局样式中使用~

column-count:用于设置列数,值为数字。只设置了列数,则会自动计算列宽

column-width:用于设置每一列的宽度,值为长度+px。只设置了列宽,则会自动计算列数

columns: 为列数和列宽的复合属性,能同时制定列宽和列数

column-gap:表示列与列的间距,值为长度+px,默认为10px

column-rule-width: 表示每列的边框宽度

column-rule-style:表示每列的边框线性,solid、dotted等

column-rule-color:表示每列的边框颜色

column-rule为列边款宽度、边款颜色、线性的复合属性,用法有border一样;

column-span:用于指定是否跨列显示,可选值有none(默认)、all(跨所有列)

以最爱的《晴天》为例,

<div class="box">
  <div class="title">晴天</div>
  <div class="title title-sub">以下摘自百度百科</div>
  <div class="p">《晴天》是周杰伦作词、作曲、编曲并演唱的歌曲,收录在周杰伦2003年7月31日发行的专辑《叶惠美》中。</div>
  <div class="p"> 2003年,该曲获得“第十届全球华语音乐榜”港台地区最佳歌曲奖 [1] 。2005年,获得“第四届全球华语歌曲排行榜”年度最受欢迎金曲奖 [2] 。</div>
  <div class="p">《晴天》这首歌曲是周杰伦的内心独白。在创作《晴天》时,周杰伦用一种孤独的内心感受展现了一种细腻和内敛的伤感和脆弱。他所写的内容与方文山营造的神奇诡异不同,更贴近现实和自己内心。该歌曲讲述的是怀念校园的点滴,一起约定,等到放晴的那天,共同来谱一段纯纯的爱。</div>
  <img src="./1687335000873.jpg" alt="">
  <div class="p">《晴天》是一首偏校园怀旧风的Britpop歌曲。这是首浪漫的少年情歌,有风花雪月,更多的是怅然若失,很散文诗式的情怀,用周杰伦的方式演绎,就更带点伤感。这首歌将回忆的思绪充分放大,校园时代的青涩,甜美纯真的爱情,桀骜不驯的叛逆,在这首歌里全都有体现。MV中的大提琴演奏将旋律升华到艺术的气质,最后的rap更是增加了周杰伦独特的情歌特色</div>
  <div class="p">《晴天》MV是在淡水取景拍摄的,由赖薇如担任女主角,与周杰伦担任的男主角有一段亲密的吻戏。该MV以春夏秋冬的恋曲来描述:春天,女主角爱慕着男主角,把男主角衣服上的纽扣给摘走了;夏天,女主角慢慢地接近男主角,关心他,为他做便当,最终两人走到一起;秋天,两人分享一切快乐的时光,但快乐的时光总是短暂的,因为男主角要出国深造;冬天,两人选择分手。在相恋的这两个季节里,女主角陆续给男主角寄9封信,每封信都有一张照片。分手的那天,男主角收到了第9封信,并把所有9封信摆在沙滩上,显示的是:JAY I LOVE U [5] </div>
</div>
.box {
  width: 100%;
  background-color: rgba(246, 210, 7, 0.137);
  font-size: 18px;
  font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
  /* 设置为3列 */
  column-count: 3;
  /* 设置列之间宽度为20px */
  column-gap: 20px;
  /* 设置列边框为4px dotted 紫色 */
  column-rule: 4px dotted rgb(137, 43, 226);
}
.title {
  column-span: all;
  font-size: 24px;
  text-align: center;
  color: rgba(13, 232, 166, 0.682);
  text-shadow: 1px 1px 10px rgba(56, 56, 232, 0.551);
}
.title-sub {
  font-size: 12px;
}
.p {
  text-indent: 20px;
}
img {
  width: 100%;
}

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

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

相关文章

OpenCV——《图像平滑》结果输出对比《形态学操作》

1.图像平滑 图像平滑是一项简单且使用频率很高的图像处理方法&#xff0c;可以用来压制、弱化或消除图像中的细节、突变、边缘和噪声&#xff0c;最常见的是用来减少图像上的噪声。 常用的滤波器主要为&#xff1a; 均值滤波器&#xff1a;并不能完全消除噪声&#xff0c;只能…

【服务器】搭建hMailServer 服务实现远程发送邮件

typora-copy-images-to: upload hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpolar内网映射工具即可实现远程发送邮件,不需要使用公网服务器,不需要域名,而且邮件账号名称可以自定义. 下面以windows 10系统为环境,介绍使用方法: 1. 安装hMailServe…

小鹏G9高压平台800V电驱动实拍

近日&#xff0c;小鹏汽车董事长何小鹏在其个人社交账号上透露&#xff0c;小鹏G9正按原定计划按部就班推进节奏&#xff0c;将于8月启动预订&#xff0c;9月正式迎来上市&#xff0c;上市后很快就会启动用户交付。 图片来源&#xff1a;何小鹏官方微博 需要样件请联&#xff1…

Oracle DMP文件导入

dmp文件可以在Navicat中的 把dmp放入其中。然后用数据泵导入。遗憾的是报错 [ERR] ORA-39001: invalid argument value [ERR] ORA-39000: bad dump file specification [ERR] ORA-39143: dump file "/xxx.DMP" may be an original export dump file 改为imp工具&…

干货分享 | TSMaster标定模块自动化控制应用指南

本文目录&#xff1a; 一、TSMaster标定模块自动化控制的基础原理 1.1 TSMaster的标定系统变量 1.2 内部TSMaster调用C脚本实现标定模块的自动化控制 1.3 外部调用COM组件实现自动化标定 二、标定自动化控制场景与TSMaster实例 2.1 C脚本实现控制标定模块的启动与关闭的设…

Goby 漏洞发布|网神SecGate 3600防火墙 sys_export_conf_local_save 文件读取漏洞

漏洞名称&#xff1a;网神SecGate 3600防火墙 sys_export_conf_local_save 文件读取漏洞 English Name&#xff1a;Weaver OA PluginViewServlet Authentication Bypass Vulnerability CVSS core: 8.0 影响资产数&#xff1a;738 漏洞描述&#xff1a; 网神SecGate 3600防…

同一 tomcat 不同项目 session 共享实现

说明 这里仅讨论 同一个tomcat&#xff0c;部署了两个工程&#xff08;两个war包&#xff09;。不涉及不同tomcat,不涉及集群 背景 tomcat中的工程A包含用户登录、退出、权限控制等功能&#xff1b;工程B包含业务功能接口。工程A将用户登录信息加密响应给前端&#xff0c;前…

基于Java校园快递代取系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

NLP(五十五)LangChain入门

LangChain简介 背景 由于ChatGPT的发行&#xff0c;大模型&#xff08;Large Language Model, LLM&#xff09;已经变得非常流行了。也许你可能没有足够的资金和计算资源从头开始训练大模型&#xff0c;但你仍然可以使用大模型来做一些比较酷的事情&#xff0c;比如&#xff1…

大数据开发薪资怎么样

想必想入行的小伙伴在正式开始学习之前&#xff0c;都会考虑薪资这个可观因素。有不少小伙伴是看中了大数据的薪资选择加入这个行业的&#xff0c;想知道以后能找什么工作以及工作薪水&#xff0c;那不妨让我们以数据的方式来展示一下~ 猎聘大数据研究院发布了《2022未来人才就…

制造执行系统(MES)的核心功能是什么?

制造执行系统&#xff08;MES&#xff09;的核心功能是什么? 01 什么是MES 制造执行系统&#xff08;MES&#xff09;是一种用于监控、控制和优化制造过程的软件系统。它通过与企业资源计划&#xff08;ERP&#xff09;系统和自动化系统的集成&#xff0c;实现对生产过程的管…

小红书品牌营销策略分析!品牌方必看

小红书在品牌营销方面的策略非常成功&#xff0c;特别是在口碑营销、内容营销和小红书素人达人种草营销方面的运用。以下是伯乐网络传媒对这些策略的详细分析&#xff0c;想要做小红书营销推广的商家必看&#xff01; 一、口碑营销 对于小红书APP来说,口碑营销的传播主体就是小…

Android build.gradle文件

一、ABI&#xff08;Application Binary Interface&#xff09;应用程序二进制接口 其实ABI可以不设置&#xff0c;这样编译时&#xff0c;就会将项目里所有依赖资源包里的so库都打到最终的apk里。 但是&#xff0c;ABI支持多的话&#xff0c;apk也会大&#xff0c;所以一般只支…

MySQL数据库——存储引擎

MySQL数据库——存储引擎 一、MySQL存储引擎1.存储引擎的概念2.常用存储引擎3.存储引擎的分类4.企业选择存储引擎依据 二、MyISAM 存储引擎1 MyISAM的相关了解2 MyISAM的特点3 MyISAM表支持3种不同的存储格式4.MyISAM适用的生产场景 三、InnoDB 存储引擎1 InnoDB的相关了解2 In…

探索NDK和逆向工程在Android开发中的力量

NDK是什么&#xff1f; NDK&#xff08;Native Development Kit&#xff09;是一组工具集&#xff0c;用于在Android平台上开发和构建使用C或其他本地语言编写的应用程序。NDK提供了一些库和工具&#xff0c;使开发人员能够在应用中使用本地代码&#xff0c;并实现与Java代码的…

ant+svn项目打包部署错误记录

安装ant可以参考下这个 http://t.csdn.cn/kx1ZX 第一个错误&#xff0c;原因是缺少ant-contrib.jar导致&#xff0c;将对应jar包放入ant的lib下即可 [taskdef] Could not load definitions from resource net/sf/antcontrib/antcontrib.properties. It could not be found. B…

低/无代码平台:公民开发和公民自动化,让人人成为软件开发者

在企业数字化转型领域&#xff0c;公民自动化是一个备受关注的概念。虽然这个词汇可能有些“陌生又熟悉”&#xff0c;但在公民开发运动中已经引起了不小的轰动。那么&#xff0c;什么是公民自动化&#xff1f;它与公民开发之间又有哪些不同&#xff1f; 公民开发是什么&#x…

ATTCK 红日靶场(三)-简记

Step 1-》信息收集 端口 nmap -p -A -sV 192.168.1.110 目录 dirsearch -u 192.168.1.110 --exelude-status 400,401,403,404,501,503 访问 ip/1.php -->根目录、禁用函数 ip/robots.txt !!!------- IP/administrator-->>joomla-cms IP/configuration.php~--&…

利用uniapp创建移动端项目

目录 申请微信开发者账号 一、特殊声明 二、申请微信开发者账号 创建小程序项目 一、引言 二、创建小程序工程 三、uni-app框架简介 初识uniapp项目 一、uni-app工程目录结构 二、创建练习页面 创建登录页面 一、拷贝所有素材文件 二、创建登陆页面 创建注册页面 …

【机器学习与遥感】sklearn与rasterio实现遥感影像监督分类

在学习遥感的过程中&#xff0c;我们都了解到了监督分类与非监督分类&#xff0c;二者是遥感解译的基础。之前更多的是使用Erdas与ENVI来进行这两种分类。这里使用python语言&#xff0c;基于机器学习库sklearn与遥感影像处理库rasterio&#xff0c;使用kmeans动态聚类方法实现…