# Layout 布局

通过基础的 12 分栏,迅速简便地创建布局

# 平台兼容性

App(vue) App(nvue) H5 小程序 VUE2 VUE3
√(仅支持微信小程序,原因 (opens new window))

注意

1、如需实现类似宫格的布局,请使用uv-ui的Grid宫格组件,可以设置角标,功能更完善和灵活。

2、百度小程序、抖音小程序等由于不支持将自定义节点设置成虚拟的,更加接近Vue组件的表现 (opens new window),所以表现可能有异常,这点需要开发时注意。

# 基本使用

通过col组件的span设置需要分栏的比例

<template>
	<view>
		<uv-row customStyle="margin-bottom: 10px">
			<uv-col span="6">
				<view class="demo-layout bg-purple-light"></view>
			</uv-col>
			<uv-col span="6">
				<view class="demo-layout bg-purple"></view>
			</uv-col>
		</uv-row>
		<uv-row customStyle="margin-bottom: 10px">
			<uv-col span="4">
				<view class="demo-layout bg-purple"></view>
			</uv-col>
			<uv-col span="4">
				<view class="demo-layout bg-purple-light"></view>
			</uv-col>
			<uv-col span="4">
				<view class="demo-layout bg-purple-dark"></view>
			</uv-col>
		</uv-row>
		<uv-row justify="space-between">
			<uv-col span="3">
				<view class="demo-layout bg-purple"></view>
			</uv-col>
			<uv-col span="3">
				<view class="demo-layout bg-purple-light"></view>
			</uv-col>
			<uv-col span="3">
				<view class="demo-layout bg-purple"></view>
			</uv-col>
			<uv-col span="3">
				<view class="demo-layout bg-purple-light"></view>
			</uv-col>
		</uv-row>
	</view>
</template>
<style lang="scss">
	.demo-layout {
		height: 25px;
		border-radius: 4px;
	}
	.bg-purple {
		background: #CED7E1;
	}
	.bg-purple-light {
		background: #e5e9f2;
	}
	.bg-purple-dark {
		background: #99a9bf;
	}
</style>

# 分栏间隔

通过设置row组件的gutter参数,来指定每一栏之间的间隔(最终表现为左边内边距各为gutter/2),默认间隔为0

<template>
	<view>
		<uv-row justify="space-between" gutter="10">
			<uv-col span="3">
				<view class="demo-layout bg-purple"></view>
			</uv-col>
			<uv-col span="3">
				<view class="demo-layout bg-purple-light"></view>
			</uv-col>
			<uv-col span="3">
				<view class="demo-layout bg-purple"></view>
			</uv-col>
			<uv-col span="3">
				<view class="demo-layout bg-purple-light"></view>
			</uv-col>
		</uv-row>
	</view>
</template>
<style lang="scss">
	.demo-layout {
		height: 25px;
		border-radius: 4px;
	}
	.bg-purple {
		background: #CED7E1;
	}
	.bg-purple-light {
		background: #e5e9f2;
	}
	.bg-purple-dark {
		background: #99a9bf;
	}
</style>

# 混合布局

通过指定col组件的span属性,指定不同的值,达到不同的比例

<template>
	<view>
		<uv-row justify="space-between" gutter="10">
			<uv-col span="2">
				<view class="demo-layout bg-purple-light"></view>
			</uv-col>
			<uv-col span="4">
				<view class="demo-layout bg-purple"></view>
			</uv-col>
			<uv-col span="6">
				<view class="demo-layout bg-purple-dark"></view>
			</uv-col>
		</uv-row>
	</view>
</template>
<style lang="scss">
	.demo-layout {
		height: 25px;
		border-radius: 4px;
	}
	.bg-purple {
		background: #CED7E1;
	}
	.bg-purple-light {
		background: #e5e9f2;
	}
	.bg-purple-dark {
		background: #99a9bf;
	}
</style>

# 分栏偏移

通过指定col组件的offset属性可以指定分栏偏移的栏数。

<template>
	<view>
		<uv-row justify="space-between" customStyle="margin-bottom: 10px">
			<uv-col span="3" offset="3">
				<view class="demo-layout bg-purple-light"></view>
			</uv-col>
			<uv-col span="3" offset="3">
				<view class="demo-layout bg-purple"></view>
			</uv-col>
		</uv-row>
		<uv-row>
			<uv-col span="3">
				<view class="demo-layout bg-purple-light"></view>
			</uv-col>
			<uv-col span="3" offset="3">
				<view class="demo-layout bg-purple"></view>
			</uv-col>
		</uv-row>
	</view>
</template>
<style lang="scss">
	.demo-layout {
		height: 25px;
		border-radius: 4px;
	}
	.bg-purple {
		background: #CED7E1;
	}
	.bg-purple-light {
		background: #e5e9f2;
	}
	.bg-purple-dark {
		background: #99a9bf;
	}
</style>

# 对齐方式

通过row组件的justify来对分栏进行灵活的对齐, 可选值为start(或flex-start)、end(或flex-end)、centeraround(或space-around)、between(或space-between), 其最终的表现类似于css的justify-content属性。

注意:由于持微信小程序编译后的特殊结构,此方式不支持微信小程序。

<template>
	<view>
		<uv-row justify="space-between" customStyle="margin-bottom: 10px">
			<uv-col span="3">
				<view class="demo-layout bg-purple-light"></view>
			</uv-col>
			<uv-col span="3">
				<view class="demo-layout bg-purple"></view>
			</uv-col>
		</uv-row>
		<uv-row>
			<uv-col span="3">
				<view class="demo-layout bg-purple-light"></view>
			</uv-col>
			<uv-col span="3">
				<view class="demo-layout bg-purple"></view>
			</uv-col>
		</uv-row>
	</view>
</template>
<style lang="scss">
	.demo-layout {
		height: 25px;
		border-radius: 4px;
	}
	.bg-purple {
		background: #CED7E1;
	}
	.bg-purple-light {
		background: #e5e9f2;
	}
	.bg-purple-dark {
		background: #99a9bf;
	}
</style>

# 完整示例

# API


# Row Props

参数 说明 类型 默认值 可选值
gutter 栅格间隔,左右各为此值的一半,单位任意 String | Number 0 -
justify 水平排列方式(微信小程序暂不支持) String start(或flex-start) 见下Justify Options
align 垂直排列方式 String center top | bottom

# Col Props

参数 说明 类型 默认值 可选值
span 栅格占据的列数,总12等分 String | Number 0 1-12
offset 分栏左边偏移,计算方式与span相同 String | Number 0 -
justify 水平排列方式 String start 见下Justify Options
align 垂直对齐方式 String stretch top | center | bottom | stretch
textAlign 文字水平对齐方式 String left center | right

# Justify Options

属性值 说明
start (或flex-start) 左对齐
end (或flex-end) 右对齐
center 居中对齐
around (或space-around) 每个项目两侧的间隔相等,所以项目之间的间隔比项目与边缘的间隔大一倍
between (或space-between) 两端对齐主轴的起点与终点,项目之间的间隔都相等

# Row Events

事件名 说明 回调参数
@click row被点击 -

# Col Events

事件名 说明 回调参数
@click col被点击,会阻止事件冒泡到row -