CSS页面布局是web前端开发的最基本的技能,本文将介绍一些常见的布局方法,涉及到盒子布局,column布局,flex布局等内容。本文中,你可以看到一些水平垂直居中的方法,左侧固定宽度,右侧自适应的一些方法。如果你有更多关于布局方面的技巧,欢迎留言交流。

一、神奇的居中
经常看到有一些面试题问如何实现水平垂直居中,还要求用多种方法。唉唉唉!下面介绍一下我所知道的实现居中的方法。
(1)父元素relative;子元素absolute,top:50%;left:50%;margin-left:-自己宽度的一半;margin-right:-自己高度的一半。
 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平垂直居中2</title>
<style type="text/css">
.container{
width: 100%;
height: 500px;
background: red;
position: relative;
} .child{
width: 300px;
height: 300px;
background: blue;
position: absolute;
left: 50%;
margin-left: -150px;
top: 50%;
margin-top: -150px;
}
</style>
</head>
<body>
<div class="container">
<div class="child"></div>
</div>
</body>
</html>

这种方法需要知道子元素的宽高。

(2)父元素:relative;子元素:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平垂直居中3</title>
<style type="text/css">
.container{
background: red;
width: 100%;
height: 500px;
position: relative;
} .child{
background: blue;
width: 300px;
height: 300px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
</style>
</head>
<body>
<div class="container">
<div class="child"></div>
</div>
</body>
</html>
此法跟上面的相似,但是用到了transform,好处是不需要知道子元素的宽高,兼容性方面我查了一下,看着办吧。



(3)父元素:display: flex;justify-content: center;align-items: center;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平垂直居中1</title>
<style type="text/css">
.container{
width: 100%;
height: 400px;
background: red;
display: flex;
justify-content: center;
align-items: center;
} .child{
width: 300px;
height: 300px;
background: blue;
}
</style>
</head>
<body>
<div class="container">
<div class="child"></div>
</div>
</body>
</html>

这种方法看起来有些高大上,根本不用理会子元素。

(4)水平居中的方法,父元素:text-align:center
 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>水平垂直居中4</title>
<style type="text/css">
.container{
background: red;
width: 100%;
height: 500px;
text-align: center;
} .child{
background: blue;
width: 300px;
height: 300px;
margin: auto;
}
</style>
</head>
<body>
<div class="container">
<div class="child"></div>
</div>
</body>
</html>
如果子元素里的文字不要水平居中的话,那么用此法将遇到不少麻烦。
(5)水平居中方法,子元素:margin:0 auto;这个好说,不上代码了
好了,关于居中问题就说这么多,如果你还有更好的方法,请告诉我。
二、左侧固定宽度,右侧自适应
这是一个比较常见的需求,下面介绍几种实现方法。
(1)左边定宽,左浮动,右边不指定宽。
 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>做固定,右边自适应</title>
<style type="text/css">
body{
margin: 0;
}
.aside{
background: red;
width:200px;
height: 500px;
float: left;
}
.main {
background: blue;
height: 500px; }
</style>
</head>
<body>
<div class="aside">
我是左边的
</div>
<div class="main">
我是主体
我是主体
我是主体
我是主体
我是主体
</div>
</body>
</html>

做实验时无意发现了这种方法,意外之喜。

(2)用padding占位子的方法

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>左侧固定右侧自适应</title>
<style type="text/css">
.container {
padding-left: 200px;
width: 100%;
position: relative;
}
.left{
position: absolute;
left: 0;
right: 0;
background: red;
height: 500px;
width: 200px;
}
.right{
background: blue;
width: 100%;
height: 500px;
}
</style>
</head>
<body>
<div class="container">
<div class="left">zuobian</div>
<div class="right">
新华社俄罗斯喀山3月23日电(记者 魏良磊)中俄执政党对话机制第六次会议和第五届中俄政党论坛23日在俄罗斯喀山举行。和俄罗斯联邦总统普京分别致贺信。
</div>
</div>
</body>
</html>

注意了,absolute是脱离文档流的。.right的100%是相对于父容器的内容宽度的,不是整个宽度。

(3)父:display:flex;左定宽;右flex:1。ok

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>左边固定,右边自适应</title>
<style type="text/css">
.container{
display: flex;
}
.left{
width: 200px;
height: 500px;
background: red;
}
.right{
background: blue;
height: 500px;
flex: 1;
}
</style>
</head>
<body>
<div class="container">
<div class="left">zuobian</div>
<div class="right">
新华社俄罗斯喀山3月23日电(记者 魏良磊)中俄执政党对话机制第六次会议和第五届中俄政党论坛23日在俄罗斯喀山举行。和俄罗斯联邦总统普京分别致贺信。
</div>
</div>
</body>
</html>
弹性盒子很强,有木有。但是有的是要加前缀的,哪些要加自己查去,有一次做实验,电脑样式正确,手机就是不对,搞了好半天。
(4)父:display:table;左右:display:table-cell;左:定宽。
 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>左边固定,右边自适应</title>
<style type="text/css">
.container{
display: table;
}
.left{
width: 200px;
height: 500px;
background: red;
display: table-cell;
}
.right{
background: blue;
height: 500px;
display: table-cell;
}
</style>
</head>
<body>
<div class="container">
<div class="left">zuobian</div>
<div class="right">
新华社俄罗斯喀山3月23日电(记者 魏良磊)中俄执政党对话机制第六次会议和第五届中俄政党论坛23日在俄罗斯喀山举行。罗斯联邦总统普京分别致贺信。
</div>
</div>
</body>
</html>
据说这是一种古老的方法,我咋不知道呢?可能我比较年轻吧!

三、总结

CSS这个东西看起来挺简单的,要掌握好还真实不简单。特别佩服张鑫旭,他对CSS的研究真的非常非常深入,虽然说不太喜欢他的风格。先到这,以后在再补充下相关的内容。

CSS基础布局--居中对齐,左侧定宽右侧自适应的更多相关文章

  1. 请给出一个左侧定宽右侧自适应的HTML结构及样式

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  2. CSS左侧固定宽 右侧自适应(兼容所有浏览器)

    左侧固定宽,右侧自适应屏幕宽: 左右两列,等高布局: 左右两列要求有最小高度,例如:200px;(当内容超出200时,会自动以等高的方式增高) 要求不用JS或CSS行为实现: 仔细分析试题要求,要达到 ...

  3. table-cell完成左侧定宽,右侧定宽及左右定宽等布局

    使用table-cell完成以下几种布局(ie8及以上兼容) 1.左侧定宽-右侧自适应 .left{ width: 300px; height: 500px; border: 1px solid; f ...

  4. css 两列布局中单列定宽单列自适应布局的6种思路

    前面的话 说起自适应布局方式,单列定宽单列自适应布局是最基本的布局形式.本文将从float.inline-block.table.absolute.flex和grid这六种思路来详细说明如何巧妙地实现 ...

  5. CSS布局 两列布局之单列定宽,单列自适应布局思路

    前言 说起自适应布局方式,单列定宽单列自适应布局是最基本的布局形式.比如斗鱼的直播间,后台管理系统都是常用的 我们将从 float, inline-block, table, absolute, fl ...

  6. CSS布局 -- 左侧定宽,右侧自适应

    左侧定宽,右侧自适应 有很多种方法可以实现 缩小窗口试试看? 方案一: 左边左浮动,右边加个margin-left 查看 demo <!DOCTYPE html PUBLIC "-// ...

  7. NEC学习 ---- 布局 -两列, 左侧定宽,右侧自适应

    CSS代码:以下两处代码是NEC中CSS初始化样式和功能性样式.今后的NEC研究中,默认这两处是引用的. /* 这是CSS reset 代码 --- 初始化样式 */ /* reset */ html ...

  8. css高度已知,左右定宽,中间自适应三栏布局

    css高度已知,左右定宽,中间自适应三栏布局: <!DOCTYPE html> <html lang="en"> <head> <meta ...

  9. css实现左边定宽右边自适应的5种方法总汇

    在网页布局中,通常需要实现左边定宽右边自适应布局,默认html的结构如下: <div class="box"> <div class="left&quo ...

随机推荐

  1. 解读Java内部类

    一.基本概念: 顾名思义,内部类存在于外部类当中,依附于外部类.就像眼睛和脑袋的关系一样. 二.几点说明: 1.内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以 ...

  2. 关注云端搜索技术:elasticsearch,nutch,hadoop,nosql,mongodb,hbase,cassandra 及Hadoop优化

    http://www.searchtech.pro/ Hadoop添加或调整的参数: 一.hadoop-env.sh1.hadoop的heapsize的设置,默认1000 # The maximum ...

  3. MyBatis 源码分析——类型处理器

    官网上面讲到:无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型.那 ...

  4. 五金配件行业ERP解决方案

    五金行业信息化需求分析 “国内竞争国际化,国际竞争国内化”将是近几年我国五金行业发展的特点,中国作为全球五金制造中心的地位将进一步稳固.随着中国融入全球经济环境进程的加快以及经济实力的快速崛起,中国已 ...

  5. 【Java每日一题】20170308

    20170307问题解析请点击今日问题下方的"[Java每日一题]20170308"查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; ...

  6. Jsp,Servlet初学总结

    一.Jsp 1. 指令: <%@page language="java" import="java.*" contextType="text/h ...

  7. 深究WeixinJSBridge未定义之因

    对于一个没有使用微信JS-SDK的网站来说,我们竟然收到了WeixinJSBridge is not defined 的报错: 去网上一搜,发现很多开发者都遇到类似的问题: 我的微信项目,没有用到微信 ...

  8. 用php+mysql+ajax+jquery做省市区三级联动

    要求:写一个省市区(或者年月日)的三级联动,实现地区或时间的下拉选择. 实现技术:php ajax 实现:省级下拉变化时市下拉区下拉跟着变化,市级下拉变化时区下拉跟着变化. 使用chinastates ...

  9. 免费瘫软入院,付费发飙成壮汉,YoMail 想干嘛?

    大家好,我是YoMail 最近,Yo妹在思考一个非常严肃的事情. YoMail 全新升级,开启会员style!   新版叫Membership,即日就要与大家见面. 他的与众不同是推出"会员 ...

  10. .NET Core中的包、元包与框架

    本文为翻译文章,原文:Packages, Metapackages and Frameworks .NET Core是一个由NuGet包组成的平台.一些产品受益于细粒度包的定义,也有一些受益于粗粒度包 ...