zoukankan      html  css  js  c++  java
  • 行内元素的困扰

    我们在平常中在行内元素中编写内容,总会遇到一下不可思议的问题,比如:

    问题一:

    两个高度不一样的内联元素为什么是底部对齐?

    代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            div1 {
                width: 100px;
                height: 100px;
                background-color: #cccccc;
                display: inline-block;
            }
            
            div2 {
                width: 100px;
                height: 50px;
                background-color: #cccccc;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <body>
            <div1></div1>
            <div2></div2>
        </body>
    </body>
    </html>

    问题二:

    为什么两个行内块元素,第二个元素加一个X就会这样对齐?

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            div {
                width: 100px;
                height: 100px;
                background-color: #cccccc;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <body>
            <div></div>
            <div>x</div>
        </body>
    </body>
    </html>

    问题三:

    字体大小不同的两个span为什么会以底部对齐?

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            div {
                height: 100px;
                background-color: #cccccc;
            }
            .one {
                font-size: 50px;
            }
            
            .two {
                font-size: 16px;
            }
        </style>
    </head>
    <body>
        <body>
            <div><span class="one">one</span>
                <span class="two">two</span></div>
        </body>
    </body>
    </html>

     下面我来解答一下其中原理和解决方法:

    解决上面问题首先得明确一些基本知识:

      1、行内元素(包括行内块元素)对齐默认是以基线对齐(最重要)

      2、如果inline-block元素内没有内联元素或者overflow不是visible(这个不理解可以忽略),其基线就是其底部。

        如果inline-block元素中有内联元素和文字,基线就是最后一行内联元素或文字的基线。

      3、img元素中基线就是下边缘

      4、在文本之类内联元素中,基线是字符x的下边缘位置

    了解以上基础知识后:

    下面开始解答(基于个人知识理解,不一定完全正确,仅供参考)

    问题一:

    代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            div1 {
                width: 100px;
                height: 100px;
                background-color: #cccccc;
                display: inline-block;
            }
            
            div2 {
                width: 100px;
                height: 50px;
                background-color: #cccccc;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <body>
            <div1></div1>
            <div2></div2>
        </body>
    </body>
    </html>

    根据基本知识:

      1、行内元素(包括行内块元素)和文字对齐默认是以基线对齐(最重要)

      2、如果inline-block元素内没有内联元素或者overflow不是visible,其基线就是其底部。

        如果inline-block元素中有内联元素,基线就是最后一行内联元素的基线。

    得出:

      两个都属于行内块元素,所以默认以基线对齐,两个元素内部并没有任何元素和文字,所以其基线默认为底部,

      所以两个元素以底部对齐。

    问题二:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            div {
                width: 100px;
                height: 100px;
                background-color: #cccccc;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <body>
            <div></div>
            <div>x</div>
        </body>
    </body>
    </html>

    根据基础知识:

      1、行内元素(包括行内块元素)和文字对齐默认是以基线对齐(最重要)

      2、如果inline-block元素内没有内联元素或者overflow不是visible(这个不理解可以忽略),其基线就是其底部。

        如果inline-block元素中有内联元素和文字,基线就是最后一行内联元素或文字的基线。

    得出:

      第一个盒子的基线是其底部,因为其中并没有任何元素或者文字,第二个元素其中含有文字,且是最后一行,所以

      其这个元素的基线是文字的基线,最后两个元素的基线对齐就出现了上面的问题。

    解决方法:

      解决方法有很多,我讲一种最容易理解的:

      内联和行内块元素默认是以基线对齐,那么我们通过一个属性改变其对齐方式不就行了吗?

      因为其top并没有变化,都是元素顶部

      那么我们在第二个盒子加上vertical-align=top就行了

      

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            div {
                width: 100px;
                height: 100px;
                background-color: #cccccc;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <body>
            <div></div>
            <div style="vertical-align: top;">x</div>
        </body>
    </body>
    <html>

    上面问题还有非常多解决方法,主要是根据其基本知识来思考

    问题三:

      

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            div {
                height: 100px;
                background-color: #cccccc;
            }
            .one {
                font-size: 50px;
            }
            .two {
                font-size: 16px;
            }
        </style>
    </head>
    <body>
        <body>
            <div><span class="one">one</span>
                <span class="two">two</span></div>
        </body>
    </body>
    </html>

    根据基本知识:

      1、行内元素(包括行内块元素)和文字对齐默认是以基线对齐(最重要)

      

     得出:

      由于其字体大小不一样,所以如果还是默认基线对齐,那么就会导致上面的现象,看起来不对齐

    解决方法:

      文字中线是以中部为准,所以不管其字体大小多大,只要以中线对齐,那么文字必定对齐

      

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            div {
                height: 100px;
                background-color: #cccccc;
            }
            
            .one {
                font-size: 50px;
            }
            
            .two {
                font-size: 16px;
            }
        </style>
    </head>
    
    <body>
    
        <body>
            <div><span class="one" style="vertical-align: middle;">one</span>
                <span class="two" style="vertical-align: middle;">two</span></div>
        </body>
    </body>
    
    </html>
  • 相关阅读:
    .net面试--值类型和引用类型
    Centos7下安装Docker(详细的新手装逼教程)
    C# 开源框架(整理)
    service配置文件
    kafka消息队列、环境搭建与使用(.net framework)
    消息队列
    并发、并行、同步、异步、多线程的区别
    破解studio 3T
    HM后台(二)
    HM后台(一)
  • 原文地址:https://www.cnblogs.com/webpon/p/13060342.html
Copyright © 2011-2022 走看看