3.1盒子模型
在页面设计中,只有掌握了盒子模型以及盒子模型的各个属性和应用方法,才能轻松控制页面中的各个元素。
盒子模型结构
对padding,border,和margin可以进一步细化为上下左右4个部分,在css中可以分别设置,如下图所示
3.2块级元素
盒子模型及块级元素
<view style="border:1px solid #f00">块级元素</view>
<view style="border: 1px solid #0f0;margin: 15px; padding: 20px">块级元素2</view>
<view style="border: 1px solid #00f;width: 200px;height: 80px">块级元素3</view>
<view style="border: 1px solid #ccc;">
<view style="height: 60px">块级元素4</view>
</view>
<view style="border: 1px solid #f00;width: 100px;background-color: #ccc">父级元素的高度由内容决定,内容为文本</view>
运行结果
行内元素
<view style="padding: 20px;">
<text style="border: 1px solid #f00;">文本1</text>
<text style="border: 1px solid #0f0;margin: 10px;padding: 5px;">文本2</text>
<view style="border: 1px solid #00f;display: inline">块级元素设置为行内元素</view> 一行显示不全,自动换行显示
</view>
运行结果
行内块元素
行内块元素可以设置高度,宽度,内边距和外边距。
<view>
元素显示方式的<view style="display: inline-block;border:1px solid #f00;margin: 10px;padding: 10px;width: 150px;">块级元素,行内元素和行内块元素</view>三种类型</view>
运行结果
3.3浮动与定位
元素浮动与清除
对box1,box2,bo3元素左浮动
<view>box1,box2,box3 没浮动</view>
<view style ="border:1px solid #f00 ;padding:5px;">
<view style = "border:1px solid #0f0">box1</view>
<view style = "border:1px solid #0f0">box2</view>
<view style = "border:1px solid #0f0">box3</view>
</view>
<view>box1左浮动</view>
<view style ="border:1px solid #f00;padding:5px">
<view style ="float:left;border:1px solid #0f0">box1</view>
<view style ="border:1px solid #0f0">box2</view>
<view style ="border:1px solid #0f0">box3</view>
</view>
<view>box1 box2 左浮动 </view>
<view style="border:1px solid #f00;padding:5px">
<view style ="float:left;border:1px solid #0f0">box1</view>
<view style ="float:left;border:1px solid #0f0">box2</view>
<view style ="border:1px solid #0f0">box3</view>
</view>
<view>box1 box2 box3左浮动</view>
<view style ="border:1px solid #f00;padding:5px">
<view style ="float:left;border:1px solid #0f0">box1</view>
<view style ="float:left;border:1px solid #0f0">box2</view>
<view style ="float:left;border:1px solid #0f0">box3</view>
</view>
<view>box1 box2 box3左浮动 box3清除左浮动</view>
<view style ="border:1px solid #f00;padding:5px">
<view style ="float:left;border:1px solid #0f0">box1</view>
<view style ="float:left;border:1px solid #0f0">box2</view>
<view style ="clear:left;border:1px solid #0f0">box3</view>
</view>
运行结果
另外,还可以在父元素外添加一个空元素,实现父元素包裹浮动元素
<view>bo1,bo2,bo3左浮动 在父元素后添加一个空元素</view>
<view style="border: 1px solid #f00;padding: 5px"class="clearfloat" >
<view style="float:left;border:1px solid #0f0">box1</view>
<view style="float:left;border:1px solid #0f0">box2</view>
<view style="float:left;border:1px solid #0f0">box3</view>
</view>
运行结果
元素定位
<!--三个元素均未定位 static-->
<view style="border:1px solid #0f0;width: 100px;height: 100px">box1</view>
<view style="border:1px solid #0f0;width: 100px;height: 100px">box2</view>
<view style="border:1px solid #0f0;width: 100px;height: 100px">box3</view>
<!--box2元素相对定位relative top:30px left:30px-->
<view style="border:1px solid #0f0;width: 100px;height: 100px">box1</view>
<view style="border:1px solid #0f0;width: 100px;height: 100px;position: relative;left: 30px;top: 30px">box2</view>
<view style="border:1px solid #0f0;width: 100px;height: 100px">box3</view>
<!--box2元素绝对定位absolute top:30px left:30px-->
<view style="border:1px solid #0f0;width: 100px;height: 100px">box1</view>
<view style="border:1px solid #0f0;width: 100px;height: 100px;position: absolute;left: 30px;top: 30px">box2</view>
<view style="border:1px solid #0f0;width: 100px;height: 100px">box3</view>
<!--box2元素固定定位fixed top:30px left:30px-->
<view style="border:1px solid #0f0;width: 100px;height: 100px">box1</view>
<view style="border:1px solid #0f0;width: 100px;height: 100px;position: fixed;left: 30px;top: 30px">box2</view>
<view style="border:1px solid #0f0;width: 100px;height: 100px">box3</view>
运行结果
如果box1.2.3的父元素采用相对定位,将box2采用相对定位
<view style="position: relative;left: 50px;top: 50px;border: 1px solid #00f">
<view style="border:1px solid #0f0;width: 100px;height: 100px">box1</view>
<view style="border:1px solid #0f0;width: 100px;height: 100px;position: absolute;left: 30px;top: 30px">box2</view>
<view style="border:1px solid #0f0;width: 100px;height: 100px">box1</view>
</view>
如果box1.2.3的父元素采用相对定位,将box2采用固定定位
<view style="position: relative;left: 50px;top: 50px;border: 1px solid #00f">
<view style="border:1px solid #0f0;width: 100px;height: 100px">box1</view>
<view style="border:1px solid #0f0;width: 100px;height: 100px;position: fixed;left: 30px;top: 30px">box2</view>
<view style="border:1px solid #0f0;width: 100px;height: 100px">box1</view>
</view>
运行结果
3.4flex布局
flex布局模型
容器属性
display
用来指定是否为flex布局.
.box{display:flex|inline-flex;}
flex-dicrecion
用于设置主轴方向,即项目排列方向。
.box{flex-display:row|row-reverse|colum|colum-reverse;}
a)row----主轴为水平方向,起点在左端;当元设置为flex布局,主轴默认为row
b)row -reverse——主轴为水平方向,起点在右端;
c)column——主轴为垂直方向,起点在顶端;
d)column -reverse——主轴为垂直方向,起点在底端。
flex-wrap
指定当项目在一根轴线排列位置不够时,项目是否换行.
.box{flex-wrap:nowrap |wrap|warp-reverse;}
a)nowrap——不换行,默认值;
b)wrap——换行,第一行在上方;
c)wrap-reverse——换行,第一行在下方。
flex-flow
是flex-dicrecion和flex-wrap的简写。默认为row-nowwrap。
.box{flex-flow:<flex-dicrecion>||<flex-wrap>;}
示例代码
.box{flex-flow:row nowrap:}
.box{flex-flow:row-reverse wrap:}
.box{flex-flow:row-column wrap-recerse:}
justify-content
用于定义项目在主轴上的对齐方式.
a)justify-content——与主轴方向有关,默认主轴水平对齐,方
b)flex-start——左对齐,默认值;
c)flex-end——右对齐;
d)center——居中;
e)space -between-—两端对齐,项目之间的间隔都相等;space -around——-每个项目两侧的间隔相等。
align-items
用于指定项目在交叉轴上的对齐方式。
.box{align-items:flex-start|flex-end|center|baseline|stretch;}
align-items——与交叉轴方向有关,默认交叉由上到下;
flex - start——交叉轴起点对齐;
flex -end——交叉轴终点对齐;
center——交叉轴中线对齐;
baseline——项目根据它们第一行文字的基线对齐;
//wxml
<view class="cont1">
<view class="item">1</view>
<view class="item item2">2</view>
<view class="item item3">3</view>
<view class="item item4">4</view>
</view>
//wxss
.cont1{
display: flex;
flex-direction: row;
align-items: baseline;
}
.item{
background-color: #ccc;
border:1px solid #f00;
height: 100px;
width: 50px;
margin: 2px;
}
.item2{
height: 80px;
}
.item3{
display: flex;
height: 50px;
align-items: flex-end;
}
.item4{
height: 120px;
}
运行结果
align-content
用于定义项目有多根轴线(出现换行后)在交叉轴上的对齐方式,如果只有一根轴线,该属性不起作用。
. box|align – content: flex – start lflex – end I center Ispace - between space -around lstretchl
space-between——与交叉轴两端对齐,轴线之间的间隔平均分布;
space - around——每根轴线两侧的间隔都相等,轴线之间的间隔比轴线与边框间隔大一倍。
项目属性
order
定义项目排列顺序,数值越小,排列越靠前,默认值为0.
.item{order:<number>;}
<view class="cont1">
<view class="item">1</view>
<view class="item">2</view>
<view class="item">3</view>
<view class="item">4</view>
</view>
<view class="cont1">
<view class="item"style="order:1">1</view>
<view class="item"style="order:3">2</view>
<view class="item"style="order:2">3</view>
<view class="item">4</view>
</view>
运行结果
flex-grow
定义项目放大比例,默认为0,即不放大。
.item{flex-grow:<number>;}
<view class="cont1">
<view class="item">1</view>
<view class="item">2</view>
<view class="item">3</view>
<view class="item">4</view>
</view>
<view class="cont1">
<view class="item">1</view>
<view class="item"style="flex-grow:1">2</view>
<view class="item"style="flex-grow:2">3</view>
<view class="item">4</view>
</view>
运行结果
flex-shrink
用来定义项目缩小比例,默认为1,如果空间不足,该项目缩放。
.item{flex-shrink:<number>;}
<view class="cont1">
<view class="item">1</view>
<view class="item">2</view>
<view class="item">3</view>
<view class="item">4</view>
</view>
<view class="cont1">
<view class="item">1</view>
<view class="item"style="flex-basis:50px">2</view>
<view class="item"style="flex-basis:180px">3</view>
<view class="item"style="flex-shrink:4">4</view>
</view>
flex-basis
属性用来定义伸缩项目的基准值,剩余空间按比例缩放,默认为auto.
.item {flex: < flex – grow > |< flex – shrink > |< flex -basis >;}
<view class="cont1">
<view class="item">1</view>
<view class="item">2</view>
<view class="item">3</view>
<view class="item">4</view>
</view>
<view class="cont1">
<view class="item">1</view>
<view class="item"style="flex-basis:100px">2</view>
<view class="item"style="flex-basis:200px">3</view>
<view class="item">4</view>
</view>
flex
flex属性是flex-grow、flex-shrink 和flex-basis的简写,其默认值分别为0、1、auto.
.item flex: {< flex – grow > |< flex – shrink > |< flex -basis >;}
.item{flex:auto;}//等价于.item{flex:1 1 auto;}
.item{flex:none;}//等价与.item{flex:0 0 auto:}
align-self
align -self属性用来指定单独的伸缩项目在交叉轴上的对齐方式。该属性会重写默认的对齐方式
.item(align - self:auto Iflex - start |flex - end Icenter |baseline stretch;}
在该属性值中,除了auto以外,其余属性值和容器align-items的属性值完全一致。auto表示继承容器align-items的属性,如果没有父元素,则等于stretch(默认值)