实现两列等宽布局的几种方法

很多年前,在CSS-Tricks发布了这个想法,随着时间的改变,我们不断更新这个话题。

当你想实现两列等宽,左边一些内容,右边一些内容时,基本上都需要在一个容器的内部设置两个高度相等的列。每一面正好占用容器的一半,并且可以明显的区分他们。在CSS中有很多方法都可以实现,那么来看看如何用多种方法实现这种两列等宽布局。

使用渐变背景

一个简单的方法就是我们可以使用渐变改变背景颜色。一半使用一种颜色另一半使用其他颜色。然而,并不是从一个颜色过渡到另一种颜色,而是在中间设置一个零空间颜色。

.container {
    background: linear-gradient( to right, #ff9e2c 0%, #ff9e2c 50%, #b6701e 50%, #b6701e 100% );
}
id="YXRbKO" src="http://codepen.io/airen/embed/YXRbKO?YXRbKO=300&theme-id=0&slug-hash=YXRbKO&default-tab=result&user=airen" scrolling="no" frameborder="0" height="300" allowtransparency="true" allowfullscreen="true" class="cp_embed_iframe undefined" style="width: 100%; overflow: hidden;">

这只能在单个容器元素内工作。这也意味着如果想让它的内容填充容器的两侧,就需要采用浮动或者其他布局方法。

使用绝对定位

另一种方法是在父容器内设置两个子容器,使用绝对定位,利用百分比将他们分离,并设置背景。这种方法的优点是这两个子容器可以容纳自己的内容。

id="LVXoYm" src="http://codepen.io/airen/embed/LVXoYm?LVXoYm=300&theme-id=0&slug-hash=LVXoYm&default-tab=result&user=airen" scrolling="no" frameborder="0" height="300" allowtransparency="true" allowfullscreen="true" class="cp_embed_iframe undefined" style="width: 100%; overflow: hidden;">

绝对定位有时是一个完美的解决方案,但有时也不太好用。父元素需要设置高度,但是这样做内容无法自适应(内容更改!),更不要说绝对定位会脱离文档流。所以,很难达到所有的要求,但我们可以将其他内容放在下面。

使用(假)table

是的,table布局很老(更不用提它浏览器渲染问题和布局的不灵活性)。然而,我们可以使用display: table-cell;属性,这样可以在HTML中在不使用table的情况下方便创建布局。总之,我们将语义化的父元素添加到表格中,其子元素放入单元格中。这些都是用CSS实现的哦!

id="PwxONM" src="http://codepen.io/airen/embed/PwxONM?PwxONM=300&theme-id=0&slug-hash=PwxONM&default-tab=result&user=airen" scrolling="no" frameborder="0" height="300" allowtransparency="true" allowfullscreen="true" class="cp_embed_iframe undefined" style="width: 100%; overflow: hidden;">

你甚至可以很容易在断点处改变display的属性,使双方在很小的屏幕上叠加。display: table和其他属性都支持ie8以上,甚至包括旧版本的安卓。所以,这种方法非常安全!

使用float

可以使用我们的好朋友float将相邻的容器进行布局。这种方法的优点是避免使用绝对定位出现一些之前提过的问题。

id="Pqxvwv" src="http://codepen.io/airen/embed/Pqxvwv?Pqxvwv=300&theme-id=0&slug-hash=Pqxvwv&default-tab=result&user=airen" scrolling="no" frameborder="0" height="300" allowtransparency="true" allowfullscreen="true" class="cp_embed_iframe undefined" style="width: 100%; overflow: hidden;">

这个例子,我们明确的给他们设置了高度,我们不能在默认情况下获得float的能力,在这种情况下你可以使用背景色渐变的技巧让他们看起来是连在一起的,或者使用负外边距等。

你还需要记住父元素需要使用清除浮动,确保正常的文档流。

使用inline-block

如果认为清除浮动很麻烦,那么,display: inline-block是另一种选择。但需要使用一个技巧就是确保元素之间没有空白间隙,否则,右半部分将会被渲染到下一行。

id="doQEoj" src="http://codepen.io/airen/embed/doQEoj?doQEoj=300&theme-id=0&slug-hash=doQEoj&default-tab=result&user=airen" scrolling="no" frameborder="0" height="300" allowtransparency="true" allowfullscreen="true" class="cp_embed_iframe undefined" style="width: 100%; overflow: hidden;">

这里没有用inline-block可以帮助我们解决两侧高度相等的问题。所以,这一点你一定要清楚。

这里有很多方法解决上述空白间距的问题

使用flexbox

使用flexbox是一种非常好的方法,只是需要注意它局限于ie10,你需要使用前缀加属性值来得到最好的兼容。

使用这种方法,可以将父元素变为一个可伸缩的盒子,子元素平分其空间大小。不需要设置任何的宽度以及高度!Flexbox知道如何做,因为默认的设置就是如此。例如,flex-direction: row;align-items: stretch;这些都是默认值,所以我们不需要设置。为了确保可以实现要求,两侧都要设置flex: 1,这样可以使他们平均分配空间大小。

id="waQbKw" src="http://codepen.io/airen/embed/waQbKw?waQbKw=300&theme-id=0&slug-hash=waQbKw&default-tab=result&user=airen" scrolling="no" frameborder="0" height="300" allowtransparency="true" allowfullscreen="true" class="cp_embed_iframe undefined" style="width: 100%; overflow: hidden;">

在上面的例子中,容器内容是也可以自适应,为了更好的展示我们将内容水平垂直居中。

使用网格布局

对于那些总是尝试新技术的人来说,css网格布局是Flexbox和Table布局的结合体。换句话说,在定义一个容器时,可灵活的将子元素拆分为列和单元格。

如果下面的单元格叠加了,说明你的浏览器不支持 CSS Grids。在写这篇文章时,仅限于ie10+。

id="Xbywma" src="http://codepen.io/airen/embed/Xbywma?Xbywma=300&theme-id=0&slug-hash=Xbywma&default-tab=result&user=airen" scrolling="no" frameborder="0" height="300" allowtransparency="true" allowfullscreen="true" class="cp_embed_iframe undefined" style="width: 100%; overflow: hidden;">

在这里网格布局有可能大材小用,但是,用CSS可以做这么多事情难道不是很酷么?

本文根据@Geoff Graham的《Left Half and Right Half Layout – Many Different Ways》所译,整个译文带有我们自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:https://css-tricks.com/left-and-right/


转自:http://www.w3cplus.com/css/left-and-right.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CSS 布局是通过使用 CSS布局属性来控制元素在页面中的位置和大小的过程。 常用的 CSS 布局属性包括: - `display`:控制元素是否显示,以及它的类型。例如,`display: block` 表示元素是一个块级元素,`display: inline` 表示元素是一个行内元素。 - `position`:控制元素的定位方式。可能的值包括 `static`、`relative`、`absolute` 和 `fixed`。 - `float`:控制元素是否浮动,以及浮动的方向。可能的值包括 `left` 和 `right`。 - `width` 和 `height`:控制元素的度和高度。 - `margin`:控制元素周围的空间。 - `padding`:控制元素内部内容周围的空间。 使用这些属性,可以调整元素的位置,大小和周围的空间,从而实现页面布局。 例如,可以使用以下代码来将一个元素设置为绝对定位,并将其移动到页面的右上角: ```css .element { position: absolute; top: 0; right: 0; } ``` 还可以使用浮动来让多个元素并排排列,例如: ```css .element { float: left; width: 50%; } ``` 这会使多个元素排成两列,每列占满整个屏幕的一半度。 ### 回答2: CSS布局主要通过以下几种方式来实现: 1. 盒模型(Box Model):CSS中的每个元素都被视为一个矩形盒子,包括内容区、内边距、边框和外边距。通过设置这些属性的值,可以调整盒子的大小和间距,从而实现布局的控制。 2. 定位(Positioning):CSS提供了多种定位方式,如相对定位(position: relative)、绝对定位(position: absolute)和固定定位(position: fixed),可以根据需求决定元素在页面中的具体位置。 3. 浮动(Float):通过设置元素的浮动属性(float)为left或right,可以使元素脱离文档流并向指定方向浮动,其他元素会围绕在其周围,从而实现复杂的布局效果。 4. 弹性布局Flexbox):Flexbox是CSS3中引入的一种弹性布局机制,通过设置容器的display属性为flex或inline-flex,可以创建一个弹性容器,并使用一系列属性来定义容器内项目的排列方式、扩展和缩放等行为。 5. 网格布局(Grid):CSS Grid是CSS3中提供的一种二维网格布局系统,通过将容器划分为行和列,可以实现灵活的网格布局,并控制项目在网格中的位置和大小。 6. 响应式布局(Responsive Layout):通过使用CSS媒体查询(Media Query)和百分比单位等技术,可以根据不同的设备尺寸和屏幕度,为网页提供适配不同展示环境的布局方案。 总结起来,CSS布局实现方式包括盒模型、定位、浮动、弹性布局、网格布局和响应式布局等,通过灵活地组合和运用这些技术手段,可以实现各种不同的网页布局效果。 ### 回答3: CSS布局是一种用于描述和控制网页元素显示位置的技术。它通过指定元素的位置、大小和样式来构建和排列页面的不同部分。 实现CSS布局首先需要定义容器元素,可以是 HTML 的 div 元素或其他块级元素。然后通过CSS选择器选中这些容器元素,并使用CSS属性来控制其布局。 最常用的CSS布局方式是基于盒模型,即将元素视为一个矩形盒子。通过设置元素的度、高度、边距和内边距,可以控制元素在页面中的尺寸和间距。此外,还可以使用浮动和定位等属性来改变元素在页面中的位置和层级关系。 浮动是一种常用的CSS布局技术,通过将元素向左或向右浮动,可以实现多列布局。浮动元素会自动调整其位置,使其尽可能地靠近其兄弟元素,并且可以通过 clear 属性来清除浮动。通过合理使用浮动,可以实现复杂的网页布局效果。 定位是另一种重要的CSS布局技术,通过指定元素相对于其父元素或其他元素的位置,可以实现精确的布局。常用的定位属性有相对定位、绝对定位和固定定位。相对定位是相对于元素在正常文档流中的位置进行偏移,绝对定位是相对于最近的有定位属性的祖先元素进行定位,而固定定位是相对于浏览器窗口进行定位。 另外,CSS还提供了弹性盒子布局Flexbox)和网格布局(Grid)等新的布局模型,可以更加方便地实现复杂的页面布局。这些新的布局模型提供了更灵活和可预测的布局方式,能够更好地适应不同屏幕尺寸和设备。 总之,CSS布局是通过设定元素的尺寸、位置和关系来实现的。凭借选择器和属性的强大功能,可以实现各种不同的布局效果,满足网页设计的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值