vertical-align

目录

vertical-align
一、vertical-align基本:
二、vertical使用环境:
三、vertical-align ,line-height,幽灵空白点 导致神秘高度的问题:
1. 解释莫名高度出现的原因
2、调整div框框比图片 大的问题:
3、内联导致margin-top:-1000px失效的问题
四、vertical-align的线性属性
1、inline-block和baselineicon 简化开发
2、top/bottom
3、middle近似居中
五、文本属性/上下标text-top:盒子顶部和父级内容区域的顶部对齐上下标类属性值
六 、弹出框

vertical-aligncss中最难的一部分,需要和内联盒子模型,不同属性 以及不同属性在table-cell inline-block共同左右下才有的效果,最后的表现形式和x line-height font-size font-family ' 幽灵空白点'都有密不可分的关系

一、vertical-align基本:

当我们设置了line-heightfont-size的时候,往往发现元素比我们的line-height高,为什么了?这个就是由vertical-align导致的;

vertical-align的值有以下几种:

  • 线类:baseline top middle bottom
  • 文本类: text-top text-bottom
  • 上下标类:sub, super
  • 数值百分比类:20px 2em 20%

上边三种我们常见,但是数值和百分比功能强大,他兼容性比较好,然后不同的字体base-line能达到的效果并不一致,所以用数值比较直接一点,也能够自由的调整、精确控制,当vertical-align:0的时候表示的是baseline 然后在这个基础上上移一个像素或者是下移一个像素。

  • 百分比是相对于line-height
  • 但是我们还是建议直接用px,因为当我们具体写的时候,行高一般都已经确定了,很少会改变行高的,所以这个高度百分比意义不大,还需要计算,不如直接用vertical-align:1px;这种语法

二、vertical使用环境:

只能作用在display的计算值为inlineinline-blockinline-tabletable-cel

并不是我们设置了display或者是默认的行内元素就没问题了,狠毒css属性会在背后默默的改变display的属性,像floatposition:absolute

display:table-cell的时候,vertical-align这个语句是需要作用在自己身上,才能让儿子居中的,其他的都是作用在儿子身上的

其他vertical-align不起作用的情况:

1、父元素的行高不够

<style>
        .point03 .box1 {
            height: 128px;
            background: gray;
        }
        .point03 .content1 {
            vertical-align: middle;
            height: 50px
        }
    </style>
    <div class="point03 box">
        <div class="box1">
              <img src="./img/test.png" alt="" class="content1">
        </div>
    </div>



image-[图片上传中...(image-20180513095533920.png-94192b-1526198485931-0)] .png

效果如图,并没有垂直居中,那是因为幽灵空白节点不够大,加一行代码就好了

 .point03 .box1 {
            height: 128px;
            background: gray;
        }

2、作用在table-cell的字节点上的效果

<style>
        .point03 .box1 {
            height: 128px;
            background: gray;
            display: table-cell
        }
        .point03 .content1 {
            vertical-align: middle;
            height: 50px
        }
        .point03 .box2 {
            height: 128px;
            background: #ccc;
            display: table-cell;
            vertical-align: middle;
        }
        .point03 .content2 {
            height: 50px
        }
    </style>
    <div class="point03 box">
        <div class="box1">
            box01
              <img src="./img/test.png" alt="" class="content1">
        </div>

        <div class="box2">
            box02
            <img src="./img/test.png" alt="" class="content2">
        </div>
       
    
    </div>

如下图可见,verticalalign作用在img上的时候并没有居中,只有在display:table-cell的元素上的时候才能够居中

image-.

虽然就效果而言,table-cell元素设置了vertical-align垂直对齐的是子元素,但是他作用的并不是子元素而是table-cell元素自己,就算table-cell元素的子元素是一个块级元素的,也一样可以让其有个字垂直对齐的表现

三、vertical-align ,line-height,幽灵空白点 导致神秘高度的问题:

1. 解释莫名高度出现的原因

<style>
    .point04 .box1 {
        line-height: 64px;
        font-size: 20px;
    }

    .point04 .content1 {
        font-size: 32px;
    }
</style>
<div class="point04 box">
    <div class="box1">
        x
        <span  class="content1"> 文本x</span>
    </div>
</div>


image-20180513101050169.png

解释:如上,我们设置了line-height:64px得到的高度却是68这四个像素来自于哪里呢?来自于文本前边的幽灵空白节点,这里我们用span前边的x表示空白节点,因为 span前边的空白节点的font-size是继承的(这里我写在box下模拟继承)font-size不一样导致了基线位置不一样,font-size越大,基线越靠下,文本的基线就比前边的x的基线靠下,这样差开的基线使两个字不在同一水平上,导致高度比line-height要高

解决方法:两种方式

  1. 改变对齐方式,.point04 .content1 { font-size: 32px; vertical-align:top;}上对齐就好了
  2. 让幽灵空白点的字体大小和span里额一样大,也就是.point04 .box1 { line-height: 64px; font-size: 32px; }

2、调整div框框比图片 大的问题:

<style>
    .point04{margin: 100px;}
    .point04 .box1 {
       width: 300px;
       text-align: center;
        border: 1px solid #ccc;
    }

    .point04 .content1 {
        height: 70px;
    }
</style>
<div class="point04 box">
    <div class="box1">
        x
        <img src="./img/test02.jpeg" class="content1"/> 
    </div>
</div>


image-20180513102808480.png

解释 如图,高度77px 因为前边x所代表的幽灵空白点导致,所以会大于图片的70px的高度,其实这个效果的出现是line-height vertical-alien 幽灵空白点共同作用产生的,

解决方法: 四种方式:

  1. 图片块状,这样同时干掉了line-height vertical-align 还有幽灵空白点
  2. line-height足够小,半间距小到x的下边缘位置靠上就好了,这样就没有下边的半间距撑开了。让line-height:0
  3. Font-size足够小 ,同时line-height:150%/1.5之类的。
  4. 图片设置其他的vertical-align的属性值,top,middle,bottom都可以

3、内联导致margin-top:-1000px失效的问题

<style>
    
    .point04 .box1 {
        border: 1px solid #ccc;
    }

    .point04 .content1 {
        margin-top:-1000px;
        height: 70px;
    }
</style>
<div class="point04 box">
    <div class="box1">
        x
        <img src="./img/test02.jpeg" class="content1"/> 
    </div>
</div>
image-20180513104321052.png

如图,本来设置了margin-top:-1000px;我们期望的是吴彦祖能够飞掉,消失在框框中,但是,图中我们看到,并没,原理和上边讲的高度变高是一样的,css世界中,非主动触发位移的内联元素是不可能跑到计算容器外边的

  1. 幽灵空白点无法主动设置到inline的外边
  2. 幽灵空白点的下边和图片是需要对齐的

所以图片无法跑到box的外边了

四、vertical-align的线性属性

1、inline-block和baseline

一开始我们知道线性属性有:baseline top middle bottom

Inline 的vertical-align的baseline就是x的下边缘

如果是inline-block元素,里边没有内联元素,或者overflow不是visible,baseline就是margin的底边缘

否则就是元素里左后银行内联元素的基线

<style>
    .point05 {
        margin: 100px;
    }

    .point05 .box1 {
       display: inline-block;
       width: 150px;height: 150px;
       border: 1px solid #cad5ec;
       background: #f0f3f9;
    }

   
</style>
<div class="point05 box">
    <span class="box1">
       
    </span>
    <span class="box1">x-baseline</span>
</div>

image-20180513124328048.png

效果如图,没有文字的时候,基线就是容器的下边缘,也就是下边框下边的文字。如果里边有文字的时候也就有了行内元素,第二个框就是这些字符的基线,我们看到第一个框的下边缘和第二个框的x的下边缘对齐了。

如果line-height:0

image-20180513124328048.png

line-height为0 字符占据的高度也是另,高度的起始位置就成了中心位置,这样文字就有一半到了外边

icon 简化开发

<style>
    .point05.box1 {
      line-height: 20px;
    }
    .point05 .icon{
        display: inline-block;
        width: 20px;height: 20px;
        white-space: nowrap;/*不换行*/
        letter-spacing: -1em;/*所有的里边的子都在一块儿显示*/
        text-indent: -99em;/*首行缩进的看不见了*/
    }
    .icon::before{content: "\3000"}


    .icon_delete{
        background: url(./img/delete@2x.png) no-repeat center;
    }

   
</style>
<div class="point05 box1">
    <span class="icon icon_delete">删除</span>delete
</div>
image-20180513130948836.png

注意:

  • 图的高度和当前的行高都是20px;(不是由图片说了算,而是css决定了多么高)
  • 图标标签里永远有字符:(before的作用就是如此)
  • 图标不适用overflow:hidden是为了保证里边的字符基线,同时还要让里边的字符不可见
  • box外边的容器需要时inline-block,然后就是找基线的问题了

如下,不同的字体大小都没有问题

<Style>
 .point05 .larger {
            font-size: 20px;
        }
</Style>
  <div class="point05 box1">
        <h4> 标签内没有文字
        </h4>
        <p class="">
            x
            <span class="icon icon_delete"> </span> x删除
        </p>
        <h4>标签有文字</h4>
        <p class="">
            <span class="icon icon_delete "> 删除 </span> x删除
        </p>
        <h4>large</h4>
        <p class="larger">
            <i class="icon icon_delete "> 删除 </i> x删除</p>
        <p>
            <i class="icon icon_delete "> </i> x删除
        </p>

    </div>
image-20180513150029646.png

2、top/bottom

top垂直上边对齐

  • 内联元素,元素底部和当前行框盒子的顶部对齐
  • Table-cell 元素底padding边缘和表哥行的顶部对齐

如果是内联元素,则和这一行位置最高的内联元素顶部对齐

如果是table-cell 脑补成tdtr的上边缘对齐

这里的边缘指的是行框盒子,而不是块状容器的上下边缘

3、middle近似居中

  • 内联元素,元素垂直中心点和行框盒子基线往上1/2 x-height处对齐
  • Table-cell 单元格填充盒子相对于外面的表格行居中

关键是第一点,盒子的基线就是x的下边缘,x-height就是x的高度,所以middle的点就是x的交叉点,但是一般来说,x的交叉点因字体的原因会略微靠下,一般来说也就是一两个像素的问题,font-size越大越明显

解决:如果要实现真正意义上的垂直居中,通常是font-size:0将x变成一个看不见的点,这样就可以实际上的居中了

五、文本属性/上下标

text-top:盒子顶部和父级内容区域的顶部对齐

内容区域:可以看成是firefox /ie浏览器文本选中当前元素font-sizefont-family下应由区域的大小

实用性不强,因为:

  • 场景比较缺乏,当前css以精致布局为主流,对齐文本场景比旧时代少很多
  • 文本类垂直对齐理解成本高,不如直接用vertical-align或者是relative等
  • 内容区域不直观,容易改变

上下标类属性值

subsuper两个 ,b的圈在小编,表示下标,p在上边,标上上标

vertical-align:super:提高盒子的基线到父级合适的上标基线位置

。。。合适的位置,这个语义这么不明确,怎么玩。。。

注意的是,vertical-align不会改变font-size的大小,但是可以实用<sup></sup>这一类的标签

六 、弹出框

 <style>
        .point06.container{
            position: fixed;
            top: 0;right: 0;bottom: 0;left: 0px;
            background: rgba(0,0,0,.5);
            text-align: center;
            font-size:0;
            white-space: nowrap;
            overflow: auto;
        }
        .point06.container::after{
            content: "";
            display: inline-block;
            height: 100%;
            vertical-align: middle;
        }
        .dialog{
            display: inline-block;
            vertical-align: middle;
            background: white;
            text-align: left;
            font-size: 14px;
            white-space: nowrap;
        }
        .content {
            width: 240px;
            height: 120px;
            padding: 20px;
        }

    </style>
    <div class="point06 container">
        <div class="dialog">
            <div class="content">test</div>
        </div>
    </div>
image-20180513155305937.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 参考文章:深入了解CSS的line-height属性Vertical-Align: 你需要知道的所有事【译】Ver...
    若邪Y阅读 3,419评论 1 6
  • 一早被现实搅扰,大城市小城市,终于还是到了选择这个生存问题的时刻吗?刷微博看到的每一张嘻笑脸孔,每一条精心编织的段...
    一天到晚吟唱的鱼阅读 150评论 0 0
  • (看图作诗)。 秋风瑟瑟云低沉,凉风撩起无尽愁。 伫立江边凝遥望,白鹭飞过无佳音。 山水相映轻舟过,一片乡愁千缕思...
    情爱千秋阅读 447评论 8 17
  • 生活其实很简单 每天睁开眼就是全新的开始 走过的地方,看到的美丽的不知名的花儿 满心欢喜的把他们收入相机,收入眼底...
    文若男阅读 443评论 7 11