文章 专题 AI工具 学习 下载 问答 源码 最近更新
PHP
会员中心 讲师中心 微信公众号

扫码关注官方订阅号

登录
编程词典 博客 APP下载
首页 > web前端 > css教程 > 正文

CSS中的长度单位以及宽度自适的实例分析

黄舟
发布: 2017-07-19 13:15:50
原创
1472人浏览过

CSS 单位

作者:Chinaxiang 来源:互联网 2015-12-01 23:36



CSS中的长度单位有很多,觉得有必要整理备忘。

概览

CSS中的长度单位有很多,觉得有必要整理备忘。

网上介绍的也比较多和全,详见参考资料。

单位大体分为两大类:

  • 绝对单位 ,不会因为其他元素的尺寸变化而变化。

  • 相对单位 ,没有一个固定的度量值,而是由其他元素尺寸来决定的相对值。


单位 类型 简介
px Absolute 像素 (计算机屏幕上的一个点),1px = 1/96in
pt Absolute Points, 1pt = 1/72in
pc Absolute Picas, 1pc = 12pt
in Absolute Inches, 1in = 96px = 2.54cm
cm Absolute Centimeters, 1cm = 96/2.54px
mm Absolute Millimeters, 1mm = 1/10cm
q Absolute Quarter-millimeters, 1q = 1/4mm
% Relative 相对于父元素的宽度或字体大小
em Relative 相对于父元素的字体大小
rem Relative (即root em) 相对于html标签的字体大小
ex Relative 当前字体环境中 x 字母的高度
ch Relative 当前字体环境中 0 数字的高度
vw Relative 1% 视口(浏览器可视区域)的宽度
vh Relative 1% 视口(浏览器可视区域)的高度
vmin Relative 1% 视口(浏览器可视区域)的宽度和高度中较小的尺寸
vmax Relative 1% 视口(浏览器可视区域)的宽度和高度中较大的尺寸

由于绝对单位是固定值,没什么要介绍的,下面主要介绍相对单位。

%

相对于父元素的相同属性的大小。这个其实谈不上单位,但它毕竟可以作为长度单位来使,所以在此列出。

如果用来设置字体,则相对的就是父元素的字体大小。

大多数浏览器中 和

 标签中的默认字体尺寸是100%.
html {font-size: 100%;}body {font-size: 100%;}
登录后复制

100% = 1em = 16px = 12pt

如果用来设置宽和高等非字体尺寸,则以百分比为单位的长度值是基于具有相同属性的父元素的长度值。

<!DOCTYPE html><html><head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style type="text/css">
  p.parent {    margin:150px;    width: 200px;    height: 200px;    border: 1px solid blue;  }
  p.child {    width: 50%;    height: 50%;    border: 1px dashed black;  }
  </style></head><body>
  <p class="parent">
    <p class="child"></p>
  </p></body></html>
登录后复制


再啰嗦一点关于父元素的问题:何为父元素,相对定位(relative),绝对定位(absolute),浮动(float),固定(fixed)中如何找寻父元素?

由于HTML是树形结构,标签套标签,一般情况下的父子关系很明朗。

<p class="parent">
    <p class="child"></p>
</p>
登录后复制

相对定位元素,它的父元素符合标签嵌套。

绝对定位元素,它的父元素是离它最近的定位元素(绝对定位,相对定位,固定,但不包括浮动)或者视窗尺寸(没找到定位元素时)。

浮动元素,它的父元素也符合标签嵌套。

固定元素(特殊的绝对定位),它的父元素是视窗(浏览器默认用来展示内容的区域的尺寸,不是html 或body 的尺寸)。

注意一下绝对定位就行了,其他的相对简单。

<!DOCTYPE html><html><head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style type="text/css">
    html {        width:1000px;    }
    body {        width:800px;    }
    #box {        width:50%;        height:300px;        position: absolute;        margin-left: 200px;        border: 1px solid red;    }
    #can {        position:absolute;        top:100px;        left:100px;        width:50%;        height:50%;        border:1px solid black;    }
  </style> </head>  <body>
    <p id="box">
        <p id="can"></p>
    </p>
    </body>  </html>
登录后复制

box 宽度为视窗的一半,can 的宽高是 box 的宽高的一半。

将 can 设置为 position: fixed; 则其父元素将不再是 box 而是浏览器视窗。


can 的宽高是视窗宽高的一半。

浮动元素的父元素跟普通元素的父元素是一样的。

<!DOCTYPE html><html><head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style type="text/css">
    html {        width:1000px;    }
    body {        width:800px;    }
    #box {        width:50%;        height:300px;        position: absolute;        margin-left: 200px;        border: 1px solid red;    }
    #can {        float:left;        width:50%;        height:50%;        border:1px solid black;    }
  </style> </head>  <body>
    <p id="box">
        <p id="can"></p>
    </p>
    </body>  </html>
登录后复制


注意: padding、 margin 如果设置了百分比,上,下,左,右 用的都是父元素宽度 的值为标准去计算。

em 和 rem

两者都是基于字体尺寸的,区别在于 em 是相对于当前父元素的字体大小为标准,而 rem 是相对于 html 元素的字体大小为标准。

举个例子你就明白了。

<!DOCTYPE html><html><head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style type="text/css">
  html {    font-size: 30px;  }
  body {    font-size: 14px;  }
  p.em {    font-size: 1.2em;  }
  p.rem {    font-size: 1.2rem;  }
  </style></head><body>
  <p class="em">
    Test <!-- 14 * 1.2 = 16.8px -->
    <p class="em">
      Test <!-- 16.8 * 1.2 = 20.16px -->
      <p class="em">
        Test <!-- 20.16 * 1.2 = 24.192px -->
      </p>
    </p>
  </p>
  <p  class="rem">
    Test <!-- 30 * 1.2 = 36px -->
    <p  class="rem">
      Test <!-- 30 * 1.2 = 36px -->
      <p  class="rem">
        Test <!-- 30 * 1.2 = 36px -->
      </p>
    </p>
  </p></body></html>
登录后复制

 

ex 和 ch

ex 和ch 单位,依赖于当前字体font-family 和字体大小 font-size。 ex 指当前字体环境中小写字母x 的高度,ch指当前字体环境中数字 0 的宽度。


IE9+ 和现代浏览器都已经支持。

vw 和 vh

响应式网页设计技术很大程度上依赖于比例规则。然而,CSS比例不总是每个问题的最佳解决方案。如果想使用显示窗口的宽度或高度而不是父元素的宽度将会怎么样?这正是vh 和vw 单位所提供的。

vh 等于视窗高度的 1/100.例如,如果浏览器的高是 900px, 1vh 求得的值为 9px 。同理,如果显示窗口宽度为750px, 1vw 求得的值为 7.5px。

IE10+ 和现代浏览器都支持这两个单位。

vmin 和 vmax

这两个单位是针对vw和vh

vmin 是vw和vh中比较 小 的值

vmax 是vw和vh中比较 大 的值

.box {    height: 100vmin;    width: 100vmin;}
登录后复制


.box {    height: 100vmax;    width: 100vmax;}
登录后复制


IE10+ 和现代浏览器都已经支持 vmin

webkit浏览器之前不支持vmax,现在已经支持,所有现代浏览器已经支持,但是IE不支持 vmax.

总结

尺寸单位虽然说不是很难的内容,但能够做到精准理解和熟练使用也是极其难得的,也许随着CSS的发展会有更多有用的单位引进。

对单位斤斤计较是一个优秀CSS使用者应该具备的品质,赶紧去挑选合适的单位去开发你的NB产品吧。

下面的代码用来检测您的浏览器是否支持常用单位:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style type="text/css">
    body {
      padding: 20px;
    }
    div {
      background: #99ff99;
      padding: 5px;
      margin-bottom: 10px;
      white-space: nowrap;
      width: 0;
    }
    div:after {
      content: " (supported)";
    }
    div.fail {
      width: 100% !important;
      background: #ff6666 !important;
    }
    div.fail:after {
      content: " (NOT supported)";
    }
  </style> 
</head>  
<body>

<div id="percentage">50% - percentage</div>
<div id="pixel">400px - pixels (device pixels)</div>
<div id="em">20em - relative unit</div>
<div id="rem">20rem - root em</div>
<div id="vw">15vw - viewport width</div>
<div id="vh">60vh - viewport height</div>
<div id="vmin">60vmin - smaller of vw or vh</div>
<div id="vmax">60vmax - larger of vw or vh</div>
<div id="inch">4in - inches</div>
<div id="cm">20cm - centimeters</div>
<div id="mm">200mm - millimeters</div>
<div id="pt">120pt - points</div>
<div id="pc">40pc - picas</div>
<div id="ex">60ex - x-height</div>
<div id="ch">60ch - based on width of zero (0) character</div>

<script src="http://cdn.bootcss.com/jquery/1.11.3/jquery.js"></script>
<script>
// 给指定元素设置宽度
var percentage = $("#percentage").css("width", "50%");
// 如果宽度值为0,即不支持,为此元素添加fail类
if (percentage.width() == 0) percentage.addClass("fail");

var pixel = $("#pixel").css("width", "400px");
if (pixel.width() == 0) pixel.addClass("fail");

var em = $("#em").css("width", "20em");
if (em.width() == 0) em.addClass("fail");

var rem = $("#rem").css("width", "20rem");
if (rem.width() == 0) rem.addClass("fail");

var vw = $("#vw").css("width", "15vw");
if (vw.width() == 0) vw.addClass("fail");

var vh = $("#vh").css("width", "60vh");
if (vh.width() == 0) vh.addClass("fail");

var vmin = $("#vmin").css("width", "60vmin");
if (vmin.width() == 0) vmin.addClass("fail");

var vmax = $("#vmax").css("width", "60vmax");
if (vmax.width() == 0) vmax.addClass("fail");

var inch = $("#inch").css("width", "4in");
if (inch.width() == 0) inch.addClass("fail");

var cm = $("#cm").css("width", "20cm");
if (cm.width() == 0) cm.addClass("fail");

var mm = $("#mm").css("width", "200mm");
if (mm.width() == 0) mm.addClass("fail");

var pt = $("#pt").css("width", "120pt");
if (pt.width() == 0) pt.addClass("fail");

var pc = $("#pc").css("width", "40pc");
if (pc.width() == 0) pc.addClass("fail");

var ex = $("#ex").css("width", "60ex");
if (ex.width() == 0) ex.addClass("fail");

var ch = $("#ch").css("width", "60ch");
if (ch.width() == 0) ch.addClass("fail");
</script>
</body>  
</html>
登录后复制


以上就是CSS中的长度单位以及宽度自适的实例分析的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
css
来源:php中文网
收藏 点赞
上一篇:id和class在css中的样式设置的区别是什么? 下一篇:CSS3中介绍最新的几种长度单位
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
  • jQuery中关于bind()函数详解
    1970-01-01 08:00:00
  • php实现字符串匹配算法之sunday算法的示例
    2023-03-17 20:02:01
  • css中关于hideFocus的使用详解
    1970-01-01 08:00:00
  • JavaScript中filter函数的详细介绍
    1970-01-01 08:00:00
  • MySQL实现查看与创建以及删除索引的方法介绍
    1970-01-01 08:00:00
  • php使用指针进行函数操作的实例分析
    2023-03-17 19:54:01
  • JavaScript实现字符串转换成数字的三种方法介绍
    1970-01-01 08:00:00
  • MySQL中explain的使用以及性能分析
    1970-01-01 08:00:00
  • JavaScript中split函数由浅到深的使用介绍
    1970-01-01 08:00:00
  • 详解SQL中distinct的使用方法
    1970-01-01 08:00:00
最新问题
CSS如何制作骨架屏?CSS加载占位动画技巧 骨架屏是通过CSS实现的加载过渡效果,核心在于使用HTML结构与CSS动画模拟内容轮廓并提升用户体验。具体步骤包括:1.使用HTML搭建无内容的页面结构;2.通过CSS设置浅灰色背景与动画实现动态闪烁效果;3.利用border-radius或clip-path控制骨架屏形状;4.数据加载完成后通过JavaScript移除骨架屏;5.优化性能时避免复杂形状、使用CSS动画并减少重绘重排;6.可根据网络环境动态调整骨架屏复杂程度;7.骨架屏区别于loading动画,其优势在于提供内容预期而非单纯提示
2025-06-24 15:04:02
251
css中的var是什么意思 css中var变量的功能解析 在CSS中,var函数允许使用自定义属性值,使样式表更灵活和易于维护。使用var的好处包括:1.集中管理样式值,修改一个变量即可更新所有使用该变量的地方;2.可以设置备用值,确保即使变量不存在也能应用默认值;3.变量可嵌套使用,提高灵活性;4.适用于主题颜色和间距管理,方便切换主题风格。
2025-06-24 14:25:01
445
css如何调整元素层级?css层级属性使用指南 z-index属性用于控制元素的堆叠顺序,数值越大越靠前。要使用z-index,必须为元素设置非static的position值(如relative、absolute、fixed或sticky),否则该属性无效。堆叠上下文会影响z-index的表现,某些CSS属性(如transform、opacity、filter等)会创建新的堆叠上下文,导致子元素的z-index仅在该上下文中生效。常见问题包括:1.忘记设置position导致z-index无效;2.父元素堆叠上下文限制子元素层级;3.z-i
2025-06-24 14:09:02
341
css中100vh是什么 css中100vh单位的含义解释 100vh在CSS中代表视口高度的100%,常用于创建全屏布局和确保元素高度与视口一致。100vh适应浏览器窗口大小变化,适用于响应式设计,但需注意移动设备上的视口计算问题。
2025-06-24 14:04:02
943
css如何实现响应式布局?css响应式设计教程 响应式布局的核心是通过媒体查询、Flexbox、Grid等技术组合,使网页自动适配不同设备。1.媒体查询根据屏幕特性应用不同CSS规则;2.Flexbox用于一维布局,Grid用于二维布局,二者结合实现灵活结构;3.响应式图片可通过srcset、picture元素或CSS背景图实现;4.排版使用相对单位、viewport单位和clamp函数优化阅读体验;5.测试需借助浏览器工具、在线工具及真实设备;6.最佳实践包括移动优先、内容优先、保持简洁和使用框架;7.常见问题如图片变形、文本溢出等可通过相
2025-06-24 13:46:01
236
margin在css中什么意思 css中margin属性的含义详解 在CSS中,margin属性用于控制元素与其周围元素之间的空白区域。1.margin定义了元素边框外围的空间,影响布局和间距。2.可以设置上、右、下、左四个方向的外边距,使用长度值、百分比或auto。3.负值可使元素向相反方向移动,但需谨慎使用。4.外边距折叠是指相邻元素的外边距合并,而不是累加。5.建议减少margin使用,优先使用padding和现代布局方法,简化值以优化性能。
2025-06-24 13:26:01
417
css中span什么意思 css中span标签的定义解析 span在CSS中用于包装文本或内联元素,以便应用样式或脚本操作。1.它是内联元素,不携带视觉意义,但可通过CSS赋予样式。2.常用于精细排版控制,如改变文本颜色、字体、背景。3.可嵌套在其他元素中,但需避免滥用。4.可与CSS伪类结合,创造动态效果。5.注意其默认不换行,可通过display属性调整。6.过度使用可能影响SEO和性能,需谨慎使用并优化。
2025-06-24 12:52:02
411
css如何调整元素大小?css尺寸属性设置技巧 在CSS中精确控制元素尺寸需掌握多个要点。1.使用width和height设置基础尺寸,推荐配合box-sizing:border-box,使padding和border包含在设定值内,避免溢出;2.为防止内容过多导致布局异常,可使用min-width、max-width、min-height、max-height限制尺寸范围;3.百分比尺寸基于父元素计算,父元素需明确高度以确保子元素百分比生效;4.图片尺寸通过object-fit控制适应方式,如cover保持比例填充容器,contain完整显
2025-06-24 12:09:02
703
CSS怎么添加边框图片?CSS图片边框使用技巧 CSS添加边框图片的核心方法是使用border-image属性,它包括五个子属性:border-image-source指定图片路径;border-image-slice将图片分割为九个区域,值根据图片设计调整,确保角和边完整;border-image-width定义边框宽度,建议用固定值避免百分比带来的不确定性;border-image-outset设置图片超出边框的距离;border-image-repeat控制图片重复方式,如round可调整大小以完整显示。使用时需注意兼容性问题,可通过设
2025-06-24 11:30:03
678
CSS链接样式如何设置 链接样式设置指南 要设置CSS链接样式,首先使用伪类控制不同状态下的外观,其次通过CSS变量统一风格,接着优化悬停效果与可访问性,最后结合响应式设计与预处理器提升维护效率。具体步骤如下:1.使用a:link、a:visited、a:hover、a:active分别设置未访问、已访问、悬停和激活状态的链接样式,确保顺序正确(LoVeHAte);2.利用CSS变量(如--link-color)统一网站链接风格,便于全局修改;3.添加transition、transform或box-shadow实现平滑或动态悬停效果;
2025-06-24 11:12:02
204
相关专题
更多>
  • java基本数据类型介绍
  • c++符号汇总
  • golang二维数组定义
  • python是什么
  • PHP框架汇总
  • java项目创建
  • C++编译错误大全
  • golang数组大全
热门推荐
  • css中的var是什么意思 css中var变量的功能解析
  • css如何调整元素层级?css层级属性使用指南
  • css中100vh是什么 css中100vh单位的含义解释
  • css如何实现响应式布局?css响应式设计教程
  • margin在css中什么意思 css中margin属性的含义详解
开源免费商场系统广告
热门教程
更多>
相关推荐
热门推荐
最新课程
  • ThinkPHP5快速开发企业站点[全程实录]
    ThinkPHP5快速开发企业站点[全程实录]
    399942次学习
    收藏
  • PHP Workerman 基础与实战:即时通讯聊天系统(ThinkPHP6)
    PHP Workerman 基础与实战:即时通讯聊天系统(ThinkPHP6)
    51663次学习
    收藏
  • Thinkphp3.2.3个人博客开发
    Thinkphp3.2.3个人博客开发
    212850次学习
    收藏
  • 最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)
    最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)
    1459431次学习
    收藏
  • phpStudy极速入门视频教程
    phpStudy极速入门视频教程
    527074次学习
    收藏
  • 独孤九贱(4)_PHP视频教程
    独孤九贱(4)_PHP视频教程
    1235515次学习
    收藏
  • PHP实战天龙八部之仿爱奇艺电影网站
    PHP实战天龙八部之仿爱奇艺电影网站
    764794次学习
    收藏
  • 独孤九贱(1)_HTML5视频教程
    独孤九贱(1)_HTML5视频教程
    611671次学习
    收藏
  • PHP新手语法线上课程教学
    PHP新手语法线上课程教学
    734次学习
    收藏
  • 支付宝沙箱支付(个人也能用的支付)
    支付宝沙箱支付(个人也能用的支付)
    2581次学习
    收藏
  • 麻省理工大佬Python课程
    麻省理工大佬Python课程
    30588次学习
    收藏
  • Swoole5 Hyperf3 php8新版本协程框架讲说
    Swoole5 Hyperf3 php8新版本协程框架讲说
    11796次学习
    收藏
  • 【web前端】Node.js快速入门
    【web前端】Node.js快速入门
    15054次学习
    收藏
最新下载
更多>
  • 驾照考试驾校HTML5网站模板
网站特效
网站源码
网站素材
前端模板
  • [表单按钮] jQuery企业留言表单联系代码
  • [播放器特效] HTML5 MP3音乐盒播放特效
  • [菜单导航] HTML5炫酷粒子动画导航菜单特效
  • [表单按钮] jQuery可视化表单拖拽编辑代码
  • [播放器特效] VUE.JS仿酷狗音乐播放器代码
  • [html5特效] 经典html5推箱子小游戏
  • [图片特效] jQuery滚动添加或减少图片特效
  • [相册特效] CSS3个人相册封面悬停放大特效
  • [电商源码] jeestore商城系统
  • [电商源码] 简单好用的商城系统st-shop
  • [电商源码] 佳蓝智能应答系统
  • [电商源码] 新力房产网
  • [app源码] 无心版移动短信发送
  • [app源码] 智能移动网站管理系统(SmartMobile)
  • [电商源码] 极品模板微商城订单系统
  • [电商源码] SDCMS-B2C商城网站管理系统
  • [网站素材] 三维等距城市建筑设计矢量模板
  • [网站素材] 绿色未来植树节愿景矢量插图
  • [网站素材] 手绘六一儿童节背景矢量素材
  • [网站素材] 欧式奢华风格竖版名片设计下载
  • [网站素材] 室内设计方案特价宣传单设计下载
  • [网站素材] 蓝色极简风格夏日主题竖版banner下载
  • [网站素材] 可爱的夏天元素矢量素材(EPS+PNG)
  • [网站素材] 四个红的的 2023 毕业徽章矢量素材(AI+EPS+PNG)
  • [前端模板] 驾照考试驾校HTML5网站模板
  • [前端模板] 驾照培训服务机构宣传网站模板
  • [前端模板] HTML5房地产公司宣传网站模板
  • [前端模板] 新鲜有机肉类宣传网站模板
  • [前端模板] 响应式天气预报宣传网站模板
  • [前端模板] 房屋建筑维修公司网站CSS模板
  • [前端模板] 响应式志愿者服务网站模板
  • [前端模板] 创意T恤打印店网站HTML5模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号

微信扫码
关注PHP中文网服务号

技术交流群

QQ扫码
加入技术交流群

app下载

扫描下载App

PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • PHP学习

  • 技术支持

  • 返回顶部