css多栏自适应布局_html/css_WEB-ITnose
css多栏自适应布局还是需要总结一下的,都是基本功。
一般使用position属性布局,或者用float属性布局,也可以使用display属性。
看资料说position适合首页布局,因为首页内容往往可以完全控制。float适合模板布局,模板中填充的内容无法控制。
一、左侧尺寸固定右侧自适应1、浮动实现
在css浮动一文已介绍过。
.left{ width: 150px; float: left; } /*流体布局*/.right { margin-left: 150px;}
原理:左侧定宽浮动,右侧使用margin-left,且不要定宽,容器尺寸变化右侧可自适应
<!DOCTYPE html><meta charset="utf-8"/><html><head> <title></title> <style type="text/css">.left { width: 150px; float: left; background-color: pink;}/*流体布局*/.right { margin-left: 150px; background-color: green;} </style></head><body> <div class="left"> 左侧内容固定---------左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左 </div> <div class="right"> 右侧内容自适应----------右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右 </div></body></html>
2、绝对定位实现
.container{width: 100%;position: relative;padding-left: 150px;}.left {width: 150px;position: absolute;left: 0;}/*流体布局*/.right {width: 100%;}
原理:重点是container设置padding-left给left腾出空间,left相对于containr绝对定位,right占满剩余空间。
<!DOCTYPE html><meta charset="utf-8"/><html><head> <title>2 columns layout of starof</title><style type="text/css">.container { width: 100%; position: relative; padding-left: 150px;}.left { width: 150px; position: absolute; left: 0; background-color: pink;}/*流体布局*/.right { width: 100%; background-color: green;}</style></head><body> <div class="container"> <div class="left"> 左侧内容 <strong>固定</strong> ---------左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左 </div> <div class="right"> 右侧内容 <strong>自适应</strong> ----------右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右 </div> </div></body></html>
3、BFC实现
.left {width: 150px;float: left;}.right {display: table-cell;}
原理:左栏定宽浮动,右栏生成BFC,根据BFC特性,与浮动元素相邻的,创建了BFC的元素,都不能与浮动元素相互覆盖。
<!DOCTYPE html><meta charset="utf-8"/><html><head> <title>2 columns layout of starof</title><style type="text/css">.left { width: 150px; float: left; background-color: pink;}/*流体布局*/.right { display: table-cell; background-color: green;}</style></head><body> <div class="left"> 左侧内容 <strong>固定</strong> ---------左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左 </div> <div class="right"> 右侧内容 <strong>自适应</strong> ----------右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右 </div></body></html>
效果同上。
4、table实现
.container {width: 100%;display: table;}.left {width: 150px;display: table-cell;}.right {display: table-cell;}
原理:不说了。
<!DOCTYPE html><meta charset="utf-8"/><html><head> <title>2 columns layout of starof</title><style type="text/css">.container { width: 100%; display: table;}.left { width: 150px; display: table-cell; background-color: pink;}.right { display: table-cell; background-color: green;}</style></head><body> <div class="container"> <div class="left"> 左侧内容 <strong>固定</strong> ---------左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左 </div> <div class="right"> 右侧内容 <strong>自适应</strong> ----------右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右 </div> </div></body></html>
二、 右侧尺寸固定,左侧自适应的流体布局
1、不改变DOM位置的写法【用的比较多】
在css浮动一文已介绍过。
.wrap { width: 100%; float: left; background-color: green;}.left { margin-right: 150px;}.right { width: 150px; float: left; margin-left: -150px; background-color: pink;}
原理:给left包裹一层wrap,wrap用来布局,left调整内容。
wrap和right都左浮动,这样right会超过视口,通过设置margin-left负值拉回。
此时right回到窗口,但会覆盖wrap内容。left就派上用场了,left设置margin-right将内容拉回。此时布局和内容都达到目的,完成!
<!DOCTYPE html><meta charset="utf-8"/><html><head> <title></title><style type="text/css">.wrap { width: 100%; float: left; background-color: green;}.left { margin-right: 150px;}.right { width: 150px; float: left; margin-left: -150px; background-color: pink;}</style></head><body> <div class="wrap"> <div class="left"> 左侧内容 <strong>自适应</strong> ---------左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左 </div> </div> <div class="right"> 右侧内容 <strong>固定</strong> ----------右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右 </div></body></html>
2、改变DOM位置的写法
在css浮动一文已介绍过。
.right{float: right;width: 150px;}.left{margin-right: 150px;}
原理:因为右边先渲染,右边右浮动,左边设margin-right即可。
<!DOCTYPE html><meta charset="utf-8"/><html><head> <title>2 columns layout of starof</title> <style type="text/css">.left { margin-right: 150px; background-color: green;}.right { width: 150px; float: right; background-color: pink;}</style></head><body> <div class="right"> 右侧内容 <strong>固定</strong> ----------右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右 </div> <div class="left"> 左侧内容 <strong>自适应</strong> ---------左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左 </div></body></html>
在css浮动一文已介绍过。
.left {float: left;}.right{display: table-cell;}
原理:左栏左浮动,右栏生成BFC,根据BFC特性:与浮动元素相邻的、创建了BFC的元素,都不能与浮动元素相互覆盖。
<!DOCTYPE html><meta charset="utf-8"/><html><head> <title>2 columns layout of starof</title> <style type="text/css">.left { float: left; background-color: green;}img{ width: 100px; height: 100px;}.right { display: table-cell; background-color: pink;}</style></head><body> <div class="left"> <img src="/static/imghw/default1.png" data-src="img/sheep.png" class="lazy" alt="css多栏自适应布局_html/css_WEB-ITnose" ></div> <div class="right"> 右侧内容 <strong>自适应</strong> ----------右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右 </div></body></html>
缺点:由于IE6并不支持display:table-cell,用css hack弥补,右侧设定overflow:auto;zoom:1或者overflow:hidden;zoom:1。
.right{ display:table-cell;_display:block;zoom:1;}
应用案例:红色框部分,两栏自适应,左右都不定宽,右侧栏数量不定。
四、三栏布局,左右定宽,中间内容自适应1、float+margin实现
.left {width: 150px;float: left;}.right {width: 100px;float: right;}.content {margin-right: 100px;margin-left: 150px;}.footer {clear: both;}
原理:用float实现。
左边定宽左浮动,右边定宽右浮动,中间margin调整左右间距,底部清除浮动。
Note:left和right的html代码写在content之前,先渲染。
<!DOCTYPE><html> <meta charset="utf-8"/><head> <title>3 columns layout of starof</title> <style type="text/css">.header { background-color: gray;}.left { background-color: pink; width: 150px; float: left;}.right { background-color: pink; float: right; width: 100px;}.content { background-color: green; margin-right: 100px; margin-left: 150px;}.footer { background-color: grey; clear: both;}</style></head><body> <div id="page"> <div class="header"> <h1 id="标题">标题</h1> </div> <div class="left"> <p> left <strong>固定</strong> -----------左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左 </p> </div> <div class="right"> <p> right <strong>固定</strong> ----------右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右 </p> </div> <div class="content"> <p>内容区域</P> <p> content <strong>自适应</strong> --------------自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应自适应 </p> </div> <div class="footer"> <p>页脚</P> </div> </div></body></html>
缺点:
DOM顺序和视觉顺序不同,关键的主体内容在文档后面,主次不合理。如果右栏包含大量脚本资源,可能影响甚至阻塞整个页面的载入。不适合用做整站页面框架的搭建。
2、float+负margin实现
原理:分而治之,多封装一层,两两处理。
原理简单,处理起来稍复杂,我分步说明。
步骤一:先处理好right布局,wrap和right都右浮动,即应用上面【右侧尺寸固定,左侧自适应的流体布局】的第一中方法。
<!DOCTYPE html><meta charset="utf-8"/><html><head> <title></title><style type="text/css">.wrap { width: 100%; float: left; background-color: green;}.leftwrap { margin-right: 150px;}.right { width: 150px; float: left; margin-left: -150px; background-color: pink;}</style></head><body> <div class="wrap"> <div class="leftwrap"> 留空 </div> </div> <div class="right"> 右侧内容 <strong>固定</strong> ----------右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右 </div></body></html>
目前的效果是这样:
将左边leftwrap留空部分补上下面结构
<div class="contentwrap"> <div class="content">主体部分</div></div><div class="left">左侧栏</div>
步骤二:再处理left和content布局,contentwrap右浮动,left左浮动,完成。
<!DOCTYPE html><meta charset="utf-8"/><html><head> <title>3 columns layout of starof</title><style type="text/css">/*步骤一:先处理好right布局,wrap和right都右浮动*/.wrap { width: 100%; float: left; } /*wrap控制布局*/.leftwrap { margin-right: 150px; }/*leftwrap控制内容*/.right { width: 150px; float: left; margin-left: -150px; background-color: pink; }/*步骤二:再处理left和content布局,contentwrap右浮动,left左浮动*/.contentwrap { float: right; width: 100%; }/*contentwrap控制主体内容布局*/.left { float: left; width: 200px; margin-right: -200px; background-color: pink; }.content { margin-left: 200px; background-color: green; }/*content控制主体内容*/</style></head><body> <div class="wrap"> <div class="leftwrap"> <div class="contentwrap"> <div class="content">content<strong>自适应</strong></div> </div> <div class="left"> 左侧内容 <strong>固定</strong> ---------左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左左</div> </div> </div> <div class="right"> 右侧内容 <strong>固定</strong> ----------右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右右 </div></body></html>
缺点:嵌套多层标签,html文档不够简洁。
总结:如果不是必要,浮动布局不要轻易定宽高,尽量自适应。
本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:有问题欢迎与我讨论,共同进步。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 기사는 HTML & lt; Progress & Gt에 대해 설명합니다. 요소, 그 목적, 스타일 및 & lt; meter & gt의 차이; 요소. 주요 초점은 & lt; progress & gt; 작업 완료 및 & lt; meter & gt; Stati의 경우

이 기사는 HTML & LT; Datalist & GT에 대해 논의합니다. 자동 완성 제안을 제공하고, 사용자 경험을 향상시키고, 오류를 줄임으로써 양식을 향상시키는 요소. 문자 수 : 159

이 기사는 HTML & lt; meter & gt에 대해 설명합니다. 범위 내에 스칼라 또는 분수 값을 표시하는 데 사용되는 요소 및 웹 개발의 일반적인 응용 프로그램. & lt; meter & gt; & lt; Progress & Gt; 그리고 Ex

기사는 HTML5 크로스 브라우저 호환성을 보장하기위한 모범 사례에 대해 논의하고 기능 감지, 점진적 향상 및 테스트 방법에 중점을 둡니다.

이 기사는 html5 & lt; time & gt; 시맨틱 날짜/시간 표현 요소. 인간이 읽을 수있는 텍스트와 함께 기계 가독성 (ISO 8601 형식)에 대한 DateTime 속성의 중요성을 강조하여 Accessibilit를 향상시킵니다.

이 기사에서는 브라우저에서 직접 사용자 입력을 검증하기 위해 필요한, Pattern, Min, Max 및 Length 한계와 같은 HTML5 양식 검증 속성을 사용하는 것에 대해 설명합니다.

이 기사는 모바일 장치의 반응 형 웹 디자인에 필수적인 Viewport Meta Tag에 대해 설명합니다. 적절한 사용이 최적의 컨텐츠 스케일링 및 사용자 상호 작용을 보장하는 방법을 설명하는 반면, 오용은 설계 및 접근성 문제로 이어질 수 있습니다.

이 기사는 & lt; iframe & gt; 외부 컨텐츠를 웹 페이지, 공통 용도, 보안 위험 및 객체 태그 및 API와 같은 대안을 포함시키는 태그의 목적.
