布局,基于flex
和grid
的简单实现。
<!-- 引入 -->
<script type="module">
import './node_modules/xy-ui/components/xy-layout.js';
</script>
<!-- 使用 -->
<xy-layout row expand>
<xy-layout class="side"></xy-layout>
<xy-layout expand center class="main">
<xy-layout center class="box">xy-layout</xy-layout>
</xy-layout>
<xy-layout class="side"></xy-layout>
</xy-layout>
<xy-row gutter="10">
<xy-col span="4">col-4</xy-col>
<xy-col span="8">col-8</xy-col>
<xy-col span="8">col-8</xy-col>
<xy-col span="4">col-4</xy-col>
</xy-row>
内部仅仅根据属性选择器实现,属性可叠加使用。
默认为垂直排列,row
表示水平排列。
<xy-layout row>
<xy-layout class="box">1</xy-layout>
<xy-layout class="box box-o">2</xy-layout>
</xy-layout>
根据剩余空间填充(主轴方向)。
1 2<xy-layout row>
<xy-layout class="box" expand>1</xy-layout>
<xy-layout class="box box-o">2</xy-layout>
</xy-layout>
如果有多个,则会等分剩余空间。
1 2 3<xy-layout row>
<xy-layout class="box">1</xy-layout>
<xy-layout class="box box-o" expand>2</xy-layout>
<xy-layout class="box" expand>3</xy-layout>
</xy-layout>
默认水平垂直居中,可以指定某一方向居中,主轴mainAxis
和交叉轴crosAxis
。
<xy-layout center style="height:200px">
<xy-layout class="box">1</xy-layout>
</xy-layout>
center="crosAxis"
<xy-layout row center="crosAxis" style="height:200px">
<xy-layout class="box">1</xy-layout>
</xy-layout>
center="mainAxis"
<xy-layout row center="mainAxis" style="height:200px">
<xy-layout class="box">1</xy-layout>
</xy-layout>
现在支持栅格系统,基于grid
布局
24
栅格系统。把水平方向行xy-row
平均分为24
份,然后指定每一列xy-col
的跨越范围span
<xy-row gutter="10">
<xy-col span="12">col-12</xy-col>
<xy-col span="12">col-12</xy-col>
<xy-col span="4">col-4</xy-col>
<xy-col span="8">col-8</xy-col>
<xy-col span="8">col-8</xy-col>
<xy-col span="4">col-4</xy-col>
<xy-col span="8">col-8</xy-col>
<xy-col span="8">col-8</xy-col>
<xy-col span="8">col-8</xy-col>
</xy-row>
通过gutter
属性可以设置栅格间隔
col-4 col-8 col-8 col-4
JavaScript操作get
、set
row.gutter;//获取
row.gutter = 10;
//原生属性操作
row.getAttribute('gutter');
row.setAttribute('gutter',10);
下面是一个xy-layout
简单的示例。
<xy-layout class="layout">
<xy-layout class="header">HEADER</xy-layout>
<xy-layout row expand>
<xy-layout class="side"></xy-layout>
<xy-layout expand center class="main">
<xy-layout center class="box">xy-layout</xy-layout>
</xy-layout>
<xy-layout class="side"></xy-layout>
</xy-layout>
<xy-layout class="footer">FOOTER</xy-layout>
</xy-layout>