当前位置: 首页 > Web前端 > CSS

CSS布局——左边固定宽度,右边自适应宽度,等高布局

时间:2023-03-30 17:06:06 CSS

*{保证金:0;填充:0;}#左{浮动:左;宽度:220px;背景色:绿色;}#content{背景颜色:橙色;margin-left:220px;/*==等于左列宽度==*/}今天一早有朋友从妙维课堂转来一道CSS布局的面试题。需要解决,花了点时间写了几个DEMO。贴出来分享给大家。那么在看DEMO之前先看看这道面试题的具体要求:左边固定宽度,右边自适应屏幕宽度;左右两列,等高布局;左右两栏要求最小高度,例如:200px;(当内容超过200时,会以等高的形式自动增加)要求不使用JS或CSS行为实现;仔细分析一下试题的要求,实现效果并不算太难,但是感觉有点蛋疼的问题一样。但是仔细看之后你会发现不是这样的:左边是固定的,右边是自适应布局。这第一点应该很容易,实现的方法也挺多的。这不是必需的;左右栏的布局比较复杂,但是了解了如何实现等高布局就不难了。我个人认为这道试题的重点就在这里,如何实现轮廓布局;所以你需要了解如何实现这一点;至于第三个要求,应该是很全面的,我们随处可见到实现最小高度的代码;第四个要求我觉得是考官要我们面试人不要用js实现等高布局和最小高度功能。简单分析了上面的实现过程,最后的重点应该是“让你的代码同时实现两点,一个是左边固定布局,右边适配;另一个是实现两列等高。布局”,如果这两个功能都完成了,那你就可以交作业了。那么我们先来看看这两点是如何一起实现的:一列或两列布局:左边固定宽度,右边自适应宽度的布局,其实并不难。我想很多同学都已经实现了,那么我就给大家介绍两种常用的方法:方法一:浮动布局我用的这个方法是在左边浮动,在右边加一个margin-left值,这样就可以实现固定左侧和右侧的自适应布局效果HTML标记Leftsidebar

MainContent
CSS代码*{保证金:0;填充:0;}#左{浮动:左;宽度:220px;背景色:绿色;}#content{背景颜色:橙色;margin-left:220px;/*==等于左列宽度==*/}上面这个实现方法的关键点在于自适应中“div#content”的“margin-left”值宽度列应等于固定宽度列的宽度值。可以点击查看上面代码的DEMO方法2:浮动负Margin实现该方法利用浮动负margin实现左边固定宽度右边自适应宽度的布局效果。大家可以仔细对比一下上面的实现方式,看看两者的区别:
CSS公司de*{保证金:0;填充:0;}#left{背景色:绿色;向左飘浮;宽度:220px;右边距:-100%;}#content{浮动:左;宽度:100%;}#contentInner{margin-left:220px;/*==等于左边栏的宽度==*/background-color:orange;}这个方法好像有点麻烦,但是也是很常用的一个方法,大家可以看看他的DEMO效果,感受下和之前DEMO的区别。我这里只展示这两种方法。你肯定还有其他的实现方法,我就不多说了,因为我们今天要讲的不是这个问题。上面已经完成了试题的第一个效果,那么大家要想办法实现第二个需求——两列等高布局。这也是这道面试题最看重的一点。如果不知道怎么实现等高线布局,建议先看本站的《八种创建等高列布局》,里面详细介绍了等高线布局的八种方法,并附上相关代码,我们后面也会用到该方法应用。现在两个关键点都已经完成了,我们要实现第三个需求,就是设置最小高度。这个方法很简单:min-height:200px;高度:自动!重要;高度:200px;上面的代码很轻松的帮我们实现了跨浏览器的最小高度设置问题。这样我们就可以交作业,完成这道面试题的考试了。为了让大家更好的理解,我在这里为大家准备了五种不同的实现方法:方法一:话不多说,直接上传代码,或者参考网上的DEMO,下面的DEMO都有HTML和CSS代码有兴趣的同学可以自行看看。HTML标记左侧边栏主要内容CSS代码*{margin:0;填充:0;}html{高度:自动;}正文{保证金:0;填充:0;}#container{背景:#ffe3a6;}#wrapper{显示:内联块;border-left:200pxsolid#d4c376;/*==这个值等于左栏的宽度值==*/position:relative;垂直对齐:底部;}#sidebar{float:left;宽度:200px;margin-left:-200px;/*==这个值等于左边栏的宽度值==*/position:relative;}#main{浮动:左;}#maing,#侧边栏{最小高度:200px;高度:自动!重要;高度:200px;}查看在线DEMO方法2HTML标记左侧边栏主要内容CSS代码*{margin:0;padding:0;}#container{overflow:hidden;}#left{背景:#ccc;向左飘浮;宽度:200px;底部边距:-99999px;填充底部:99999px;}#content{背景:#eee;左边距:200px;/*==这个值等于左边栏的宽度值==*/margin-bottom:-99999px;填充底部:99999px;}#left,#content{最小高度:200px;高度:自动!重要;高度:200px;}查看在线DEMO。方法3:HTML标记主要内容LeftSidebarCSS代码*{margin:0;填充:0;}#container{背景色:#0ff;溢出:隐藏;左填充:220px;/*宽度和侧边栏宽度*/}*html#container{height:1%;/*所以IE运行良好*/}#content{background-color:#0ff;宽度:100%;border-left:220pxsolid#f00;/*宽度和侧边栏宽度*/margin-left:-220px;/*宽度和侧边栏宽度*/float:right;}#sidebar{背景颜色:#f00;宽度:220px;浮动:对;margin-left:-220px;/*宽度和侧边栏宽度大小*/}#content,#sidebar{min-height:200px;高度:自动!重要;高度:200px;}查看在线DEMO效果方法4:HTML标记左侧边栏主要内容CSS代码*{padding:0;margin:0;}#container2{float:left;宽度:100%;背景:橙色;位置:相对;溢出:隐藏;}#container1{浮动:左;宽度:100%;背景:绿色;位置:相对;left:220px;/*宽度和侧边栏宽度*/}#col2{position:relative;margin-right:220px;/*宽度和侧边栏宽度和大小侧边栏宽度*/}#col1{width:220px;向左飘浮;位置:相对;margin-left:-220px;/*宽度和侧边栏宽度*/}#col1,#col2{min-height:200px;高度:自动!重要;高度:200px;}看法在线演示方法5:HTML标记>主要内容CSS代码*{padding:0;margin:0;}#container1{float:left;宽度:100%;溢出:隐藏;位置:相对;背景色:#dbddbb;}#container{背景颜色:橙色;宽度:100%;向左飘浮;位置:相对;left:220px;/*宽度和侧边栏宽度*/}#left{float:left;右边距:-100%;margin-left:-220px;/*宽度等于侧边栏宽度*/width:220px;}#content{浮动:左;宽度:100%;margin-left:-220px;/*宽度和侧边栏宽度*/}#contentInner{margin-left:220px;/*宽度和侧边栏宽度学位大小*/溢出:隐藏;}#left,#content{最小高度:200px;高度:自动!重要;高度:200px;}查看在线DEMO对于上面的面试题,我一共使用了五种不同的方法,经过测试可以在所有浏览器中运行,最后我有几点要指出:在上面所有的DEMO中,你应该注意要他们定向协调,价值观要统一。如果想尝试使用自己的布局需要请根据相关代码链接修改宽度值;在上面所有的DEMO中,它们之间的间距都没有设置,如果你想让它们之间有一定的间距,有两种可能的实现方式,一种是在上面的DEMO中基本修改相关参数。第二,给对应的添加“div”标签,并设置它的“padding”值,这样比较安全,不会破坏你的布局。因为我们这里有一个列使用了自适应宽度,在某些浏览器下,当浏览器屏幕被拉到一定大小时,给我们的感觉是自适应宽度列的内容好像被隐藏了。在你的实际项目中,最好在“body”中加上前面的“min-width”设置。那么关于这个面试题,就我个人的拙见,先说到这里吧。我希望每个人都会喜欢这个答案。如果你有更好的答案,请告诉我,以便我努力学习。如果大家发现有什么错误,或者对此有更好的意见,可以直接在下方评论给我留言。如需转载请注明出处:W3CPLUS版权归作者所有。商业转载请联系作者授权,非商业转载请注明出处。原文:http://www.w3cplus.com/css/tw...?w3cplus.com