display 订阅
display,英文单词,名词、动词、形容词,作名词译为“显示;炫耀”;作动词译为“显示;表现;陈列;作炫耀行为”;作形容词译为“展览的;陈列用的”。 展开全文
display,英文单词,名词、动词、形容词,作名词译为“显示;炫耀”;作动词译为“显示;表现;陈列;作炫耀行为”;作形容词译为“展览的;陈列用的”。
信息
外文名
display
词    性
名词、动词、形容词
display单词发音
英[dɪˈspleɪ] 美 [dɪˈspleɪ] [1] 
收起全文
精华内容
下载资源
问答
  • DisplayPort1.4将支持 8K 分辨率的信号传输,兼容 USB Type-C 接口。从本次更新的技术参数可以看到,这次的eDP 1.4a接口在显示适配器及显示器之间提供4条HBR3高速通道,单通道带宽达到了8.1Gbps,这些通道可独立运行...
  • DisplayPort1.4协议 英文

    2018-11-30 17:49:00
    DisplayPort1.4协议最新协议,供广大设计者参考和学习。
  • display_port_1.4_spec.pdf

    2019-07-02 18:55:46
    Display Port 1.4 spec,英文版,详细介绍Display Port 1.4协议规范
  • 本文档包括2015年发布的:《DP1.4标准(VESA Proposed DisplayPort (DP) Standard》866页,《DisplayPort和eDP物理层兼容性测试》,DisplayPort1.1-1.2-1.3-区别简介
  • display

    千次阅读 2017-10-16 16:24:24
    display  display:用于改变行元素,块元素的特点    行元素:默认display的值为 inline,普通行元素是不可以设置宽高的,设置无效。  input, img属于行元素的个例,可以设置宽高。  如果需要对行元素...

       display

       display:用于改变行元素,块元素的特点

        
        行元素:默认display的值为 inline,普通行元素是不可以设置宽高的,设置无效。
        input, img属于行元素的个例,可以设置宽高。
        如果需要对行元素设置宽高,可以把display:inline-block 或者 block;

        块元素:默认display的值为 block.
        如果需要让块元素用于行元素的特点,可以把display:inline-block 或者 inline;
    展开全文
  • DisplayPort1.2官方标准

    热门讨论 2014-05-07 16:44:22
    DisplayPort(DP)是目前正在兴起的音视频传输接口,本文档是目前最新的1.2a版本官方标准,支持MST传输技术。
  • Springboot启动遇到错误Error starting ... To display the conditions report re-run your application with ‘debug’ enabled. Error starting ApplicationContext. To display the conditions report r...

    Springboot启动遇到错误Error starting ApplicationContext. To display the conditions report re-run your application with ‘debug’ enabled.

    
    Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    2020-02-08 01:19:27.966 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [I:\project\ego_parent\ego_dubbo\target\classes\mybatis\TbContentCategoryMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [I:\project\ego_parent\ego_dubbo\target\classes\mybatis\TbContentCategoryMapper.xml]'. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.ego.mapper.TbContentCategoryMapper.BaseResultMap
    	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:627)
    	at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:607)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1321)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1160)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:845)
    	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:877)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
    	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
    	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:742)
    	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:389)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:311)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1213)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1202)
    	at com.ego.DubboApplication.main(DubboApplication.java:14)
    Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [I:\project\ego_parent\ego_dubbo\target\classes\mybatis\TbContentCategoryMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [I:\project\ego_parent\ego_dubbo\target\classes\mybatis\TbContentCategoryMapper.xml]'. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.ego.mapper.TbContentCategoryMapper.BaseResultMap
    	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
    	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622)
    	... 19 common frames omitted
    Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [I:\project\ego_parent\ego_dubbo\target\classes\mybatis\TbContentCategoryMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [I:\project\ego_parent\ego_dubbo\target\classes\mybatis\TbContentCategoryMapper.xml]'. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.ego.mapper.TbContentCategoryMapper.BaseResultMap
    	at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:596)
    	at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:475)
    	at org.mybatis.spring.SqlSessionFactoryBean.getObject(SqlSessionFactoryBean.java:616)
    	at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration.sqlSessionFactory(MybatisAutoConfiguration.java:180)
    	at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$EnhancerBySpringCGLIB$$3e10b0fa.CGLIB$sqlSessionFactory$1(<generated>)
    	at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$EnhancerBySpringCGLIB$$3e10b0fa$$FastClassBySpringCGLIB$$b60bb328.invoke(<generated>)
    	at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
    	at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)
    	at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$EnhancerBySpringCGLIB$$3e10b0fa.sqlSessionFactory(<generated>)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
    	... 20 common frames omitted
    Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [I:\project\ego_parent\ego_dubbo\target\classes\mybatis\TbContentCategoryMapper.xml]'. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.ego.mapper.TbContentCategoryMapper.BaseResultMap
    	at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:122)
    	at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:94)
    	at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:594)
    	... 33 common frames omitted
    Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.ego.mapper.TbContentCategoryMapper.BaseResultMap
    	at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:947)
    	at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:903)
    	at org.apache.ibatis.session.Configuration.addResultMap(Configuration.java:660)
    	at org.apache.ibatis.builder.MapperBuilderAssistant.addResultMap(MapperBuilderAssistant.java:209)
    	at org.apache.ibatis.builder.ResultMapResolver.resolve(ResultMapResolver.java:47)
    	at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:289)
    	at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:253)
    	at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:245)
    	at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:118)
    	... 35 common frames omitted
    
    

    这是遇到springboot启动时的错误提示,经过很长时间的网上搜索,从检查pom.xml,到反复确认application.yml,无论怎么修改都无法解决这个令人头痛的问题,经过一步步的筛选,最后终于找到了问题,在此纪念愚蠢的自己遇到这个小小的问题。

    问题所在是最后一个错误提示

    sult Maps collection already contains value for com.ego.mapper.TbContentCategoryMapper.BaseResultMap
    

    就是这个在mybatis文件下的 TbContentCategoryMapper文件中 BaeResultMap重复 ,导致无法通过编译,造成这个问题的原因是在用mybatis逆向工程是运行了两次,所以在 xml中所有的id都出现了两次,我在第一次发现有可能是BaseResultMap重复时在xml中用ctrl+f查找并没有找到,所以一直忽略这个问题。

    希望可以帮到同样遇到相同问题的朋友。

    展开全文
  • display详解

    万次阅读 多人点赞 2018-03-10 22:00:57
    css中的display属性 display属性是我们在前端开发中常常使用的一个属性,其中,最常见的有:noneblockinlineinline-blockinherit 下面,我将按照顺序将上述几种属性做一个完整的讲解。第一部分:display:none ...

    css中的display属性

      display属性是我们在前端开发中常常使用的一个属性,其中,最常见的有:

    • none
    • block
    • inline
    • inline-block
    • inherit

      下面,我将按照顺序将上述几种属性做一个完整的讲解。

    第一部分:display:none

      none这个值表示此元素将不被显示。比如,当我们在浏览网页时,如果看到了某个烦人的广告遮挡了我们的视线,更为可气的是,它还没有关闭的选项,这时(以chrome为例),我们就可以按下F12,打开开发者工具,点击element,然后使用左上角的选择工具选中想要删除的广告,可以看到element中会有高亮的一行或几行代码,右键,点击Add Attribute,然后输入:style="display:none",这时就可以发现广告不见啦! 当然display:none的用法绝不是专门用于这里的,它还可以用于二级下拉菜单的制作中将二级下拉菜单先设置位display:none;,当鼠标滑过一级菜单时,再显示出来(详见《如何实现导航菜单中的二级下拉菜单》)。还可以用于登陆模态框的制作等等。

     

    第二部分:display:block

      使用了display:block;之后, 此元素将显示为块级元素,此元素前后会带有换行符。我们先来回顾以下块级元素是什么,他有什么特点。

      既然要区分块级元素和行内元素,就得先说说标准文档流了。标准文档流:简称标准流,指的是在不使用其他的与排列和定位相关的css规则时,各种元素的排列规则。于是,我们将“各种元素”分为块级元素和行内元素。(注:实际上还有空元素,如<br>用于换行,<hr>为一条水平线,这里对空元素不做过多讨论)

      块级元素特点:

    • 总是以一个块的形式表现出来,占领一整行。若干同级块元素会从上之下依次排列(使用float属性除外)。
    • 可以设置高度、宽度、各个方向外补丁(margin)以及各个方向的内补丁(padding)。
    • 当宽度(width)缺省时,它的宽度时其容器的100%,除非我们给它设定了固定的宽度。
    • 块级元素中可以容纳其他块级元素或行内元素。
    • 常见的块级元素由<p><div><h1><li>等等。
    • 块级元素的display属性值默认为block。

      行内元素特点:

    • 它不会单独占据一整行,而是只占领自身的宽度和高度所在的空间。若干同级行内元素会从左到右(即某个行内元素可以和其他行内元素共处一行),从上到下依次排列。
    • 行内元素不可以设置高度、宽度,其高度一般由其字体的大小来决定,其宽度由内容的长度控制。
    • 行内元素只能设置左右的margin值和左右的padding值,而不能设置上下的margin值和上下的padding值。因此我们可以通过设置左右的padding值来改变行内元素的宽度。
    • 常见的行内元素由<a><em><img>等等。
    • 行内元素一般不可以包含块级元素。
    • 块级元素的display属性值默认为inline。

      ok!简单回顾了块级元素和行内元素之后,我们就可以进行下一步讲解了。

      通过对一个行内元素设置display: block;可以将行内元素设置为块级元素,进而设置它的宽高和上下左右的padding和margin。 

    应用:

           如果我们经常会制作导航栏,这时就要使用ul li 和a组合的方式,但是<a>是行内元素,我们无法设置它的宽和高,这时,就可以在<a>的样式表中,将之设置为display:block。这样就可以设置它的宽和高,以及上下左右的margin和padding以达到我们想要的效果了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <! DOCTYPE  html>
    < html  lang="en">
    < head >
         < meta  charset="UTF-8">
         < title >Title</ title >
         < style >
             *{padding: 0;margin:0;list-style: none;}
             ul li{float: left;}
             a{display:block;width: 30px;height: 30px;background: yellow;margin: 5px; text-decoration: none;text-align: center;line-height: 30px;}
         </ style >
    </ head >
    < body >
         < ul >
             < li >< a  href="">1</ a ></ li >
             < li >< a  href="">2</ a ></ li >
             < li >< a  href="">3</ a ></ li >
             < li >< a  href="">4</ a ></ li >
             < li >< a  href="">5</ a ></ li >
         </ ul >
    </ body >
    </ html >

      效果如下:

     

    第三部分:display:inline

      此元素会被显示为内联元素,元素前后没有换行符。在第二部分中,我们介绍了行内元素和块级元素。显然,display:inline的作用即可以将一个块级元素转换成行内元素,那么这个块级元素将不能再设置宽和高以及上下方向的margin和padding。

      

    第四部分:display:inline-block

      display:inline-block是什么呢?大家对这个属性一定是不陌生的。根据名字,实际上我们就可以才出来它是结合了inline和block的特性于一身。即设置了inline-block属性的元素既具有block元素可以设置width和height属性的特性,又保持了inline元素不换行的特性。

      举例说明,我们之前在做横向导航菜单的时候,一般是用ul li a组合,然后将li设置为float,这样就可以得到横向的导航标签了。而现在我们可以通过li和display:inline-block;来实现。

      代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <! DOCTYPE  html>
    < html  lang="en">
    < head >
         < meta  charset="UTF-8">
         < title >Title</ title >
         < style >
             ul,li,a,*{padding:0; margin:0;list-style: none;text-decoration: none;}
             li{display: inline-block;border: thin solid red;}
         </ style >
    </ head >
    < body >
         < ul >
             < li >< a  href="">1</ a ></ li >
             < li >< a  href="">2</ a ></ li >
             < li >< a  href="">3</ a ></ li >
             < li >< a  href="">4</ a ></ li >
             < li >< a  href="">5</ a ></ li >
         </ ul >
    </ body >
    </ html >

      效果图如下:

       确实实现了横向的排列,实际上,也可以设置宽和高,大家可以自己尝试。但是,很明显有一个问题---我将padding和margin的值都设置为0,为什么他们之间还会有距离呢?实际上,这是inline元素自身出现的问题,而inline-block结合了inline和block属性,当然也就存在这个问题了。这些空隙是空白符,在浏览器中,空白符是不会被浏览器忽略的,多个连续的空白符浏览器会自动将其合并成一个。我们编写代码时写的空格,换行都会产生空白符。所以自然而然的两个元素之间会有空白符,如果将上述例子中的a标签写成一行,空白符消失,菜单之间也就紧凑起来了。

      解决方法:我们要明白空白符归根结底是一个字符,只要我们将ul中的字符的大小设置位0,那么空白符也就不会存在了,但是这是a的字体大小也会继承ul的字体大小,那么就不见了,该怎么办,只需要将a中再设置一个字体不为0的大小覆盖

    即可。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <! DOCTYPE  html>
    < html  lang="en">
    < head >
         < meta  charset="UTF-8">
         < title >Title</ title >
         < style >
            < strong > ul{font-size: 0;}</ strong >
             ul,li,a,*{padding:0; margin:0;list-style: none;text-decoration: none;}
             li{display: inline-block;border: thin solid red;< strong >font-size: 15px;</ strong >}
         </ style >
    </ head >
    < body >
         < ul >
             < li >< a  href="">1</ a ></ li >
             < li >< a  href="">2</ a ></ li >
             < li >< a  href="">3</ a ></ li >
             < li >< a  href="">4</ a ></ li >
             < li >< a  href="">5</ a ></ li >
         </ ul >
    </ body >
    </ html >

      最终得到的效果图如下:

     

      

      我们还可以通过inline-block完成一个常见的三列布局。

      html代码如下:

    1
    2
    3
    4
    5
    6
    7
    < div  id="header">我是header</ div >
    < div  id="content">
         < div  id="left">我是left</ div >
         < div  id="center">我是center</ div >
         < div  id="right">我是right</ div >
    </ div >
    < div  id="footer">我是footer</ div >

      css代码如下:

    1
    2
    3
    4
    #header,#footer{height: 50px;width:800px;margin:0 auto;background: #ccc;text-align: center;line-height: 50px;}
    #content{width:800px;height: 500px;margin: 0 auto;background: #aaa;< strong >font-size: 0;</ strong >}//解决inline元素产生的空白符问题
    #left,#right{display: inline-block;width: 200px;height: 500px;background: #fadaac;font-size: 30px;}
    #center{display: inline-block;width: 400px;height: 500px;background: #dadada;< strong >font-size: 30px;</ strong >}//这里一定要重新设置font-size。

      最终效果图如下:

    第五部分:display:inherit

      规定应该从父元素继承 display 属性的值。举例如下:

    html代码如下:

    1
    2
    3
    4
    < div  id="parent">
         < div  id="first_son"></ div >
         < div  id="second_son"></ div >
    </ div >  

    css代码如下:

    1
    2
    3
    #parent{ < strong >display: inline-block;</ strong > font-size: 0; background: #cadafa;width: 400px;height: 300px;}
    #first_son{< strong >display: inherit;</ strong > background: #eaedac;width: 200px;height: 100px;}
    #second_son{< strong >display: inherit;</ strong > background: #da5dd8;width: 200px;height: 100px;}

    效果图如下:

      

      即我们先设置了id为parent的元素的display属性值为inline-block,然后将其子元素的display属性值设置为inherit(继承),于是,子div的display属性值继承了父元素的display属性值为inline-block。(注意,我在id为parent的div元素中设置了font-size:0px;这样可以有效解决由inline元素带来的空白符问题。)

     

     

     

    展开全文
  • font-display的用法

    千次阅读 2020-08-27 17:10:51
    font-display的用法 如果你已经对CSS有了一定的了解,也许你之前已经掌握了一些字体加载的方法,那么你使用过font-display吗? font-display是CSS中新添加的属性,它能实现之前类似于Font Loading API和Bram Stein’...

    font-display的用法

    如果你已经对CSS有了一定的了解,也许你之前已经掌握了一些字体加载的方法,那么你使用过font-display吗?

    font-display是CSS中新添加的属性,它能实现之前类似于Font Loading API和Bram Stein’s Font Face Observer这种第三方脚本实现的功能。

    如果这是你第一次接触这类知识,那也没有关系,我们会先简单介绍一下浏览器加载字体的默认方法。

    浏览器是如何加载字体的?


    浏览器经常会出现一些出乎我们意料的问题,而字体的加载就是其中之一。大多数浏览器在自定义字体还未下载之前会先隐藏文本。这就是大家所说的[FOIT(Flash of Invisible Text)](https://css-tricks.com/fout-foit-foft/)。

    在这里插入图片描述
    虽然现在在一般加载的过程中你可能不会看到这种情况,不过我们可以通过限制连接速度来观测浏览器的默认行为。可以看出,大部分浏览器会隐藏文本长达3s直到字体加载完成。其他浏览器,比如Safari会等待更长的时间。有些甚至永远都不会显示文本。

    目前我们解决这类问题的方法是使用JavaScript-based脚本(比如 Font Face Observer)来跟踪字体是否被下载。在字体被下载完成前,我们使用浏览器自带的字体来显示文本,直到我们通过JavaScript探测到字体下载完成,我们给我们的文档添加一个CSS类来应用我们的自定义字体。这种方法我们之前有过详细介绍。比如,假设你有一个段落需要使用Open Sans Regular,那你就需要按以下的方法来实现:

    
    p { font-family: "Arial", "Helvetica", sans-serif; }
    
    

    在字体下载的时候,会先使用Arial 或者 Helvetica(这取决于你的浏览器支持什么字体)来显示文本。当通过JavaScript探测到Open Sans Regular字体下载完成,我们就将fonts-loaded添加到**< html >标签上,然后通过编写CSS来使用Open Sans**渲染该段落

    .fonts-loaded p { font-family: "Open Sans Regular"; }
    
    

    这个方法虽然能奏效,但是显得相当笨重。这时就有了font-display的用武之地啦。

    了解font-display


    **font-display**是一个新的CSS属性,最先是在Chrome 49中进行试验,现在在Opera和Opera for Android中也得到了支持。通过使用这个属性,我们可以看到如何通过一行CSS代码来实现之前通过JavaScript脚本才能实现的功能。

    我们在**@font-face指令中使用font-display**来加载自定义字体。这个属性可以添加以下的值:

    auto:默认值。典型的浏览器字体加载的行为会发生,也就是使用自定义字体的文本会先被隐藏,直到字体加载结束才会显示。
    swap:后备文本立即显示直到自定义字体加载完成后再使用自定义字体渲染文本。在大多数情况下,这就是我们所追求的效果。之前提及到的JavaScript脚本实现的功能就基本和这个是一致的。
    fallback:这个可以说是auto
    swap
    的一种折中方式。需要使用自定义字体渲染的文本会在较短的时间(100ms according to Google )不可见,如果自定义字体还没有加载结束,那么就先加载无样式的文本。一旦自定义字体加载结束,那么文本就会被正确赋予样式。
    optional:效果和fallback几乎一样,都是先在极短的时间内文本不可见,然后再加载无样式的文本。不过optional选项可以让浏览器自由决定是否使用自定义字体,而这个决定很大程度上取决于浏览器的连接速度。如果速度很慢,那你的自定义字体可能就不会被使用。
    现在我们已经了解了
    font-display
    可设置的值,那我们就可以在**@font-face规则中使用它了。下面是使用swap**为值的一个例子:

    @font-face { font-family: "Open Sans Regular"; font-weight: 400; font-style: normal; src: url("fonts/OpenSans-Regular-BasicLatin.woff2") format("woff2"); font-display: swap; }
    
    

    在这个例子里我们通过只使用WOFF2文件来缩写字体。另外我们使用了swap作为font-display的值,
    页面的加载情况将如下图所示:
    在这里插入图片描述
    当我们使用JavaScript来控制字体加载的时候,我们希望确保文本一开始默认就是可见的,当自定义字体下载完毕后载应用自定义字体渲染文本。

    那后备文字是什么呢?当你给一个元素指定font-family时,你可以指定一系列的字体,并通过逗号来分隔这些字体。在自定义字体后的那些字体如果能得到浏览器的支持,那么这个字体就是后备字体:

    p { font-family: "Open Sans Regular", "Helvetica", "Arial", sans-serif; }
    

    在上面这个例子中,自定义字体是Open Sans Regular,系统字体是 HelveticaArial。当我们将font-display的值设置为swap的时候,最开始会先使用系统字体来显示文字,当自定义字体下载完毕后,自定义字体就会取代系统字体。当font-display的值设置为fallbackoptional时,显示的字体将会取决于在决定如何处理自定义字体时系统堆栈中的后备字体是什么字体。

    大多数时候你可以选择使用swap作为属性值


    如果你不知道选择那个作为**font-display**的属性值,你可以选择**swap**。它不仅提供了自定义字体和内容的可访问性之间的最佳平衡,它还提供了和使用JavaScript脚本相同的字体加载行为。如果你在页面上有想要加载的字体,但是最终也可以不加载,这时你就可以考虑使用**fallback**或者**optional**作为**font-display**的值。

    如果不支持font-display怎么办?


    **font-display**的唯一缺陷就是还没有得到广泛的支持。在这种情况下你有两个选择:

    就只使用font-display属性。如果浏览器不支持这个属性,它只是没有办法使用该属性提供的便利之处,但是它不会破坏任何东西。
    你可以既提供font-display属性也提供一个替代方案。如果时间和资源允许,推荐你选择这个方案。
    如果你决定选择第二个选项,那么你首先需要去判断浏览器是否支持font-display属性。很幸运的是这是件很容易做到的事:

     
    if ("fontDisplay" in document.body.style === false) {
        /* JavaScript font loading logic goes here. */
    }
    

    通过判断之后的反馈,我们可以决定我们应该怎么做,是否应该使用第三方JavaScript脚本,比如Font Face Observer,或者是使用在Firefox, Chrome 和 Opera支持的字体加载API。

    if ("fontDisplay" in document.body.style === false) {
      if("fonts" in document) {
          document.fonts.load("1em Open Sans Regular");
          document.fonts.ready.then(function(fontFaceSet){
              document.documentElement.className += " fonts-loaded";
          })
      }
    }
    

    在这里我们使用了字体加载API来为我们解决这个问题。一旦API知道字体加载完毕,就可以在< html >标签上添加fonts-loaded类,然后我们就可以通过编写CSS来逐步应用自定义字体。

    p {
        font-family: "Helvetica", "Arial", sans-serif;
    }
    
    .fonts-loaded p {
        font-family: "Open Sans Regular";
    }
    

    很显然,我们肯定愿意使用一行CSS代码就能解决我们的需求,但是我们至少也需要有能力再需要的时候提供替代方案。随着时间的推移,我们可以预期这种解决方案,如字体加载API,在其他浏览器也将可以使用。

    如果使用的是第三方字体供应商呢?


    如果你使用的是第三方字体供应商,比如Google Fonts 或者 TypeKit,你能做的事情是很有限的。font-display属性必须在@font-face指令内使用。因为你不能控制第三方字体供应商的CSS文件,所以你没有办法控制font-display属性更用说给他传递值了。

    但是随着时间的推移,这些供应商可能会改变他们的CSS文件来包含font-display属性,或者允许它作为一个可配置的选项。

    总之,font-display是一个很受欢迎的属性,除了增强网页样式,它还大大简化了JavaScript中冗余繁杂的任务。如果你使用的是Chrome浏览器,你可以去**chrome://flags/#enable-experimental-web-platform-features启用实验性网络平台并亲自试一试font-display**属性。

    本文根据@Jeremy Wagner的《font-display for the Massese》所译,整个译文带有我们自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:https://css-tricks.com/font-display-masses。

    展开全文
  • WiFiDisplay

    万次阅读 2017-08-30 09:20:22
    1WiFiDisplay简介 1.1WiFiDisplay概述 WiFiDisplay(WFD)是WiFi联盟在已有技术的基础上,为了加速视/音频的传输分享而提出来的一个新概念。WiFi联盟对此成立了一个认证项目:Miracast-- 用来认证一个设备是否...
  • usb3.0 display adapter

    热门讨论 2013-11-13 13:00:29
    USB-VGA Display Adapter原装自带驱动 绝对无毒
  • WifiDisplay(Miracast)技术原理及实现

    千次阅读 2020-08-11 16:13:55
    WifiDisplay(Miracast)技术原理及实现 文章目录WifiDisplay(Miracast)技术原理及实现1. WifiDisplay简介2. WifiDisplay协议流程3. WifiDisplay显示框架实现4. Android WifiDisplay实现4.1 Source端实现4.1.1 设备...
  • Android 渲染机制——Display List

    万次阅读 2020-12-09 13:58:27
    Display List Android 需要把 XML 布局文件转换成 GPU 能够识别并绘制的对象。这个操作是在 DisplayList 的帮助下完成的。DisplayList 持有所有将要交给 GPU 绘制到屏幕上的数据信息。 Display List 是什么? ...
  • pygame之display模块

    千次阅读 2019-01-23 16:37:56
    display-控制显示窗口和屏幕的Pygame模块 pygame.display.init—初始化显示模块 pygame.display.quit—取消初始化显示模块 pygame.display.get_init—如果已初始化显示模块,则返回True pygame.display.set_mode...
  • display:Displayport概念简述

    千次阅读 2020-01-15 19:30:41
    DB Data Byte DDC/CI Display Data Channel/Command Interface (VESA) DPCP DisplayPort Content Protection DPCD DisplayPort Configuration Data DJ Deterministic Jitter DMT Discrete Monitor Timing (VESA) DP ...
  • 多屏互动之Duet Display和Air Display

    千次阅读 2021-03-12 09:19:49
    Duet Display Air Display Duet Display Duet Display的Mac版本和Windows版本提供一周的免费试用,填入Visa或MasterCard信用卡卡号后就可以免费试用一周,一周后就需要付费使用了。一年19.9美元,支持Visa和...
  • 文章目录Android VirtualDisplay解析ImageReader和VirtualDisplay使用示例ImageReader介绍VirtualDisplay的创建Native创建VirtualDisplay数据流分析ImageReader获取数据 Android VirtualDisplay解析 Android支持多个...
  • pygame中display模块方法详解

    千次阅读 2020-05-19 12:39:28
    pygame.display.init() 功能:初始化显示模块 属性:init() -> None 初始化 pygame 显示模块。显示模块在初始化之前无法执行任何操作。在调用更高级别pygame.init()时自动处理。 Pygame将在初始化时从几个...
  • linux中安装oracle11g时display设置
  • Pygame详解(二):display 模块

    万次阅读 多人点赞 2019-01-06 21:52:50
    pygame.display Pygame 中用于控制窗口和屏幕显示的模块。 注:为了适应语境,display 在该文档中有时翻译为“显示”,有时翻译为“显示界面”。 函数 pygame.display.init() — 初始化 display 模块 pygame....
  • display:高通display overview

    千次阅读 2019-03-27 17:29:39
    ViG pipe –For video and graphics RGB pipe –For graphics ...这里我将高通的display overview原文档重要部分贴出来 1.4 Display driver in APQ8016E Android  Provides the optimized inter...
  • Android Display 系统分析

    千次阅读 2018-04-12 17:19:26
    Android Display 系统分析 大概两年前做过一个项目,大致是在Android 系统上实现双显的支持,其中有个需求是需要手动配置每个显示器的旋转角度,当时对Android 的 Display系统有关简单了解,但是不够深入。一直觉得...
  • 使用UE4的nDisplay渲染到多个显示器

    万次阅读 2019-03-20 09:41:41
    转自微信 ... 本文根据虚幻4.21版本的文档翻译。(原文地址:https://docs.unrealengine.com/en-us/Engine/Rendering/Rendering-to-Multiple-Displays-with-nDisplay) 越来越多的可视化系统通过多个显示器...
  • Android下WiFiDisplay功能探究

    千次阅读 2019-04-29 17:36:09
    1WiFiDisplay简介 1.1WiFiDisplay概述 WiFiDisplay(WFD)是WiFi联盟在已有技术的基础上,为了加速视/音频的传输分享而提出来的一个新概念。WiFi联盟对此成立了一个认证项目:Miracast-- 用来认证一个设备是否...
  • 其实利用Indirect Display驱动也可以办到,就是不大完美,但是这也是一个解决办法: windows10系统利用Indirect display 驱动生成一个不需要任何硬件的虚拟显示器,然后再利用电脑中一个真实的显示器。 这样系统中...
  • DisplayPort

    千次阅读 2018-12-19 10:32:33
    https://en.wikipedia.org/wiki/DisplayPort#Specifications From Wikipedia, the free ...DisplayPort (DP) is a digital display interface developed by a consortium of PC and chip manufacturers an...
  • display显示属性理解

    千次阅读 2019-01-03 15:32:13
    display显示属性理解 display属性设置一个元素应如何显示,是我们在前端开发中常常使用的一个属性,其中,最常见的有:   目录 display:none;表示此元素将不被显示。 display:block;将元素显示为块元素。(又...
  • 非常简单。 效果 1、创建分屏管理类 DisplayController ...public class Display... DisplayManager displayManager = (DisplayManager) App.getInstance().getSystemService(Context.DISPLAY_SERVICE); Displ
  • display 属性

    万次阅读 2019-10-08 09:29:29
    1、 display:flex 属性 display:flex 是一种布局方式。它即可以应用于容器中,也可以应用于行内元素。是W3C提出的一种新的方案,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持。...
  • display换行

    千次阅读 2020-10-19 11:04:06
    允许换行 display: flex; flex-wrap: wrap; 不允许换行 display: flex; flex-wrap: no-wrap;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,423,102
精华内容 569,240
关键字:

display