display详解

总体概念
block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素)。block元素通常被现实为独立的一块,会单独换一行;inline元素则前后不会产生换行,一系列inline元素都在一行内显示,直到该行排满。
大体来说HTML元素各有其自身的布局级别(block元素还是inline元素):
常见的块级元素有 DIV, FORM, TABLE, P, PRE, H1~H6, DL, OL, UL 等。
常见的内联元素有 SPAN, A, STRONG, EM, LABEL, INPUT, SELECT, TEXTAREA, IMG, BR 等。
block元素可以包含block元素和inline元素;但inline元素只能包含inline元素。要注意的是这个是个大概的说法,每个特定的元素能包含的元素也是特定的,所以具体到个别元素上,这条规律是不适用的。比如 P 元素,只能包含inline元素,而不能包含block元素。




block,inline和inlinke-block细节对比
display:block
block元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父元素宽度。
block元素可以设置width,height属性。块级元素即使设置了宽度,仍然是独占一行。
block元素可以设置margin和padding属性。

display:inline
inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。
inline元素设置width,height属性无效。
inline元素的margin和padding属性,水平方向的padding-left, padding-right, margin-left, margin-right都产生边距效果;但竖直方向的padding-top, padding-bottom, margin-top, margin-bottom不会产生边距效果。

display:inline-block
简单来说就是将对象呈现为inline对象,但是对象的内容作为block对象呈现。之后的内联对象会被排列在同一行内。比如我们可以给一个link(a元素)inline-block属性值,使其既具有block的宽度高度特性又具有inline的同行特性。

转载于:https://www.cnblogs.com/zzc1/p/4776079.html

### Android 应用层 Display 实现原理 #### 一、Display 的概念与作用 在 Android 中,`Display` 是屏幕显示设备的一个抽象表示。它负责管理应用程序窗口的呈现位置和大小,并提供有关物理显示器的信息,如分辨率、密度等[^1]。 #### 二、WindowManagerService 和 SurfaceFlinger 协同工作 - **WindowManagerService (WMS)**:作为系统服务之一,在应用进程内运行,用于管理和排列所有可见的应用程序窗口。当 Activity 启动时会创建相应的 Window 对象并注册给 WMS;而 WMS 则通过 Binder IPC 调用来通知位于 SystemServer 进程中的 SurfaceFlinger 更新界面布局。 - **SurfaceFlinger**:这是图形合成器守护进程,专门处理来自不同客户端提交的画面缓冲区数据,并最终将其渲染至硬件帧缓存中去展示出来。每一个 app 或者其他组件如果想要绘制内容到屏幕上,则必须先向其申请一块专属区域即 surface【^2】。 ```java // 创建一个新的surface实例 ISurfaceComposer composer = ComposerService.getService(); composer.createSurface(...); ``` #### 三、ViewRootImpl 类的作用 每当有新的视图树结构被构建完成之后(比如启动了一个新 activity),就会触发 `PhoneWindow.DecorView.performTraversals()` 方法调用链路,进而初始化一个名为 `ViewRootImpl` 的类来连接 Java 层 UI 控件体系与原生 C++ 渲染引擎之间桥梁的角色。该对象不仅承担着测量(Measure)、布局(Layout)以及绘制(Draw)三个核心阶段的任务调度职责,还会监听输入事件并将它们分发给对应的 view 组件进行响应处理。 ```java final class ViewRootImpl implements android.view.ViewParent { ... } ``` #### 四、RenderThread 及 Hardware Acceleration 加速机制 为了提高绘图效率,Android 提供了一套基于 OpenGL ES 技术栈之上封装而成 hardware acceleration API 接口集。一旦开启了此特性开关后,所有的 canvas draw 操作都会交由 GPU 来执行而不是 CPU 。与此同时还引入了 RenderThread 子线程专门用来异步地准备下一帧图像资源从而减少主线程压力并改善流畅度表现。 ```xml <!-- 开启全局硬件加速 --> <application ... android:hardwareAccelerated="true"> </application> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值