px fr em rem

本文详细解析了CSS中的四种单位:px像素、fr自适应单位、em相对长度单位和rem单位。探讨了它们的特点、应用场景及相互之间的区别,尤其强调了rem单位在网页布局中的优势。

一、px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。

特点:

1. IE无法调整那些使用px作为单位的字体大小;

2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位;

3. Firefox能够调整px和em,rem,但是96%以上的中国网民使用IE浏览器(或内核)。

 

二、fr是一个自适应单位,fr单位被用于在一系列长度值中分配剩余空间,如果多个已指定了多个部分,则剩下的空间根据各自的数字按比例分配。

 

三、em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。

特点: 

1. em的值并不是固定的;

2. em会继承父级元素的字体大小。

 

四、rem与em区别在于使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。

这个单位集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应

 

转载于:https://www.cnblogs.com/huxiang/p/10044167.html

请将该vue项目中的响应式布局调整为可以自适应各个打开端屏幕大小尺寸的方法:<template> <!-- 体验页面 --> <div class="experience"> <!-- 顶部导航栏 --> <NavBar /> <div class="container"> <!-- 首图内容区域 --> <div class="content-banner"></div> <div class="content-wrapper"> <!-- 商务之旅 --> <div class="business margin-top-50"> <div class="img-box"> <responsive-image class="hd01" :small-image="hd01.smallImage1" :medium-image="hd01.mediumImage1" :large-image="hd01.largeImage1" alt-text="Description of image" /> <!-- <img src="../../assets/experience/hd-01.png" alt="" /> --> </div> <div class="text-box"> <p class="title-zh text-center" :class="{ textEn: $i18n.locale === 'en' }"> {{ $t('Business') }}</p> <p class="content margin-top-20" :class="{ textEn: $i18n.locale === 'en' }"> {{ $t('text7') }} </p> <p class="more" :class="{ textEn: $i18n.locale === 'en' }"> {{ $t("more14") }} </p> </div> </div> <!-- 旅游度假 --> <div class="tourism margin-top-50"> <div class="text-box"> <p class="title-zh text-center" :class="{ textEn: $i18n.locale === 'en' }">{{ $t('trip') }}</p> <p class="content margin-top-20" :class="{ textEn: $i18n.locale === 'en' }"> {{ $t('text8') }} </p> <p class="more" :class="{ textEn: $i18n.locale === 'en' }"> {{ $t("more15") }} </p> </div> <div class="img-box"> <responsive-image class="hd02" :small-image="hd02.smallImage2" :medium-image="hd02.mediumImage2" :large-image="hd02.largeImage2" alt-text="Description of image" /> <!-- <img src="../../assets/experience/hd-02.png" alt="" /> --> </div> </div> </div> <!-- 查看客房 --> <div class="content-swiper"> <div class="content-kefang"> <p class="title-zh text-center" :class="{ textEn: $i18n.locale === 'en' }">{{ $t('Guest') }}</p> <!-- 轮播图 --> <div class="foot-swiper-box margin-top-50"> <RoomSwiper :bannerList="roomBannerList" /> </div> </div> <div class="content-kefang"> <p class="title-zh text-center" :class="{ textEn: $i18n.locale === 'en' }">{{ $t('Apartment') }}</p> <!-- 轮播图 --> <div class="foot-swiper-box margin-top-50"> <RoomSwiper :bannerList="apartBannerList" /> </div> </div> <div class="device"> <p class="title-zh text-center" :class="{ textEn: $i18n.locale === 'en' }">{{ $t('Facilities') }}</p> <div class="device-content margin-top-50"> <div class="img-box"> <img src="../../assets/experience/hd-01.png" alt="" /> </div> <div class="text-box"> <ul class="device-list"> <li class="text" :class="{ textEn: $i18n.locale === 'en' }">{{ $t('WiFi') }}</li> <li class="text" :class="{ textEn: $i18n.locale === 'en' }">{{ $t('individually') }}</li> <li class="text" :class="{ textEn: $i18n.locale === 'en' }">{{ $t('TV') }}</li> <li class="text" :class="{ textEn: $i18n.locale === 'en' }">{{ $t('laundry') }}</li> <li class="text" :class="{ textEn: $i18n.locale === 'en' }">{{ $t('safes') }}</li> <li class="text" :class="{ textEn: $i18n.locale === 'en' }">{{ $t('coffee') }}</li> <li class="text" :class="{ textEn: $i18n.locale === 'en' }">{{ $t('Minibar') }}</li> </ul> </div> </div> </div> </div> </div> <!-- 滚动宣传图文本页面 --> <!-- <div v-for="item in roomBannerList" :key="item.id"> <h2>{{ $t(item.titleKey) }}</h2> <p>{{ $t(item.promptKey) }}</p> </div> --> <!-- 底部导航栏 --> <Footer /> </div> </template> <script> import RoomSwiper from "@/components/swiper/RoomSwiper.vue"; export default { name: "experience", components: { RoomSwiper, }, data() { return { msg: "Welcome to Your Vue.js App", // 响应式图片数据 hd01: { smallImage1: require("../../assets/experience/hd-01-mobile.jpg"), mediumImage1: require("../../assets/experience/hd-01.png"), largeImage1: require("../../assets/experience/hd-01.png"), }, hd02: { smallImage2: require("../../assets/experience/hd-02-mobile.jpg"), mediumImage2: require("../../assets/experience/hd-02.png"), largeImage2: require("../../assets/experience/hd-02.png"), }, roomBannerList: [ { id: 1, imgUrl: require("../../assets/room/room-01.png"), title: "豪华套房", prompt: "尊享私人空间,尽享奢华体验", }, { id: 2, imgUrl: require("../../assets/room/room-02.png"), title: "豪华楼层/豪华雅致大床房", prompt: "面积约为42平方米,装饰现代,舒适典雅。卧室和大理石浴室设气派的落地窗玻璃,可以俯瞰草原城市胜景或乌兰木伦湖滨美景。", }, { id: 3, imgUrl: require("../../assets/room/room-03.png"), title: "豪华双床房", prompt: "面积约为42平方米,装饰现代,舒适典雅。卧室和大理石浴室设气派的落地窗玻璃,可以俯瞰草原城市胜景或乌兰木伦湖滨美景。", }, ], apartBannerList: [ { id: 1, imgUrl: require("../../assets/room/room-01.png"), title: "豪华套房", prompt: "尊享私人空间,尽享奢华体验", }, { id: 2, imgUrl: require("../../assets/room/room-02.png"), title: "豪华楼层/豪华雅致大床房", prompt: "面积约为42平方米,装饰现代,舒适典雅。卧室和大理石浴室设气派的落地窗玻璃,可以俯瞰草原城市胜景或乌兰木伦湖滨美景。", }, { id: 3, imgUrl: require("../../assets/room/room-03.png"), title: "豪华双床房", prompt: "面积约为42平方米,装饰现代,舒适典雅。卧室和大理石浴室设气派的落地窗玻璃,可以俯瞰草原城市胜景或乌兰木伦湖滨美景。", }, ], }; }, }; </script> <style scoped> .content-banner { width: 100vw; height: 60rem; background-image: url("../../assets/banner/banner-04.jpg"); background-size: 100% 100%; position: relative; } .content-wrapper { max-width: 1920px; /* 限制最大宽度 */ margin: 0 auto; padding: 0 4rem; /* 添加基础内边距 */ } /* 优化商务/度假模块 */ .business, .tourism { display: grid; grid-template-columns: 1fr 1fr; gap: 6rem; align-items: center; padding: 8rem 0; max-width: 1600px; /* 限制最大内容宽度 */ } .title-en { font-size: 3rem; color: rgb(202, 171, 98); font-weight: bold; line-height: 2em; font-family: "Times New Roman", Times, serif; } .title-zh { font-size: 3.6rem; color: rgb(202, 171, 98); text-align: left; } .content { font-size: clamp(1.6rem, 2vw, 2.2rem); /* 响应式字体 */ line-height: 1.8; margin: 3rem 0; font-family: "Fangsong"; } /* 图片容器优化 */ .img-box { width: 100%; max-width: 800px; /* 限制最大宽度 */ margin: 0 auto; transition: transform 0.3s; } .img-box:hover { transform: scale(1.02); /* 添加悬停效果 */ } /* 文本区域优化 */ .text-box { max-width: 600px; margin: 0 auto; } .more { width: 10rem; font-size: 1.6rem; line-height: 2em; color: rgb(202, 171, 98); text-align: center; cursor: pointer; background-color: rgb(238, 235, 235); } /* 通用属性 */ /* 文本居中 */ .text-center { text-align: center; } /* div居中 */ .div-center { margin: 2rem auto; } /* 上外边距2rem */ .margin-top-20 { margin-top: 2rem; } /* 上外边距5rem */ .margin-top-50 { margin-top: 5rem; } /* 下外边距2rem */ .margin-bottom-20 { margin-bottom: 2rem; } /* 度假旅行 */ /* .tourism { width: 120rem; margin: 0 auto; display: flex; justify-content: space-between; margin-bottom: 10rem; } */ /* 查看客房 */ .content-kefang { width: 100vw; height: 75rem; } /* 客房设施 */ .device-content { display: grid; grid-template-columns: 1fr 1fr; gap: 8rem; max-width: 1400px; margin: 8rem auto; align-items: center; } .device-list { columns: 2; /* 增加列数 */ column-gap: 4rem; font-size: clamp(1.6rem, 1.8vw, 2rem); } .device { width: 100rem; margin: 0 auto; display: flex; flex-direction: column; align-items: center; justify-content: center; margin-bottom: 10rem; } .textEn { font-family: "Times New Roman", Times, serif !important; } /* 新增响应式断点 */ @media screen and (min-width: 1025px) { .content-banner { height: 50vh; } .business, .tourism { grid-template-columns: 55% 45%; /* 调整比例 */ } } /* 1024px以下 */ @media screen and (max-width: 1024px) { .content-banner { height: 70rem; } .business, .tourism { grid-template-columns: 1fr; gap: 4rem; padding: 4rem 0; } .content-wrapper { width: 160rem; } .title-en { font-size: 4.8rem; } .title-zh { font-size: 5.6rem; } .content { width: 74rem; font-size: 3rem; } .img-box { max-width: 100%; height: auto; } .more { width: 15rem; font-size: 2rem; } .device-content { grid-template-columns: 1fr; gap: 4rem; } /* .device-content { width: 100rem; margin: 10rem auto; display: flex; margin-bottom: 1rem; } */ .device-list { columns: 1; } .device { width: 100rem; margin: 0 auto; display: flex; flex-direction: column; align-items: center; justify-content: center; margin-bottom: 10rem; } } @media screen and (max-width: 768px) { .content-banner { height: 82rem; background-image: url("../../assets/banner/banner-04-mobile.jpg"); } .business { flex-direction: column; align-items: center; } .tourism { flex-direction: column; align-items: center; } .content-wrapper { padding: 0 2rem; } .img-box { order: 2; } .text-box { order: 1; } .title-en { font-size: 6rem; } .title-zh { font-size: 6.2rem; } .content { font-size: 1.8rem; } .img-box { width: 110rem; height: 60rem; margin-top: 5rem; margin-bottom: 2rem; } .more { width: 20rem; font-size: 2.4rem; margin-bottom: 5rem; margin-left: 80rem; } .device-content { width: 120rem; margin: 10rem auto; display: flex; margin-bottom: 1rem; flex-direction: row; margin-right: 10rem; } .device-list { font-size: 1.6rem; } .device { width: 150rem; margin: 0 auto; display: flex; flex-direction: column; align-items: center; justify-content: center; margin-bottom: 10rem; margin-right: 10rem; } } </style>
07-05
在IT开发尤其是网页和移动端开发中,对于375px设计稿可以采用以下处理和适配方法: ### 媒体查询 媒体查询可以根据不同的设备屏幕宽度应用不同的CSS样式。例如,对于375px设计稿,可以针对这个宽度范围设置特定的样式: ```css @media (max-width: 375px) { /* 这里可以写针对375px及以下屏幕宽度的样式 */ body { font-size: 14px; } } ``` ### 弹性布局(Flexbox和Grid) - **Flexbox**:Flexible Box Layout(弹性盒子布局)是一种一维的布局模型,它可以轻松地实现元素的水平和垂直排列,并且能够自适应不同的屏幕尺寸。 ```css .container { display: flex; justify-content: space-between; } ``` - **Grid**:Grid Layout(网格布局)是一种二维的布局模型,它允许开发者将页面划分为行和列,然后将元素放置在这些网格中。 ```css .container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; } ``` ### REMEM单位 - **REM**:相对于根元素(`<html>`)的字体大小。可以通过设置根元素的字体大小,然后使用REM单位来实现元素的尺寸适配。 ```css html { font-size: 16px; } .box { width: 20rem; /* 这里的宽度是相对于根元素字体大小的20倍 */ } ``` - **EM**:相对于父元素的字体大小。用法REM类似,但会受到父元素字体大小的影响。 ### Viewport单位 Viewport单位是相对于视口(浏览器窗口)大小的单位,常用的有`vw`(视口宽度的百分比)和`vh`(视口高度的百分比)。对于375px设计稿,可以使用`vw`来实现元素的宽度适配。 ```css .box { width: 50vw; /* 元素宽度为视口宽度的50% */ } ``` ### 响应式图片 使用`<picture>`元素或`srcset`属性可以根据不同的屏幕尺寸加载不同分辨率的图片,以优化页面性能和显示效果。 ```html <picture> <source media="(max-width: 375px)" srcset="small-image.jpg"> <img src="large-image.jpg" alt="Image"> </picture> ``` ### 框架和库 一些前端框架和库,如Bootstrap和Vue.js等,提供了响应式布局和组件,可以帮助开发者更方便地实现375px设计稿的适配。 ### 移动端适配方案 在移动端开发中,还可以使用一些专门的适配方案,如Flexible.js和viewport布局等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值