揭秘行内元素的高度对齐 行内元素水平对齐
lipiwang 2024-10-19 08:19 9 浏览 0 评论
几个概念
1. 行内元素
行内元素或者说内联元素,指的是在一行内出现的元素。比如<a>,<span>,<i>等;与行内元素对应的是块状元素,指的是独占一行的元素,比如<p>,<div>,<h>等,关于它们细致的特性和定义,请自己百度。我用大白话来解释下。如果说整个页面容器比作一个背篓,那么行内元素就相当于每条光溜溜的鱼,不管大鱼小鱼都往里放,它们之间可以认为没有空隙,每条鱼占的空间由它自己的大小决定;而块状元素就相当于把鱼装在一个包装箱再放进背篓,每条鱼占用多少空间由它的包装箱决定,即使再小的鱼装进一个大箱子,还是占用一个大箱子的空间。这个例子只是体现出它们占用空间的特性;至于块状元素占用一行的特性,你可以想像成装鱼的箱子是长条的,是不能往上累加的;如果非要往上累加的话,那就是行内块状元素,兼有行内元素和块状元素的特性。
2. 文档流
页面排版是有规则的,默认是自上而下,自左而右。凡是在这个规则之下的元素都是在文档流里的。就相当于电影院里座位安排也是按照一定的顺序来的。但是肯定有特殊情况,比如哪个富二代,哪个官二代要个专属的位子,敢不给吗。所以在页面布局里也有脱离文档流的情况,就是接下来说的三个属性。
2.1 positon:absolute
2.2 position:fixed
2.3 float
关于以上属性的详细用法,同样在这里不做赘述,请自行百度。只要设置了这些属性的无素,就可以脱离原有的布局规则,按新的规则来寻找位置。
http://img0.imgtn.bdimg.com/it/u=200851051,3718028993&fm=26&gp=0.jpg
元素位置
通过上面说的几个概念,元素的位置就可以敲定了。在文档流内的就是自上而下,自左而右依序而定。脱离文档流的不在本文讨论范畴。
1. 高度
块状元素,前面说了它的占用大小是根据包装盒的大小决定的,也就是属性设置好的宽和高来的。而行内元素,本身是不具备宽高属性的,它的高度是根据元素本身的大小来定的,比如字体大小,比如内边距。。。
2. 对齐
铺垫了这么长终于要说到重点了。本文要讨论的主要是行内元素的高度对齐。因为块状元素的宽和高都是固定的,没啥争议。而左右对齐也就是靠左或靠右。只有行内元素在垂直对齐跟想像的可能有点出入。
2.1 行内元素是默认对齐顶部吗
可以说是,也可以说不是。因为行内元素简单来说也是按照自上而下自左而右排列的。但是呢,随便找一段文字都看得出来,文字的顶部是留有空隙的,每一行文字之间也是有空隙的。相对父元素,它是顶部对齐;相对内部文字,它是基线对齐。
2.2 文字的位置由什么决定
明确的说,文字的位置由三个元素决定,分别是字号,行高,基线。
2.21 字号
字号越大,文字占的高度越大
2.22 行高
块状元素的行高就是高度,但是文字不一样,文字是不占满整个容器高度的,记得小学时用的作业本吧,四线三格。整个书写行高度用四条线分成三份,行高指的是最顶到最底。
2.23 基线
上面说到的行高分成三份,有些文字只用中间一份,比如x,a,c这些字母,有些占上面两份,比如b,q;有些就占下面两份,比如p,还有三份全占的。文字的占用规则自有其一套体系,咱们可以认为字母x占用空间的底部就是基线。同一行的行内元素默认的垂直对齐方式就是基线对齐。可以这样理解,每行内假想一个字母x,后面出现的行内元素都是默认以自身基线对齐字母x的底部,然后上下延伸,最终行内最顶点到最底点就成为了整行的行高。
3. 实例
<div>a x c b d p f <span>观察高度</span> <input style="height:70px;border:2px solid #000" value="first input"/> <input style="height:120px;border:2px solid #000" value="second input"/> <span>观察高度</span> </div>
3.1 纯文字
注意字母x底部位置
3.2 加入input
字母x与input的中心线是垂直对齐的,与input框内文字底部对齐,说明input的基线是x的底部。
3.2 令第一个input垂直对齐方式为bottom对齐
设置vertical-align: bottom;后,第一个input会寻找行内高度最大值的元素,然后底部与其对齐。
3.3 令第二个input垂直对齐方式为bottom对齐
设置vertical-align: bottom;后,第二个input会寻找行内高度最大值的元素,因为第一个input已经是底部对齐,所以两个input元素都与文字的底部对齐了。
ps: input的默认属性是inline-block,是具有块状元素和行内元素特性的,所以可以与行内元素在同一行,并且可以设置高度。
总结
对齐的原理是弄明白了,但是在开发中并不常用到行内元素的垂直对齐。真要涉及到对齐布局,用flex或者多套用几个div要方便的多。不过,在现有项目上如果对齐出现了问题,可以参考这篇文章,分析问题出在哪里。
相关推荐
- 前端入门——css 网格轨道详细介绍
-
上篇前端入门——cssGrid网格基础知识整体大概介绍了cssgrid的基本概念及使用方法,本文将介绍创建网格容器时会发生什么?以及在网格容器上使用行、列属性如何定位元素。在本文中,将介绍:...
- Islands Architecture(孤岛架构)在携程新版首页的实践
-
一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过了22年,承担着重要使命的同时,也遇到了很多问题:维护/...
- HTML中script标签中的那些属性
-
HTML中的<script>标签详解在HTML中,<script>标签用于包含或引用JavaScript代码,是前端开发中不可或缺的一部分。通过合理使用<scrip...
- CSS 中各种居中你真的玩明白了么
-
页面布局中最常见的需求就是元素或者文字居中了,但是根据场景的不同,居中也有简单到复杂各种不同的实现方式,本篇就带大家一起了解下,各种场景下,该如何使用CSS实现居中前言页面布局中最常见的需求就是元...
- CSS样式更改——列表、表格和轮廓
-
上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。1.列表List1).列表的类型<ulstyle='list-...
- 一文吃透 CSS Flex 布局
-
原文链接:一文吃透CSSFlex布局教学游戏这里有两个小游戏,可用来练习flex布局。塔防游戏送小青蛙回家Flexbox概述Flexbox布局也叫Flex布局,弹性盒子布局。它决定了...
- css实现多行文本的展开收起
-
背景在我们写需求时可能会遇到类似于这样的多行文本展开与收起的场景:那么,如何通过纯css实现这样的效果呢?实现的难点(1)位于多行文本右下角的展开收起按钮。(2)展开和收起两种状态的切换。(3)文本...
- css 垂直居中的几种实现方式
-
前言设计是带有主观色彩的,同样网页设计中的css一样让人摸不头脑。网上列举的实现方式一大把,或许在这里你都看到过,但既然来到这里我希望这篇能让你看有所收获,毕竟这也是前端面试的基础。实现方式备注:...
- WordPress固定链接设置
-
WordPress设置里的最后一项就是固定链接设置,固定链接设置是决定WordPress文章及静态页面URL的重要步骤,从站点的SEO角度来讲也是。固定链接设置决定网站URL,当页面数少的时候,可以一...
- 面试发愁!吃透 20 道 CSS 核心题,大厂 Offer 轻松拿
-
前端小伙伴们,是不是一想到面试里的CSS布局题就发愁?写代码时布局总是对不齐,面试官追问兼容性就卡壳,想跳槽却总被“多列等高”“响应式布局”这些问题难住——别担心!从今天起,咱们每天拆解一...
- 3种CSS清除浮动的方法
-
今天这篇文章给大家介绍3种CSS清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。首先,这里就不讲为什么我们要清楚浮动,反正不清除浮动事多多。下面我就讲3种常用清除浮动的...
- 2025 年 CSS 终于要支持强大的自定义函数了?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.什么是CSS自定义属性CSS自...
- css3属性(transform)的一个css3动画小应用
-
闲言碎语不多讲,咱们说说css3的transform属性:先上效果:效果说明:当鼠标移到a标签的时候,从右上角滑出二维码。实现方法:HTML代码如下:需要说明的一点是,a链接的跳转需要用javasc...
- CSS基础知识(七)CSS背景
-
一、CSS背景属性1.背景颜色(background-color)属性值:transparent(透明的)或color(颜色)2.背景图片(background-image)属性值:none(没有)...
- CSS 水平居中方式二
-
<divid="parent"><!--定义子级元素--><divid="child">居中布局</div>...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)