`
aijuans
  • 浏览: 1570500 次
社区版块
存档分类
最新评论

为你总结老生常谈的

 
阅读更多

我相信所有的前端菜鸟在刚开始工作的时候都会和我一样,收到实现居中的需求。

网上的CSS居中帖子不胜枚举,但大多都没有很好的总结(或者有好的但是我没运气碰到)

今天就自己写一个吧,也算是对之前工作的总结。

 

一、水平居中

1.将元素水平居中(use margin & width property)

css code:

        div.h_align{
            border: 1px solid black;
            
            /*key code:*/
            margin-left: auto;
            margin-right: auto;
            width: 300px;/*必须指定宽度*/
        }

 html code:

<div class="h_align">我是div!come on 求水平居中!</div>

summary:

(1)以上方法在无文档类型或文档类型是HTML4时,对IE无效,因为此时IE将此文档解析为HTML而不是XHTML或HTML5

(2)使用上述方法水平居中,必须指定宽度

 

2.将元素水平居中(use absolute position & width)

css code:

        section{
            border: 1px solid red;
            
            /*key code:*/
            position: absolute;
            left: 50%;
            width: 300px;
            margin-left: -150px;
        }

html code:

<section>我是section!同求水平居中!</section>

summary:

(1)这个方法的思想是,利用绝对定位 left 50%以后,使负外边距的值为元素宽度的一半,从而实现居中(这个思路也可以用在垂直居中上)

 

二、垂直居中

1.单行文本垂直居中

css code:

        p.single_line{
            border: 1px solid green;

            /*key code:*/
            height: 4em;
            line-height: 4em;
            overflow: hidden;
        } 

 

html code:

<p class="single_line">我是单行文本!我有100px高,我要垂直居中!</p>

 

summary:

(1)key:令行距和元素高度相同,这样就限定了容器内只能容纳一行文本内容,于是文本就居中了

(2)设定height和line-height时,推荐使用相对单位em,这样能够在字体非常大的时候,依然保持居中

(3)overflow:hidden是必须的,理由同上,也是为了保持居中

(4)优点:块元素和行内元素均适用此方法,并且在主流浏览器中适用

(5)缺点:文本长度有限(最多只能一行),且对于非文本的元素无效

 

2.无固定高度的多行文本垂直居中

css code:

        p.multi_line{
            border: 1px solid gray;
            width: 100px;

            /*key code:*/
            padding-top: 30px;
            padding-bottom: 30px;
        }

 

html code:

<p class="multi_line">我是多行文本!我宽100px但是没有固定高度!跪求垂直居中!</p>

 

summary:

(1)key:令上内边距和下内边距相等。值是多少无所谓,相等即可,使用上下外边距相等也可

(2)优点:块元素和行内元素均适用此方法,非文本元素也可以使用,并且在主流浏览器中适用

(3)缺点:无法设置高度

 

3.将固定高度的容器模拟表格布局实现垂直居中

css code:

        div.wrap1{
            border: 1px solid black;

            /*key code:*/
            display:table;
            height:300px;
        }
        div.wrap2{
            /*key code:*/
            display:table-row;
        }
        div.wrap3{
            /*key code:*/
            display:table-cell;
            vertical-align:middle;
        }
        div.maincontent{
            width:350px;
            background-color:black;
            color: white;

            /*key code:*/
            height:90px;/* less than wrap1.height */            
        }

 

html code:

    <div class="wrap1">
        <div class="wrap2">
            <div class="wrap3">
                <div class="maincontent">我老爸高300px,我自己是350 X 90 px,我也可以居中啦哇哈哈,可是别在IE6/7下看我噢</div>
                <!-- other content -->
            </div>
        </div> 
    </div>

 

summary:

(1)key:使用display属性中的table、table-row、table-cell来将元素模拟成表格布局。处于wrap3中的所有元素都会垂直居中,但是它们的高度总和不能超过wrap1的高度

(2)使用display:table-cell的时候必须同时在祖先元素使用display:table

(3)缺点:不能在IE6/7下实现

 

4.IE7及以下的解决办法

css code:

        div.IE7wrap1{
            border: 1px solid pink;

            /*key code:*/
            height: 300px;
            position: relative;
        }
        div.IE7wrap2{
            /*key code:*/
            position: absolute;
            top: 50%;
            left: 0;
        }
        div.IE7maincontent{
            width:350px;
            background-color:black;
            color: white;
            height: 90px;

            /*key code:*/
            position: relative;
            top:-50%;
            left: 0;
        }

 

html code:

    <div class="IE7wrap1">
        <div class="IE7wrap2">
            <div class="IE7maincontent">嘿哥们,我是IE6/7的解决方案,要看我就要用IE6/7,不然我丑爆了</div>
        </div>
    </div>

 

summary:

(1)算是一个css hack,服务于IE6/7

 

三、总结

工作时积累下来的经验,以及摘抄网上的资料,总结成这一篇博文,如果对您有帮助,请您推荐。

共勉。

9
2
分享到:
评论

相关推荐

    老生常谈的24种Java设计模式

    Java设计模式是在特定环境下,为了解决某类重复出现的问题而总结出来的一套成功或有效的解决方案。这些设计模式旨在提高代码的可重用性、可维护性和可扩展性。 设计模式通常包含以下几个关键要素: 模式名称:通过一...

    老生常谈android中的事件传递和处理机制

    当一个触摸事件发生时,事件会按照View的层次结构自顶向下进行传递,这个过程可以类比为公司内部的任务分配。事件首先由父View(如ViewGroupA)接收到,然后决定是否将事件传递给其子View(如ViewGroupB)或者直接...

    2021小五学年学期末的学习总结.docx

    态度决定一切,这句老生常谈的话在学习上同样适用。在这篇学习总结中,学生展现出积极和端正的学习态度,他理解并重视在课堂上的参与。上课专心听讲、遵守纪律、在遇到不懂的问题时能够主动寻求帮助,这些都是学习...

    老生常谈javascript的类型转换

    总结而言,JavaScript的类型转换涉及到了基本数据类型和字符串类型之间的转换,这包括了直接类型转换和通过内置方法进行的转换。掌握类型转换的知识点对于编写健壮的JavaScript代码至关重要,能够帮助开发者避免很多...

    老生常谈js数据类型

    总结,理解JavaScript的数据类型对于编写高效、健壮的代码至关重要。无论是基本数据类型还是引用数据类型,它们都有各自的特点和使用场景,熟练掌握这些知识,有助于更好地进行JavaScript开发。

    老生常谈Bootstrap媒体对象

    4. **媒体对象标题**:使用`.media-heading`类,为媒体对象提供标题或描述,但这一部分是可选的。 5. **浮动控制**:使用`.media-left`和`.media-right`类来控制媒体对象在主体中的浮动方式,分别使媒体对象向左或向...

    老生常谈Scanner的基本用法

    总结来说,`Scanner` 类是Java中用于读取输入数据的重要工具,它提供了多种方法来获取不同格式的数据。在实际编程中,我们需要根据具体的需求选择合适的方法,同时注意处理可能遇到的输入格式问题。通过熟练掌握 `...

    老生常谈iOS应用程序生命周期

    iOS应用程序生命周期知识点总结 iOS应用程序生命周期是指应用程序从启动到终止的整个过程。这个过程中,应用程序会经历多个状态,例如启动、激活、暂停、后台等。了解应用程序生命周期是开发iOS应用程序的基础。 ...

    老生常谈js中的MVC

    JavaScript中的MVC(Model-View-Controller)是一种广泛应用于Web开发的架构模式,它将复杂的交互逻辑分解为三个相互协作的部分:模型、视图和控制器。 1. **模型(Model)**: 模型主要负责存储和管理应用的数据...

    老生常谈css中float的用法

    总结一下,`float`在CSS中主要用作布局工具,可以实现元素的水平对齐和多列布局。然而,它会引发父元素高度丢失的问题,需要通过`clear`或`clearfix`方法来解决。虽然现代布局技术正在逐渐取代`float`,但了解和掌握...

    老生常谈 java匿名内部类

    总结来说,Java匿名内部类是一种灵活的语法结构,它可以简化代码并提供快速实现特定功能的途径。在编写Java程序时,合理利用匿名内部类可以提高代码的简洁性和可读性。但是,过度使用可能会导致代码过于复杂,因此应...

    大一学年自我总结.docx

    当我回顾大一这一年的学习与生活时,首先映入脑海的是那句老生常谈的话——时间飞逝。确实,转眼间,这一年的大学生活即将画上句号。在这一年里,我经历了从青涩新生到逐渐成熟的过程,无论是学术上的进阶还是个人...

    老生常谈js中0到底是 true 还是 false

    总结一下,`0`在JavaScript中作为逻辑值时,它在布尔上下文中的表现取决于其所在的具体情况。在直接转换为布尔值时,`0`是`false`。但在比较操作中,根据比较的另一侧的类型,`0`可能被转换为数字或字符串,导致结果...

    老生常谈遮罩层 滚动条的问题

    总结起来,解决遮罩层与滚动条问题的关键在于: 1. 使用JavaScript监听窗口的滚动和大小改变事件,当这些事件发生时,更新遮罩层的尺寸。 2. CSS中设置遮罩层为固定定位,全屏大小,并具有较高的z-index值。 3. ...

    老生常谈Python之装饰器、迭代器和生成器

    ### 老生常谈Python之装饰器、迭代器和生成器 #### 一、装饰器 装饰器是Python中的一个重要特性,它提供了一种在不改变原函数代码的情况下为函数添加新功能的方法。这对于增强代码的灵活性和可维护性至关重要。 #...

    老生常谈angularjs中的$state.go

    总结来说,$state.go是AngularUI Router服务的一部分,它允许开发者在单页应用程序的不同状态之间导航。通过$stateProvider定义的路由状态,配合使用$state.go可以实现视图的动态切换和参数的传递。ng-href和ui-sref...

    【原创】C#导出数据到EXCEL方法谈(附实例源码和超级无敌详细讲解)

    如果你耐心仔细看完本文,相信以后再遇到导出EXCLE操作的时候你会很顺手觉得SO EASY,主要给新手朋友们看的,老鸟可以直接飘过了,花了一晚上的时间写的很辛苦,如果觉得对你有帮助烦请留言支持一下,我会写更多基础...

    老生常谈PHP面向对象之标识映射

    这个映射机制包含一个名为`ObjectWatcher`的类,它是一个存储对象的小仓库。`ObjectWatcher`类通过一个私有静态属性`$instance`实现了单例模式,保证整个应用中只有一个`ObjectWatcher`实例。这样的设计可以避免重复...

    老生常谈js动态添加事件--- 事件委托

    总结来说,JavaScript中的事件委托是一种优雅且高效的处理动态元素事件的技术,它利用了事件冒泡机制,使得开发者能够为动态添加的元素以及大量元素绑定事件而不会造成性能问题。掌握事件委托技术对于编写高效、可...

    老生常谈计算机中的编码问题(必看篇)

    总结来说,理解计算机中的编码问题对于编程和信息技术工作至关重要,这关系到文本的正确存储、传输和显示。掌握ASCII、GB系列、Unicode和UTF编码的区别与用途,以及它们在实际应用中的转换规则,能有效防止和解决...

Global site tag (gtag.js) - Google Analytics