阅读更多

1顶
0踩

Web前端

转载新闻 7个你可能不认识的CSS单位

2014-11-19 16:41 by 副主编 mengyidan1988 评论(0) 有5452人浏览
众所周知CSS技术我们虽然很熟悉,在使用的过程却很容易被困住,这让我们在新问题出现的时候变得很不利。
随着web继续不断地发展,对于新技术新解决方案的要求也会不断增长。因此,作为网页设计师和前端开发人员,我们别无选择,必须熟悉我们手上的工具,做到知己知彼,这样才能百战不殆。

这就意味着有那么些个特别的货,虽然平常都不怎么会用上,但是一旦某个地方需要它们了,他们就真的是特么得合适不过来了呢。

今儿,我就准备向大伙儿介绍一些你们之前可能很少见过CSS家伙们。他们每个都是度量的单位,类似pixel 和 em 这样的,但是很有可能你之前从来就没听过这些家伙们!就让我们一起来交个朋友吧~

rem

我们首先介绍下和我们熟悉的很相似的货。em 被定义为相对于当前对象内文本的字体大小。炒个栗子,如果你给body小哥设置了font-size字体大小,那么body小哥的任何子元素的1em就是等于body设置的font-size。
<body>
    <div class="test">Test</div>
</body>

body {
    font-size: 14px;
}
div {
    font-size: 1.2em; // calculated at 14px * 1.2, or 16.8px
}

你看,这里div这娃的字体大小是1.2em。解释来说,就是他从body爹爹那里继承的字体大小(这里是14px)的1.2倍,结果就是16.8px。

但是,如果你用em一层一层级联得定义嵌套元素的字体大小又会花生什么事情呢?在下面这一小段代码里我们应用了和上面一样一样的CSS,每一个div都从它上一级父元素继承了字体大小,并且逐渐得增加。
<body>
    <div>
        Test <!-- 14 * 1.2 = 16.8px -->
        <div>
            Test <!-- 16.8 * 1.2 = 20.16px -->
            <div>
                Test <!-- 20.16 * 1.2 = 24.192px -->
            </div>
        </div>
    </div>
</body>

实例
虽然在某些地方这正是我们想要的,但是通常情况下我们还是希望就依赖单一的相对度量单位就好。这时候嘛,我们就可以使用 rem 了。 ‘r’是“root”的缩写,意思就是1rem等于根元素的字体大小;大部分情况下,根元素就是<html>元素了。
html {
    font-size: 14px;
}
div {
    font-size: 1.2rem;
}

这样在上面的那三个嵌套的div娃们的字体大小都是 1.2*14px = 16.8px 了。

适用于网格布局
Rems 不仅仅只是在设置字体大小上很方便。再炒个栗子,你可以用基于html根元素字体大小的rem作为整个网格布局或者UI库的大小单位,然后在其他特定的地方用em单位。这样将会给你带来更多的字体大小和伸缩的可控性。
.container {
    width: 70rem; // 70 * 14px = 980px
}

概念上来说,这个方法的思想就是让你的界面根据你的内容进行缩放。但是,这样做并不是对所有的情况都有意义。

vh and vw

响应式web设计离不开百分比。但是,CSS百分比并不是所有的问题的最佳解决方案。CSS的宽度是相对于包含它的最近的父元素的宽度的。但是如果你就想用视口(viewpoint)的宽度或者高度,而不是父元素的,那该肿么办? 这就是 vh 和 vw 单位为我们提供的。

1vh 等于1/100的视口高度。栗子:浏览器高度900px, 1 vh = 900px/100 = 9 px。同理,如果视口宽度未750, 1vw = 750px/100 = 7.5 px。

可以想象到的,他们有很多很多的用途。比如,我们用很简单的方法只用一行CSS代码就实现同屏幕等高的框。
.slide {
    height: 100vh;
}

假设你要来一个和屏幕同宽的标题,你只要设置这个标题的font-size的单位为vm,那标题的字体大小就会自动根据浏览器的宽度进行缩放,以达到字体和viewport大小同步的效果,有木有?!
实例
vmin and vmax

vh和 vm 依据于视口的高度和宽度,相对的,vmin 和 vmax则关于视口高度和宽度两者的最小或者最大值。比如,浏览器的宽度设置为1100px,高度设置为700px, 1vmin = 1px, 1vmax = 11px。如果宽度设置为800px,高度设置为1080px, 1vmin就等于8px, 1vmax则未10.8px。
那么问题来了,我们应该在什么场景下使用这两个单位呢?
假设有一个元素,你需要让它始终在屏幕上可见。只要对其高度和宽度使用vmin单位,并赋予其低于100的值就可以做到了。再来个栗子,可以这样定义一个至少有两个边触摸到屏幕的方形:
.box {
    height: 100vmin;
    width: 100vmin;
}




如果你要让这个方形框框始终铺满整个视口的可见区域(四边始终触摸到屏幕的四边)
.box {
    height: 100vmax;
    width: 100vmax;
}




结合使用这些单位可以为我们提供一个新颖有意思的方式来灵活地利用我们视口的大小。

ex and ch

ex 和 ch 单位,类似于 em 和 rem, 依赖于当前的字体和字体大小。 但是,不同的是,这两货是基于字体的度量单位,依赖于设定的字体。

ch 单位通常被定义为数字0的宽度。你可以在Eric Meyers的博客里找到关于它的一些有意思的讨论,例如将一个等宽字体的字母”N”的宽度设置为40ch,那么在另一种类型的字体里它却可以包含40个字母。这个单位的传统用途主要是盲文的排版,但是除此之外,肯定还有可以应用他的地方。

ex 定义为当前字体的小写x字母的高度或者 1/2 的 1em。 很多时候,它是字体的中间标志。



x-height; the height of the lower case x

这些单位有很多用途,大部分用于版式的微调。比方说,sup 元素(上角文字标),可以通过position:relative;bottom: 1ex;实现 。类似的方法,你可以实现一个下角文字标。浏览器默认的方式是利用
上标和下标特定垂直对齐规则,但是如果你想更细粒度更精确得控制,你可以像下面这样做:
sup {
    position: relative;
    bottom: 1ex;
}
sub {
    position: relative;
    bottom: -1ex;
}

结论

持续关注不断发展壮大的CSS技术无疑是很重要的,这样你才能掌握你所持有的工具的全部技能。说不定将来你遇到的某个特殊的问题就需要使用这些复杂的单位来解决。花点时间去阅读新的技术规范,注册订阅一些不错的网站或者资源,类似 cssweekly这样的。 当然不要忘记现在就去注册像TUTS +这样的网站来获取每周的更新,课程,免费教程还有资源!

扩展阅读

Taking the “Erm..” Out of Ems
Taking Ems Even Further
Caniuse Viewport units
  • 大小: 6.6 KB
  • 大小: 7.1 KB
  • 大小: 5.2 KB
来自: Emma
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • oracle忘记sys/system/scott用户密码的解决方法

    一、忘记除SYS、SYSTEM用户之外的用户的登录密码。二、忘记SYS用户,或者是SYSTEM用户的密码。三、如果SYS,SYSTEM用户的密码都忘记或是丢失。解决方法

  • oracle数据库管理员默认账户密码

    但如果是sys用户,账户必须加上as sysdba,即完整账户为:sys as sysdba。使用SQL Plus登录数据库时,system使用密码manager可直接登录。2.sys默认:change_on_install。1.system默认:manager。

  • Oracle的默认用户和密码

    这样把“MC”用户密码修改为”CMCC“,可根据自己的需求,自行设置密码。3、用户名:sys 密码:change on install。1、用户名:internal 密码:oracle。4、其中直接管理模式可以为sysdba的后面三个。在命令窗口分别执行:conn/as sysdba。2、用户名:system 密码:manager。在系统运行中输入:sqlplus/nolog。

  • oracle创建完成 sys密码怎么修改,如何重置密码 oracle sys和system

    有时候我们会忘记oracle sys和system的密码,不用担心,通过sqlplus即可修改密码。只能修改,不能找回。方法如下:1、打开 cmd界面,输入sqlplus /nolog显示结果如下:2、在dos窗口中输入 conn / @orcl as sysdba 注意:orcl是你的数据库实例 。回车后显示如下:3、连接后,我们就可以进行任意修改密码了,稍等!在dos窗口中输入 alte...

  • Oracle 默认密码及修改密码

    默认密码: 用户名:sys 密码:change_on_install 用户名:system 密码:manager 用户名:internal 密码:oracle 用户名:scott 密码:tiger 遗失密码后修改密码 一个修改Oracle用户密码的小诀窍数据库版本:9.2.0.5 有时候我们可能不知道一个用户的密码,但是又需要以这个用户做一些操作,又不能去修改掉这个用户的密...

  • Oracle的sys和system默认密码

    <br /><br />system默认:manager<br /> <br />sys默认:change_on_install<br /> <br />使用SQL Plus登录数据库时,system使用密码manager可直接登录。<br /> <br />但如果是sys用户,密码必须加上as sysdba,即完整密码为:change_on_install as sysdba 

  • Oracle数据库sys和system的默认密码

    sys的密码:change_on_install      system:的密码:oracle “链接为”选择:SYSDBA

  • Oracle中sys 和system的默认密码

    system默认:manager sys默认:change_on_install 使用SQL Plus登录数据库时,system使用密码manager可直接登录。 但如果是sys用户,密码必须加上as sysdba,即完整密码为:change_on_install as sysdba原:https://blog.csdn.net/weixin_40576869/article/det...

  • chrome 调试进入 paused in debugger 状态解决办法

    今天调试代码的时候总是一刷新就进入 debugger 状态,总是需要按几次 F8 才能进到页面,我那个暴脾气啊,几次后终于是忍不住了,然后再网上找到了解决办法。就如一位网友所说,“Oh God! I can code now! ”。下面把搜集来的方法分享出来:

  • 解决SPS无法创建门户网站問題?

    引自http://access911.net/index.asp?board=4&amp;recordid=72FAB21E15DCE7F3问题: SPS创建门户网站失败,操作步骤如下: 1、SharePointPortalServer管理中心-COMET-82VBJGENI2、创建门户网站3、所有者帐户为:HOME\Administrator4、创建门户...

  • 【转】RegSetValueEx运行时失败,返回代码为5,解决方法

    这种情况是由于对注册表访问权限不够,拒绝访问的意思,因此,注意看看权限是否不够,如果改为KEY_ALL_ACCESS就没问题了,这样读写等权限都可以。 转载于:https://www.cnblogs.com/blueswitkey/archive/2013/04/28/3048925.html...

  • oracle数据库管理员默认密码,Oracle 数据库忘记sys与system管理员密码重置操作方法...

    首先打开cmd 执行orapwd file=C:\app\PWDorcl.ora password=orclorclC:\app\PWDorcl.ora是你要存放的路径文件Password=orclorcl是你要改的密码然后回车,在该路径下就会生成一个文件。把这文件替换你本机oracl的密码文件。Sys和system密码就会改成你要重新设置的密码例如我的本机路径是C:\app\product\11...

  • ORACLE常用傻瓜問題1000問(之一)

     ORACLE常用傻瓜問題1000問(之一) 作者:  CCBZZP         大家在應用ORACLE的時候可能會遇到很多看起來不難的問題, 特別對新手來說, 今天我簡單把它總結一下, 發布給大家, 希望對大家有幫助! 和大家一起探討, 共同進步!        對ORACLE高手來說是不用看的. 1. Oracle安裝完成后的初始口令?   internal/oracle  sys/ch

  • oracle中sys和system的默认密码

    sys:change_on_install system:oracle 如果用pl/sql登录的话,记得在下面用户权限选项选择sysdba,如图所示:

  • 顔色問題

    jQueryのサンプル $(function() { var colors = []; // ボタン1が押されたときの動作 $("#b1").click(function() { colors.length = 0; // 1.値を取得 $('input:checkbox[name="color"]:checked').each(function() { //

Global site tag (gtag.js) - Google Analytics