关于居中布局

发现之前写过的又忘了。

之前在百度前端学院的时候写过居中。【任务】 【自己写的例子】 【代码】

水平居中

非块状元素

居中可以直接父亲节点设置text-align,使用的前提是父节点是block,子元素是inline,类似h1里面的文本这种情况也算。

//css
.parent{
  text-align:center;
}
h1{
 text-align:center;
}
//html
<div class="parent"> 
  <span class="child">center</span>
</div>
<h1>title</h1>

不知道为什么移动端不能直接用 text-align mdn

当被设置元素为块状元素时用 text-align:center 就不起作用了,这时也分两种情况:定宽块状元素和不定宽块状元素。

定宽块状元素

满足定宽和块状两个条件的元素是可以通过设置“左右margin”值为“auto”来实现居中的,这种情况下,元素不能是浮动的。我们来看个例子就是设置 div 这个块状元素水平居中:

//css
.child{
  margin-left:auto;
  margin-right:auto;
}
//或者
//css
.child{
 margin: 0 auto;
}

//html
<div class="parent"> 
  <div>center</div>
</div>

还有一种是:

//css
.child{
 width:@width;
 left:50%;
 position:relative;
 margin-left:@width / 2;
}

.parent{
position:relative;
}
//html
<div class="parent"> 
  <div class="child">center</div>
</div>

不定宽度的块状元素

有三种方法居中(这三种方法目前使用的都比多):

  1. 加入 table 标签
  2. 设置 display;inline 方法
  3. 设置 position:relative 和 left:50%;

方法三:通过给父元素设置 float,然后给父元素设置 position:relative 和 left:50%,子元素设置 position:relative 和 left:-50% 来实现水平居中。

代码如下:

<body>
<div class="container">
    <ul>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
    </ul>
</div>
</body>

css代码:

<style>
.container{
    float:left;
    position:relative;
    left:50%
}

.container ul{
    list-style:none;
    margin:0;
    padding:0;
    
    position:relative;
    left:-50%;
}
.container li{
    float:left;
    display:inline;
    margin-right:8px;
}
</style>

垂直居中

line-height

父元素高度确定的单行文本的竖直居中的方法是通过设置父元素的 height 和 line-height 高度一致来实现的。如下代码:

<div class="container">
    hi!
</div>
//css代码:
<style>
.container{
    height:100px;
    line-height:100px;
}
</style>

flex的方式

.parent{
     display: flex;
     align-items: center;
}

垂直居中

#parent {
display: table;
}
#child {
display: table-cell;vertical-align: middle;
}

在 chrome、firefox 及 IE8 以上的浏览器下可以设置块级元素的 display 为 table-cell,激活 vertical-align 属性,但注意 IE6、7 并不支持这个样式。

有一个有趣的现象就是当为元素(不论之前是什么类型元素,display:none 除外)设置以下 2 个句之一:
position : absolute
float : left 或 float:right
元素会自动变为以 display:inline-block 的方式显示,当然就可以设置元素的 width 和 height 了且默认宽度不占满父元素。

vertical-align: text-top;

p里面不能嵌套 ul

当然还有一个布局方式就是flex布局,可以作为参考。
参考资料

  1. HTML和CSS高级指南之二——定位详解
  2. 居中方案,应该是最全的了吧
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,816评论 1 92
  • 一 外部式css样式 (也可称为外联式)就是把css代码写一个单独的外部文件中,这个css样式文件以“.css...
    KunMitnic阅读 974评论 0 1
  • CSS格式化排版 1、字体 我们可以使用css样式为网页中的文字设置字体、字号、颜色等样式属性。下面我们来看一个例...
    张文靖同学阅读 1,310评论 0 3
  • 本文主要是起笔记的作用,内容来自慕课网. 认识CSS样式 CSS全称为“层叠样式表 (Cascading Styl...
    0o冻僵的企鹅o0阅读 2,670评论 0 30
  • 本课来自http://www.imooc.com/learn/9请不要用作商业用途。 HTML5 HTML介绍 H...
    PYLON阅读 3,326评论 0 5