| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 | <template>	<view :class="[ 'uni-row', typeClass , justifyClass, alignClass, ]" :style="{		marginLeft:`${Number(marginValue)}rpx`,		marginRight:`${Number(marginValue)}rpx`,	}">		<slot></slot>	</view></template><script>	const ComponentClass = 'uni-row';	const modifierSeparator = '--';	/**	 * Row	布局-行	 * @description	流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局。	 * @tutorial	https://ext.dcloud.net.cn/plugin?id=3958	 *	 * @property	{gutter} type = Number 栅格间隔	 * @property	{justify} type = String flex 布局下的水平排列方式	 * 						可选	start/end/center/space-around/space-between	start	 * 						默认值	start	 * @property	{align} type = String flex 布局下的垂直排列方式	 * 						可选	top/middle/bottom	 * 						默认值	top	 * @property	{width} type = String|Number nvue下需要自行配置宽度用于计算	 * 						默认值 750	 */	export default {		name: 'uniRow',		componentName: 'uniRow',		// #ifdef MP-WEIXIN		options: {			virtualHost: true // 在微信小程序中将组件节点渲染为虚拟节点,更加接近Vue组件的表现,可使用flex布局		},		// #endif		props: {			type: String,			gutter: Number,			justify: {				type: String,				default: 'start'			},			align: {				type: String,				default: 'top'			},			// nvue如果使用span等属性,需要配置宽度			width: {				type: [String, Number],				default: 750			}		},		created() {			// #ifdef APP-NVUE			this.type = 'flex';			// #endif		},		computed: {			marginValue() {				// #ifndef APP-NVUE				if (this.gutter) {					return -(this.gutter / 2);				}				// #endif				return 0;			},			typeClass() {				return this.type === 'flex' ? `${ComponentClass + modifierSeparator}flex` : '';			},			justifyClass() {				return this.justify !== 'start' ? `${ComponentClass + modifierSeparator}flex-justify-${this.justify}` : ''			},			alignClass() {				return this.align !== 'top' ? `${ComponentClass + modifierSeparator}flex-align-${this.align}` : ''			}		}	};</script><style lang="scss">	$layout-namespace: ".uni-";	$row:$layout-namespace+"row";	$modifier-separator: "--";	@mixin utils-clearfix {		$selector: &;		@at-root {			/* #ifndef APP-NVUE */			#{$selector}::before,			#{$selector}::after {				display: table;				content: "";			}			#{$selector}::after {				clear: both;			}			/* #endif */		}	}	@mixin utils-flex ($direction: row) {		/* #ifndef APP-NVUE */		display: flex;		/* #endif */		flex-direction: $direction;	}	@mixin set-flex($state) {		@at-root &-#{$state} {			@content		}	}	#{$row} {		position: relative;		flex-direction: row;		/* #ifdef APP-NVUE */		flex: 1;		/* #endif */		/* #ifndef APP-NVUE */		box-sizing: border-box;		/* #endif */		// 非nvue使用float布局		@include utils-clearfix;		// 在QQ、字节、百度小程序平台,编译后使用shadow dom,不可使用flex布局,使用float		@at-root {			/* #ifndef MP-QQ || MP-TOUTIAO || MP-BAIDU */			&#{$modifier-separator}flex {				@include utils-flex;				flex-wrap: wrap;				flex: 1;				&:before,				&:after {					/* #ifndef APP-NVUE */					display: none;					/* #endif */				}				@include set-flex(justify-center) {					justify-content: center;				}				@include set-flex(justify-end) {					justify-content: flex-end;				}				@include set-flex(justify-space-between) {					justify-content: space-between;				}				@include set-flex(justify-space-around) {					justify-content: space-around;				}				@include set-flex(align-middle) {					align-items: center;				}				@include set-flex(align-bottom) {					align-items: flex-end;				}			}			/* #endif */		}	}	// 字节、QQ配置后不生效	// 此处用法无法使用	/* #ifdef MP-WEIXIN || MP-TOUTIAO || MP-QQ */	:host {		display: block;	}	/* #endif */</style>
 |