在我们平时的开发中会经常使用到背景图片,下面我这介绍的是Container通过BoxDecoration来设置的
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("优选访客订阅功能"),
),
body: buildBody()
);
}
路由页面的骨架,我们在里面可以拼装出一个完整的路由页面
创建导航栏
构建页面主体结构
Widget buildBody() {
return new Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
buildHeader(),
// Row(children: <Widget>[
// Text(
// '批量管理功能',
// style:TextStyle(
// fontSize: 16.0,
// color: Color.fromRGBO(234,200,134,1)
// )
// )
// ],)
],
);
}
为了后续方便维护,在页面布局时最好都拆分成不同的小模块来分开写,不然后期太难维护
即指沿水平或垂直方向排布子组件。Flutter中通过Row和Column来实现线性布局;
首先布局思路就是使用Column可以在垂直方向排列其子组件。
然后在把里面的子元素都按主轴方向对齐
Widget buildHeader() {
return new Container(
height: 160.0,
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("images/header.png"),
fit: BoxFit.cover
)
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
// alignment: WrapAlignment.center,
// crossAxisAlignment: WrapCrossAlignment.center,
// runSpacing: 9.0,
children: <Widget>[
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'批量管理功能',
style:TextStyle(
fontSize: 16.0,
color: Color.fromRGBO(234,200,134,1)
)
)
],
),
Wrap(
runSpacing: 9.0,
alignment: WrapAlignment.center,
children: <Widget>[
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'${pageData['title']}',
style:TextStyle(
fontSize: 38.0,
color: Color.fromRGBO(234,200,134,1)
)
)
],
),
//自定义圆角
ClipRRect(
borderRadius: BorderRadius.circular(12.5),
child: Container(
height: 25.0,
width: 190.0,
color: Color.fromRGBO(234,200,134,1),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'${pageData['subTitle']}',
textAlign: TextAlign.center,
style: TextStyle(color: Color.fromRGBO(113,80,24,1)),
)
]
)
)
)
],
)
],
),
);
}
首先是把头部banner部分放在一个方法里面使用Container容器组件来包裹
容器组件
MediaQuery.of(context).size 获取屏幕的大小
设置容器大小:
height: 160.0, //高度自定义
width: MediaQuery.of(context).size.width, //宽度设置和屏幕等宽
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("images/header.png"),
fit: BoxFit.cover
)
),
Container组件的一个属性,用来装饰背景的;
我们通常会直接使用BoxDecoration类,它是一个Decoration的子类,实现了常用的装饰元素的绘制。
BoxDecoration({
Color color, //颜色
DecorationImage image,//图片
BoxBorder border, //边框
BorderRadiusGeometry borderRadius, //圆角
List<BoxShadow> boxShadow, //阴影,可以指定多个
Gradient gradient, //渐变
BlendMode backgroundBlendMode, //背景混合模式
BoxShape shape = BoxShape.rectangle, //形状
})
使用DecorationImage方法来装载图片
image: DecorationImage(
image: AssetImage("images/header.png"), //加载本地图片
fit: BoxFit.cover //图片伸缩方式
)
在pubspec.yaml中的flutter部分添加如下内容:
assets:
- images/header.png
Wrap({
...
this.direction = Axis.horizontal,
this.alignment = WrapAlignment.start,
this.spacing = 0.0,
this.runAlignment = WrapAlignment.start,
this.runSpacing = 0.0,
this.crossAxisAlignment = WrapCrossAlignment.start,
this.textDirection,
this.verticalDirection = VerticalDirection.down,
List<Widget> children = const <Widget>[],
})
将子组件剪裁为圆角矩形
ClipRRect({
...
BorderRadius borderRadius,
CustomClipper<RRect> clipper,
Clip clipBehavior = Clip.antiAlias,
Widget child
...
})
import 'package:flutter/material.dart';
const pageData = {
"discountStatus": 2,
"subscribeStatus": "0",
"title": "限时免费",
"subTitle": "活动时间9月1日-9月30日",
"packageList": [
{
"id": 23,
"desc": "月度订阅",
"dealPrice": 10,
"originPrice": 50,
"recommand": 1
},
{
"id": 33,
"desc": "半年订阅",
"dealPrice": 56,
"originPrice": 280,
"recommand": 0
},
{
"id": 56,
"desc": "年度订阅",
"dealPrice": 108,
"originPrice": 540,
"recommand": 0
}
]
};
class BatchSub extends StatefulWidget {
@override
createState() => new BatchSubState();
}
class BatchSubState extends State<BatchSub> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("优选访客订阅功能"),
),
body: buildBody()
);
}
Widget buildBody() {
return new Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
buildHeader(),
// Row(children: <Widget>[
// Text(
// '批量管理功能',
// style:TextStyle(
// fontSize: 16.0,
// color: Color.fromRGBO(234,200,134,1)
// )
// )
// ],)
],
);
}
Widget buildHeader() {
return new Container(
height: 160.0,
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("images/header.png"),
fit: BoxFit.cover
)
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
// alignment: WrapAlignment.center,
// crossAxisAlignment: WrapCrossAlignment.center,
// runSpacing: 9.0,
children: <Widget>[
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'批量管理功能',
style:TextStyle(
fontSize: 16.0,
color: Color.fromRGBO(234,200,134,1)
)
)
],
),
Wrap(
runSpacing: 9.0,
alignment: WrapAlignment.center,
children: <Widget>[
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'${pageData['title']}',
style:TextStyle(
fontSize: 38.0,
color: Color.fromRGBO(234,200,134,1)
)
)
],
),
//自定义圆角
ClipRRect(
borderRadius: BorderRadius.circular(12.5),
child: Container(
height: 25.0,
width: 190.0,
color: Color.fromRGBO(234,200,134,1),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'${pageData['subTitle']}',
textAlign: TextAlign.center,
style: TextStyle(color: Color.fromRGBO(113,80,24,1)),
)
]
)
)
)
],
)
],
),
);
}
}
原文:https://segmentfault.com/a/1190000020436960
这几年的web设计中,大背景的设计变得越来越流行。特别是在现在大屏大行其道的情况下,设计师在设计中越来越多的使用大分辨率的背景图来填充屏幕,这样更能制造独特的视觉效果,能更好的传达他们想要向用户传达的内容。
通过CSS中的linear-gradient主要就能显示出不同方向的条纹效果,这里我们就来详解CSS制作Web页面条纹背景样式的技巧,需要的朋友可以参考下
在调试工具上都是可以显示的,但是扫面上传到手机上却显示不出来,这是为什么呢?这是由于:background-image 只能用网络url或者base64图片编码 , 本地图片只能用 image标签src属性才行。
提高首评加载速度,除了要将所有使用的图片,资源文件压缩,添加懒加载,还需要合并页面中使用到的所有图标到一张大图里,减少请求次数,所有图标放到一张大图上,使用background定位
设置背景图片的大小,以长度值或百分比显示,还可以通过cover和contain来对图片进行伸缩。auto:默认值,不改变背景图片的原始高度和宽度;contain:容纳,即将背景图片等比缩放至某一边紧贴容器边缘为止。
过去在学习CSS的时候,首要任务就是要理解“box model”,因为box model是CSS里头很重要的模型概念,描述了padding、margin、border与content的空间定位
我想让整个界面有一个背景图片,自然想到的是在body上加background,加载背景图 ;背景图垂直、水平均居中;当内容高度大于图片高度时,背景图像的位置相对于viewport固定 ;
前段时间在开发中,遇到需要给背景层加颜色遮罩的项目,现在特定总结一下给背景图层加颜色遮罩的方法。方法一:通过定位叠加(注意层级)
网上浏览的时候。看到有些页面会有背景的水印效果,使用canvas实现了个类似的效果,可以作为背景,也可以作为页面前景覆盖,防止网页信息的截图
background 属性的作用是给元素设置背景,它是一个复合属性,常用的子属性如下:background-color 指定元素的背景颜色。background-image 指定元素的背景图像。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!