如何固定最小宽度_如何使用更新的HTML和CSS函数创建响应式设计

6ba25ce01ef26601b2ed44042adea971.png除了使用媒体查询和现代css布局(如flexbox和grid)来创建响应式网站外,我们还可以做好某些被忽视的事情来制作响应式网站。在本文中,我们将探讨许多可用的工具(围绕html和css),从响应图像到相对较新的CSS函数,无论我们是否使用媒体查询,它们都可以正常工作。d44a91f2e7f7b671a7637434514fe51c.png事实上,媒体查询与这些功能一起使用时,更多的是成为一种补充,而不是完整的方法。让我们来看看是如何运作的。

真正的响应式图像

还记得当我们可以在图片上写死 width: 100% ,然后就可以下班了吗?当然,这样做还是有效果的,也确实能让图片变得更有弹性,但也会带来一些弊端,其中最明显的包括:
  • 图像可能会变形到失去焦点的程度。

  • 较小的设备仍会下载完整尺寸的图像。

在网络上使用图像时,我们必须确保在分辨率和尺寸方面进行了优化。原因是为了确保我们有合适的图像分辨率以适应合适的设备,所以我们不会最终为较小的屏幕下载非常大和沉重的图像,这可能会降低网站的性能。简单来说,我们要确保较大的、高分辨率的图像被发送到大屏幕上,而较小的、低分辨率的变化被发送到小屏幕上,从而提高性能和用户体验。html提供了 元素,该元素使我们可以根据所添加的媒体查询来指定要呈现的确切图像资源。如前所述,我们没有将一个图像(通常是一个大的、高分辨率的版本)发送到所有屏幕大小并将其缩放到视口宽度,而是指定一组用于特定情况的图像。
<picture>  <source media="(max-width:1000px)" srcset="picture-lg.png">  <source media="(max-width:600px)" srcset="picture-mid.png">  <source media="(max-width:400px)" srcset="picture-sm.png">  <img src="picture.png" alt="picture"">picture>
在此示例中,picture.png 是全尺寸图像。从那里,我们定义了图片的下一个最大版本,picture-lg.png,大小依次减少,直到最小的版本 picture-sm.png。请注意,我们在这种方法中仍然使用媒体查询,但驱动响应行为的是 元素本身,而不是在CSS中定义断点。媒体查询已适当添加,以随图片大小缩放:
  • 大于等于1000px的视口将获得 picture.png。

  • 介于601像素和999像素之间的视口将获得 picture-lg.png。

  • 介于401像素和600像素之间的视口将获得 picture-sm.png。

  • 任何小于400px的东西都会得到 picture-sm.png。

有趣的是,我们还可以在URL后按图像密度给每张图片贴上标签——1x、2x、3x等等。如果我们把不同的图片按比例制作好了就可以了,这样浏览器就可以根据屏幕的像素密度以及视口大小来决定下载哪个版本。但是请注意,我们最终定义了多少个图像:
<picture>  <source media="(max-width:1000px)" srcset="picture-lg_1x.png 1x, picture-lg_2x.png 2x, picture-lg_3x.png 3x">  <source media="(max-width:600px)" srcset="picture-mid_1x.png 1x, picture-mid_2x.png 2x, picture-mid_3x.png 3x">  <source media="(max-width:400px)" srcset="picture-small_1x.png 1x, picture-small_2x.png 2x, picture-small_1x.png 3x">  <img src="picture.png" alt="picture"">picture>
让我们专门看一下嵌套在 元素内的两个标签: 和 。浏览器将查找媒体查询与当前视口宽度匹配的第一个 元素,然后将显示正确的图像(在 srcset 属性中指定)。 元素是 元素的最后一个子元素,如果没有原始源标签匹配,则作为后备选项。9244e2471729563e6d031a0745c30075.png我们还可以使用图像密度通过 srcset 属性仅使用 元素来处理响应图像:
<img srcset="  flower4x.png 4x,  flower3x.png 3x,  flower2x.png 2x,  flower1x.png 1x " src="flower-fallback.jpg">
我们可以做的另一件事是在CSS中根据设备本身的屏幕分辨率(通常以dots per inch或dpi为单位)而不仅仅是设备视口来编写媒体查询。这意味着,代替:
@media only screen and (max-width: 600px) {  /* Style stuff */}
我们现在有:
@media only screen and (min-resolution: 192dpi) {  /* Style stuff */}
这种方法让我们可以根据设备本身的屏幕分辨率来决定渲染什么图像,这在处理高分辨率图像时可能会有帮助。基本上,这意味着我们可以为支持更高分辨率的屏幕显示高质量的图片,并以较低的分辨率显示较小的版本。值得注意的是,虽然移动设备的屏幕很小,但它们的分辨率通常很高。这意味着在决定渲染哪张图片时,仅仅依靠分辨率可能不是最好的主意。这可能导致在非常小的屏幕上显示大的、高分辨率的图像,这可能不是我们真正想要在如此小的屏幕上显示的版本。
body {  background-image : picture-md.png; /* the default image */}@media only screen and (min-resolution: 192dpi) {  body {    background-image : picture-lg.png; /* higher resolution */  }}
给我们提供的基本上是对图像进行艺术指导的能力。而且,根据这个想法,我们可以利用CSS的特性,比如 object-fit 属性,当与 object-position 一起使用时,我们可以裁剪图像以获得更好的焦点,同时保持图像的纵横比。因此,要更改图像的焦点:
@media only screen and (min-resolution: 192dpi) {  body {    background-image : picture-lg.png;    object-fit: cover;    object-position: 100% 150%; /* moves focus toward the middle-right */  }}

在CSS中设置minimum和maximum

min() 函数指定一个元素可以缩小到的绝对最小尺寸。这个函数在帮助文本大小在不同屏幕大小之间适当缩放方面非常有用,比如永远不要让流体类型下降到一个清晰的字体大小以下:
html {  font-size: min(1rem, 22px); /* Stays between 16px and 22px */}
min() 接受两个值,它们可以是相对、百分比或固定单位。在这个例子中,我们告诉浏览器永远不要让带有 .box 类的元素宽度低于45%或600px,以视口宽度最小的为准。
.box {  width : min(45%, 600px)}
如果45%计算得出的值小于600px,则浏览器将使用45%作为宽度。反之,如果45%的计算值大于600px,那么元素的宽度将使用600px。max() 函数也是同样的道理,它也接受两个值,但不是指定一个元素的最小尺寸,而是定义它的最大尺寸。
.box {  width : max(60%, 600px)}
如果60%计算出的数值大于600px,浏览器就会使用60%作为宽度。反过来说,如果60%的计算值小于600px,那么将使用600px作为元素的宽度。

钳制(Clamping)值

我们中的许多人已经为clip()叫嚣了一段时间,实际上我们在所有现代浏览器中都得到了广泛的支持(对不起,IE)。clamp() 是 min() 和 max() 函数的组合,接受三个参数:
  1. 最小值

  2. 首选值,以及

  3. 最大值

例如:
.box {  font-size : clamp(1rem, 40px, 4rem)}
浏览器会将字体设置为1rem,直到1rem的计算值大于40px。而当计算值大于40px时?是的,浏览器在达到4rem后将停止增加大小。你可以看到如何使用 clip() 来使元素变得流畅,而无需使用媒体查询。

与响应单位合作

你是否曾经建立过一个大标题或小标题的页面,并羡慕它在桌面屏幕上看起来有多好,但在移动设备上检查时却发现它太大了?我肯定会遇到这种情况,在本节中,我将解释如何处理此类问题。在CSS中,你可以使用各种度量单位来确定元素的大小或长度,最常用的度量单位包括:px,em,rem,%,vw 和 vh。虽然,还有一些不常用的单位。我们感兴趣的是,px 可以认为是一个绝对单位,而其余的则认为是相对单位。

绝对单位

像素(px)被视为绝对单位,主要是因为像素是固定的,并且不会因其他任何元素的测量而变化。可以将其视为其他一些相对单位使用的基本单位或根单位。试图使用像素来进行响应行为可能会碰到问题,因为它是固定的,但如果你有一些根本不应该调整大小的元素,它们是很好的。

相对单位

相对单位,如 %、em 和 rem,更适合响应式设计,主要是因为它们能够跨越不同的屏幕尺寸进行缩放。
  • vw:相对于视口的宽度

  • vh:相对于视口的高度

  • rem:相对于根()元素(默认字体大小通常为16px)

  • em:相对于父元素

  • %:相对于父元素

同样,大多数浏览器的默认字体大小是 16px ,rem 单位使用它来生成计算值。所以,如果用户在浏览器上调整字体大小,页面上的所有内容都会根据根部大小正确缩放。例如,当处理一个根为 16px 时,你指定的数字将乘以该数字乘以默认大小。例如:
.8rem = 12.8px (.8 * 16)1rem = 16px (1 * 16)2rem = 32px (2 * 16)
如果你或用户更改默认大小怎么办?我们已经说过,这些都是相对单位,最终的尺寸值将以新的基本尺寸为基础。这在媒体查询中很有用,你只需改变字体大小,整个页面就会相应地放大或缩小。例如,如果你在CSS中把字体大小改为10px,那么计算出来的大小就会变成。
html {  font-size : 10px;}
1rem = 10px (1 * 10)2rem = 20px (2 * 10).5rem = 5px (.5 * 10)
注意:这也适用于百分比 %。例如:
100% = 16px;200% = 32px; 50% = 8px;
rem 和 em 单位有什么区别?rem 使用根元素()的字体大小来计算值,而声明 em 值的元素则引用包含它的父元素的字体大小。如果指定的父元素和根元素的大小不同(例如父元素是18px,但根元素是16px),那么em和rem将解析为不同的计算值。这让我们可以更精细地控制我们的元素在不同的响应环境中的响应方式。vh 是视口高度的首字母缩写,也就是可视屏幕的高度,100vh代表视口高度的100%(取决于设备)。同理,vw 代表视口宽度,意为设备的可视屏幕宽度,100vw字面意思是代表100%的视口宽度。

超越媒体查询

看到了吗?我们刚刚看了一些非常强大且相对较新的 HTML 和 CSS 功能,它们为我们提供了额外的(可能更有效的)构建响应性的方法。这并不是说这些新技术取代了我们一直在做的事情。它们只是我们开发者工具带中的更多工具,让我们有更大的控制权来决定元素在不同上下文中的行为。无论是对字体大小、分辨率、宽度、焦点,还是任何事物的处理,我们对用户体验的控制都比以往更加精细。所以,下次当你发现自己在一个项目上工作时,你希望在特定设备上对设计的确切外观和感觉有更多的控制,看看原生HTML和CSS能帮上什么忙——事情已经发展到令人难以置信的地步了。本文完~56d43d7d2ca10fc8c0db9769523e7717.pngba8df80eec7c5dddeab33f063262e055.png

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

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

相关文章

如何将文件二进制传输至aix服务器,有什么办法把文件从WINDOWS系统中传到AIX中?...

有什么办法把文件从WINDOWS系统中传到AIX中&#xff1f;(2011-12-21 04:19:38)标签&#xff1a;杂谈有什么办法把文件从WINDOWS系统中传到AIX中&#xff1f;我有一台笔记本可以远程登陆170和F85&#xff0c;两台都是AIXV5.2&#xff0c;原来ML是04&#xff0c;想升级&#xff0…

小米手机硬改技术_小米11手机爆料:首发骁龙875 或采用屏下摄像头技术

12月1日高通应该就要公布骁龙875处理器&#xff0c;而对于这颗2021年的旗舰芯片&#xff0c;小米手机必然要抢首发&#xff0c;这也是他们一贯的传统。据最新消息称&#xff0c;小米11手机有望首发骁龙875处理器&#xff0c;不过这款手机预计要在明年3月份左右推出&#xff0c;…

小企业文件打印服务器,小企业云服务器方案

小企业云服务器方案 内容精选换一换在“确认配置”页面&#xff0c;查看云服务器配置详情。如果您对价格有疑问&#xff0c;可以单击“了解计费详情”来了解产品价格。如果您对价格有疑问&#xff0c;可以单击“了解计费详情”来了解产品价格。企业项目该参数针对企业用户使用。…

5怎么选国外节点_外卖包装怎么选?这5个技巧要掌握

(↑点上图“知识卡片”&#xff0c;按右上角箭头&#xff0c;可分享至朋友圈保存↑)在这个重颜值的时代&#xff0c;消费者对于外卖包装的诉求在逐渐提高&#xff0c;在餐品质量差异不大的前提下&#xff0c;那些包装好的商品&#xff0c;更具市场竞争力&#xff0c;能加深消费…

基于jmx监控kafka_0542-6.1.0-非安全环境下Kafka管理工具Kafka Eagle安装使用

1.文档编写目的Fayson在前面的文章介绍了《0374-如何在CDH集群中部署Kafka Manager》&#xff0c;本篇文章Fayson介绍另外一款的监控工具Kafka-eagle&#xff0c;它可以同时监控多个集群&#xff0c;监控集群中Topic的被消费情况(包含Lag产生、Offset的改变及Partition分布)&am…

android 怎么调用js项目_APP逆向神器之Frida【Android初级篇】

说到逆向APP&#xff0c;很多人首先想到的都是反编译&#xff0c;但是单看反编译出来的代码很难得知某个函数在被调用时所传入的参数和它返回的值&#xff0c;极大地增加了逆向时的复杂度&#xff0c;有没有什么办法可以方便地知道被传入的参数和返回值呢&#xff1f;答案是有的…

ef mysql modelfirst_MySQL –EF edmx(Model First)– Sql Server table

一、mysql environmentWhen we create an new database,first We need draw er diagram for somebody to show your idea,but our company have no goodauthorised tool to design sqlserver ER diagram,so I use mysql graphical tool to design it, after that,you can use m…

db2 联邦 mysql_DB2联邦数据库及配置方法(及联邦密码修改)

如果您需要使用所有不同的数据库&#xff0c;包括选择、插入、更新和删除&#xff0c;就象所有的表都位于单个数据库中那样&#xff0c;那么将获得非常高的工作效率。数据库联邦就是要做到这一点&#xff1a;使所有表看起来象是在同一个数据库中那么&#xff0c;数据库联邦是怎…

mysql t 保存_检查 (调试) - 离线消息保存到 MySQL - 《EMQ X Enterprise v4.1 中文文档》 - 书栈网 · BookStack...

离线消息保存到 MySQL搭建 MySQL 数据库&#xff0c;并设置用户名密码为 root/public&#xff0c;以 MacOS X 为例:$ brew install mysql$ brew services start mysql$ mysql-u root-h localhost-pALTER USERrootlocalhostIDENTIFIED BYpublic;初始化 MySQL 数据库:$ mysql-u r…

java @valid 密码不一致_一个成熟的Java项目如何优雅地处理异常

(一)概述异常处理是一个系统最重要的环节&#xff0c;当一个项目变得很大的时候&#xff0c;异常处理和日志系统能让你快速定位到问题。对于用户或者接口调用者而言&#xff0c;优雅的异常处理可以让调用者快速知道问题所在。本文将介绍如何优雅地处理异常。(二)使用通用的返回…

spark消费kafka产生数据堆积怎么处理_SparkStreaming读取Kafka的两种方式

本文主要从以下几个方面介绍SparkStreaming读取Kafka的两种方式:一、SparkStreaming简介二、Kafka简介三、Redis简介(可用于保存历史数据或偏移量数据)四、SparkStreaming读取Kafka数据的两种方式 五、演示Demo一、SparkStreaming简介可以参考这篇文章&#xff1a;SparkStreami…

python字符串操作作业_python 第二天作业

#python 中的循环#先介绍for循环#格式#for 临时变量 in 可迭代对象# 循环体#name neusoft#for a in name :# print(a)# if a s# print(嘿嘿)#循环次数哪里去了&#xff1f;# #这个a是什么鬼&#xff1f; a是临时变量 提前声明 python自动为你创建#range (起始位置&#xff0c…

python 白化_Python新疆某气候要素IDW(反距离权重)插值

1、Rbf插值import numpy as npimport cartopy.crs as ccrsimport cartopy.feature as cfeatfrom cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTERfrom cartopy.io.shapereader import Readerimport matplotlib.pyplot as pltimport matplotlib.ticker a…

帆软报表参数传给网络报表_报表开发工具FineReport的使用: 程序网络报表

1定义程序网络报表程序网络报表所在类需要继承com.fr.web.reportlet这个抽象类&#xff0c;并且需要实现createReport(ReportletRequest arg0)这个方法&#xff0c;并返回报表对象。具体代码如下&#xff1a;2//程序网络报表package com.fr.demo; import java.util.Map;impo…

bootstrap 取消_学习写个网站(5)Bootstrap学习2

吃了2天烧烤夜宵&#xff0c;还是得讲点自律。【正文】继续bootstrap&#xff0c;还是菜鸟教程。11. 分页就是还有种就是翻页&#xff0c;12. 标签class"label label-default">默认标签</span>label-primarylabel-success13. 警告就是那种可以取消的消息&am…

jdbc mysql user_tab_comments_MySQL学习(五)——使用JDBC完成用户表CRUD的操作

通过案例我们发现“获得连接”和“释放资源”两次代码将在之后的增删改查所有功能中都存在&#xff0c;开发中遇到此种情况&#xff0c;将采用工具类的方法进行抽取&#xff0c;从而达到代码的重复利用。1、使用properties配置文件开发中获得连接的4个参数(驱动、URL、用户名、…

mysql中try的意思_java中try是什么意思

try是Java中的关键字&#xff0c;主要用于异常处理机制&#xff0c;那么它有什么作用呢&#xff1f;try – 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内&#xff0c;当try语句块内发生异常时&#xff0c;异常就被抛出。它一般与catch..finally组合使用块…

linux用java连接mysql_Java使用JDBC方式连接数据库

开发一个JDBC应用程序&#xff0c;基本需要以下几个步骤&#xff1a;1.把JDBC驱动类装载入Java虚拟机中。使用java.lang.Class类的静态方法forName(String className)实现。例&#xff1a; Class.forName("JDBC驱动类名称")2.加载驱动&#xff0c;并与数据库建立连接…

java web gradle_gradle学习之旅(四) 使用gradle构建简单的java web项目

本节通过一个简单的javaweb项目来体会gradle的使用需求构建一个javaweb项目&#xff0c;搭建jspservlet开发环境可以将需求分解为两步&#xff1a;使用gradle构建一个java项目为该项目构建web视图层工具gradle4.3ideajdk 1.8实验过程首先在idea中创建一个空的gradle项目创建如下…

java 整数 引用传递_关于Java引用传递的一个困惑?

Java的引用(包括基本类型&#xff0c;对象引用类型)在声明、方法调用等时候都会产生新的引用&#xff0c;复制等号右侧的引用。分为下面3种情况&#xff1a;基本类型代表的值存储在引用里面&#xff0c;引用中专门有个区域存储这个值&#xff0c;所以在复制的时候&#xff0c;值…