• 我的css释疑-float line-height inline-block vertical-align


    markdown的图片和链接格式相类似:
    [链接文字/图片的alt text] (链接地址/ 图片的地址), 只是图片要在前面加上感叹号!

    当内容中含有图片的时候,如果图片的高度大于行高,则含有图片 行的行框将被撑开到图片的高度

    注意:图片虽然撑开了行框,但是不会影响行高,因此也不会影响到基于行高来计算的其他属性。
    提示:当行内含有图片的时候,图片和文字的垂直对齐方式默认是基线对齐
    ![图片撑高行框] (http://www.baidu.com/)

    vertical-align 是使(行内) 元素的基线和 元素所在行/ (行框)的 基线 之间的垂直对齐方式

    vertical-align 只是对行内元素有效.对块级元素无效
    由于需要确定行框的基线高度, 所以对于空的div,(由于没有行框基线),所以 为了对图片进行垂直方向上的
    vertical-algin布局, 还需要专门去创建一个空的span元素, 设置span元素与父容器的高度相同, 然后,对图
    片应用vertical-align:center样式...

    vertical-align主要是应用于: 行内的图片 和 文字 之间的 对齐 方式
    vertical-align的值有: baseline/ top middle bottom/ super sub/ text-top text-bottom(text没有text-middle对齐)/...
    实际在使用时, 其实是不会过度关注(太在意)它们之间的对比排列位置的, 只要设置好就行.

    vertical-align属性是不适用于块元素的,这就是为什么有些人使用vertical-align属性无效的原因。
    但是可以使用display属性,设置其值为table-cell/inline,将块元素转化为单元格,然后再使用vertical-align属性。但存在兼容性问题

    此处需要特别注意的是:垂直对齐属性只对行内元素有效。例如有如下代码:

    <p style=”vertical-align:super;”>垂直对齐<span>上标</span></p>
    <p>元素默认为块级元素,因此在浏览器内浏览时将不会有任何变化。而如下代码:
    <p>垂直对齐<span style=”vertical-align:super;”>上标</span></p>
    <span>元素默认为行内元素
    

    为什么垂直居中 要使用/ 要写 两个元素的vertical-align: middle样式?

    因为, 如果只写一个元素如图片的vertical-align: middle, 则是让该图片元素的middle中间
    跟行框的baseline对齐, 而行框的baseline默认的是文字的baseline, 在span的底部, 这样, 自然的图片
    就在div的底部, 不能跑到div的垂直中间了.

    如果连同 "辅助布局元素" span和图片元素, 的vertical-align都写middle. 则能使这两个元素的middle中
    心相对齐了, 即: 图片居于div的垂直中心了.

    也可以这样看, 前面那个span的 vertical-align:middle, 就使得行框的baseline称为div的垂直中心线了...
    所以后面的img 的: vertical-align: middle, 就使得图片的middle跟行框的中心线对齐了.

    注意: 即使对于要应用垂直居中的元素是 文字, 也要用两个 vertical-align: middle. 也要增加一个布局
    的 span元素.

    对于图片元素来说, 其基线就是指 图片的底端

    块级元素和行内元素的转换

    块级元素和行内元素的区别: 是否自动产生换行? <是否前后都有换行>
    常用的块级元素: 表格相关的table/th/tr/td, 列表相关的ol/ul/li, 标题hx
    行内元素->块内元素: span: display:block.
    块级元素->行内元素(内联元素): div: display:inline.

    display的有哪些值?

    对于 HTML 等文档类型,如果使用 display 不谨慎会很危险
    ,因为可能违反 HTML 中已经定义的显示层次结构
    参考w3school的内容

    style type="text/css" // 这里指明类型type就是css就好了!
    display: block
    display:inline
    display: inline-block:作用: 在排版布局上同inline, 但是 "内联 非替换元素"原来不能不生效的
         width, height,内/外边距的 上下边距 属性将会如同block一样 得以生效.
          inline-block的主要使用场景: 触发 <span>等元素的 layout 设置属性, 以满足某些特殊的布局需要
    display: list-item:作为列表样式显示.
    display: 作为表格/及表格相关的一些元素显示: table/inline-table/table-row(~~<tr>, 不会显示边框)
    /table-column(~~<col>仅仅是指定列的对齐方式,不会显示内容)/table-cell(~~th, td).
    

    css的版本

    css1: 发布于1996年
    css2: 发布于1999年
    css2.1: 草案2007年.(以此为应用较多).

    边框的显示范围?

    对于行内 非替换元素, 它的边框线,只会包围 其内容的部分, 因为上下方向的内外边距无效.
    而对于block块级元素, 包括 inline-block元素, 边框线都会扩展到内外边距的范围.

    block元素和inline元素的区别?

    display:block
    block元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父
    元素宽度。(占父元素的100%宽度)
        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的同行特性。
    
    补充说明
    
    一般我们会用display:block,display:inline或者display:inline-block来调整元素的布局级别,其实
    display的参数远远不止这三种,仅仅是比较常用而已。
    IE(低版本IE)本来是不支持inline-block的,所以在IE中对内联元素使用display:inline-block,理
    论上IE是不识别的,但使用<font color="red"><strong>display:inline-block在IE下会触发layout,
    从而使内联元素拥有了display:inline-block属性的表象
    

    text-align与vertical-align的区别?

    text-align与vertical-align, 虽然都是设置align, 但是他们的用法差别很大:

    • 应用的级别不同, text-align应用的对象是 块级元素, 而vertical-align应用的是行内元素.

    • 书写的位置不同: text-align要写在父容器的div上, 而vertical-align写在行内元素本身上,

    • 作用的对象不同: text-align是设置 div容器中的 图片和文字(注意虽然名字叫text...,实际上对图片也有效)(不是div容器本身)的水平排布对齐位置, 它并不对div其作用. 而vertical-align就是设置行内元素自己!

    div的高度height:100% 无效?

    无效, 是因为height:100% , 是将div的高度设置为 父容器 高度的100%, 而div无法获取它的父容器: body
    的高度. 所以, body就会以div本身的大小来显示body的高度.

    注意: html文档的整个标签, 包括body, html 都是有实际意义的.
    body的父容器是html标签, 而html标签的父容器(或者说其本身所指代的)是: window, 或document

    标签.
    如果没有指定body, html的高度, 那么他们本身就是根据body中包含的内容, 来决定其高度的.
    所以, 要设置div的高度为整个屏幕, 就要显式的设置body和html标签 的高度:

    body, html{
    height: 100%;
    }
    

    这样, html和body的高度就为整个屏幕客户区: window.ClientTop/ClientHeight/ClientWidth的高度,
    然后, body下的div的高度为100%, 就是为其父容器的高度. ...

    margin-left: -1px?

    使用左边距, 这是一个技巧, 可以让 仅仅是为了布局而引入的span,div等占用的宽度/高度, 被还原出来.
    而不影响其他元素的占位关系.

    line-height在单行文本 垂直居中的应用.

    line-height除了在指定 文字行 与 行之间的 间距, 增大或减小行间距(如同 word中的单倍行距/ 2倍行距

    等)(关于line-height和 font-size/ 行距的数学关理论如前 ) 之外,

    还可以用于使文字 居于 有背景图片的 单行 垂直居中位置: 因为指定line-height后, 会在文字的上下方
    增加 (lineHeight - fonetSize)/2 这样的一个空白间距(内padding)

    w3school上的解释是: 该属性会影响行框的布局。在应用到一个块级元素时,它定义了该元素中基线之间的

    最小距离而不是最大距离。
    line-height 与 font-size 的计算值之差(在 CSS 中成为“行间距”)分为

    两半,分别加到一个文本行内容的顶部和底部。可以包含这些内容的最小框就是行框。

    所以只要使 文字的容器span或p的line-height: 100px; 和包含背景图片的div的高度 相等就可以使文字垂

    直居中!

    line-height应用的元素的 层次?

    line-heig字ht, 叫行高, 仅仅是指 文/文本, 而不管图片. line-height是容器中 文本行 与 文本行之间的距离.而不管容器是块级还是行级.
    它等于font-size 与 行间距 之和.
    line-height是指 (块级/行内)元素容器 中包含的 文本行之间 的距离.
    line-height并没有限制 包含 文字/文本 的父容器的 类型, 它可以是 块级元素, 也可以是行内容器.
    也就是说, 块级元素和 行内元素, 都可以使用 line-height样式. 文本可以是 单行, 也可以是多行.
    如: p.small, p.big , p , div,li, span { line-height: 200px;}
    如果 块级元素中, 只包含一行, 单行, 那么, 设置行高line-height等于容器(如li, p, div)的高度, 则文字的上下正好填充行间距的1/2.
    从而使单行文字 居于容器的 垂直居中. 这是line-height非常常用的一个用法

  • 相关阅读:
    python-pyStrich条形码模块
    js原型及原型链解析
    解决Genymotion下载device时较慢的问题
    nodejs实现OAuth2.0授权服务
    Swagger文档添加file上传参数写法
    TypeScript学习笔记之类
    TypeScript学习笔记之接口类型
    win64环境下使用curl命令
    TypeScript学习笔记之基础类型
    WebRTC介绍及简单应用
  • 原文地址:https://www.cnblogs.com/bkylee/p/5253162.html
Copyright © 2020-2023  润新知