flex布局 与 iconfont

flex布局与iconfont使用
了解flex是什么
2009年,W3C提出了一种新的方案—-Flex布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。
Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性
任何容器都可以使用flex属性

div{
    display:flex;        // 默认写法
    display:inline-flex; // 行内元素使用flex
    display:-webkit-flex;// 浏览器兼容前缀写法
}
注意,设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。

这里写图片描述
兼容情况
兼容当前主流浏览器,96%

这里写图片描述

容器形成主轴与侧轴,用来改变子元素的排列

容器属性

flex-direction属性决定主轴的方向(即项目的排列方向)。

flex-direction: row | row-reverse | column | column-reverse;

row:默认值,主轴为水平方向
div{
    display:flex;
    flex-direction:row|column|row-reverse|column-reverse
}

 flex-wrap 默认情况下,项目都排在一条线上。根据主轴方向排列。flex-wrap属性定义,如果一条轴线排不下,如何换行。

flex-wrap: nowrap | wrap | wrap-reverse;

nowrap: 默认值,默认不换行
wrap: 执行换行 第一行在上面
wrap-reverse: 执行换行第一行在下面
div{
    flex-wrap: nowrap | wrap | wrap-reverse;
}

justify-content属性定义了项目在主轴上的对齐方式。

justify-content: flex-start | flex-end | center | space-between | space-around;

flex-start(默认值):左对齐

flex-end:右对齐

space-between:两端对齐,项目之间的间隔都相等。

space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
div{
    display:flex;
    justify-content: flex-start | flex-end | center | space-between | space-around;
}

align-items属性定义项目在交叉轴上如何对齐。

 align-items: flex-start | flex-end | center | baseline | stretch;

flex-start:交叉轴的起点对齐。

flex-end:交叉轴的终点对齐。

center:交叉轴的中点对齐。

baseline: 项目的第一行文字的基线对齐。

stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度
div{
    display:flex;
    align-items: flex-start | flex-end | center | baseline | stretch;
}

align-content属性定义了多根轴线的对齐方式。


侧轴有空白且有多行时,设置弹性子元素侧轴上的对齐方式

align-content: flex-start | flex-end | center | space-between | space-around | stretch;

flex-start:与交叉轴的起点对齐。

flex-end:与交叉轴的终点对齐。

center:与交叉轴的中点对齐。

space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。

space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

stretch(默认值):轴线占满整个交叉轴。

子元素属性

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
    用法与z-index  相同

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

iconfont使用

介绍几种库

1.使用现有的开源iconfont矢量图标字体库。如

阿里icon font字库

http://www.iconfont.cn/

这个是阿里妈妈M2UX的一个icon font字体图标字库,包含了淘宝图标库和阿里妈妈图标库。

fontello

http://fontello.com/

在线定制你自己的icon font字体图标字库,也可以直接从GitHub下载整个图标集,该项目也是开源的。

icomoon

http://icomoon.io/app/#/select

可以在线导入的SVG格式字体,并进行编辑,然后下载来使用。很酷吧!

Font-Awesome

http://fortawesome.github.io/Font-Awesome/

这是我最喜欢的字库之一了,更新比较快。目前已经有369个图标了。

Glyphicon Halflings

http://glyphicons.com/

这个字体图标可以在Bootstrap下免费使用。自带了200多个图标。

使用方法

@font-face {font-family: 'iconfont';
            src: url('../iconfont.eot'); /* IE9*/
            src: url('../iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
            url('../iconfont.woff') format('woff'), /* chrome、firefox */
            url('../iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
            url('../iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
        }

    <div class='iconfont'>&#xe68d;</div>
    .iconfont{
         font-family:"iconfont" !important;
    }
设置完成后,我们给加属性,文字属性兼容
<think>首先,用户的问题是关于“v-loading 自定义 iconfont 加载图标实现方法”。参考了提供的引用内容,特别是引用[1],它提到了一个实现v-loading的示例,其中使用了自定义的图标作为加载动画。 关键点: - 引用[1]中有一个waiting.vue文件,展示了如何实现一个加载动画。 - 它使用了iconfont作为加载图标,例如:`<span class="iconfont icon-jiazaidonghua"></span>`。 - 样式部分定义了动画效果,如旋转动画。 用户希望了解如何在v-loading中自定义使用iconfont作为加载图标。所以,我需要提供清晰的步骤和代码示例。 回答结构: 1. **介绍**:简要解释v-loading和iconfont的概念。 2. **实现步骤**:分步指导如何自定义v-loading使用iconfont。 3. **代码示例**:提供Vue组件的代码,类似于引用[1]中的waiting.vue。 4. **注意事项**:包括如何引入iconfont、样式调整等。 5. **相关问题**:生成相关问题,如系统指令要求。 系统指令要求: - 所有行内数学表达式用$...$,但这里可能不需要数学表达式。 - 独立公式用$$...$$,但这里可能不适用。 - LaTeX语法正确:确保代码块正确。 - 使用中文回答。 - 生成相关问题:在最后添加。 - 引用标识:在回答中引用内容时添加,如[^1]。 参考引用: - 引用[1]:提供了waiting.vue的代码,展示了使用iconfont。 - 其他引用如[2]、[3]、[4]提到自定义图标问题,但更相关的是[1]。 实现方法: 1. 创建自定义加载组件(如Loading.vue),使用iconfont。 2. 在组件中,定义HTML结构,包括iconfont元素。 3. 添加CSS样式,实现动画效果(如旋转)。 4. 在需要的地方使用这个组件,并控制其显示隐藏。 在v-loading的上下文中,v-loading是Element UI等UI框架的指令,但用户可能指的是自定义实现类似功能。引用[1]中是自定义实现,不是框架的v-loading。用户说“v-loading”,可能指的是Element UI的v-loading指令,但引用中显示的是自定义实现。 在引用[3]中,有`v-loading="list.loading"`,这是Element UI的用法。但用户的问题是基于引用[1],它自定义了一个加载组件。 用户说:“我想用户希望了解如何在v-loading中自定义使用iconfont作为加载图标”。所以,我需要解释如何在使用v-loading指令时自定义图标,或者如何自定义一个类似组件。 在Element UI中,v-loading指令支持自定义加载图标。参考Element UI文档,但这里没有提供具体文档,所以我需要基于常识。 在Element UI中,v-loading可以通过设置`element-loading-spinner`类来自定义图标。但用户提到iconfont,所以需要结合。 最佳方法:提供一个自定义组件的实现,就像引用[1]那样,因为它更直接。 步骤: 1. **引入iconfont**:首先,确保项目中引入了iconfont资源(如通过CDN或本地文件)。 2. **创建加载组件**:定义Vue组件,使用iconfont类。 3. **样式和动画**:添加CSS实现旋转动画。 4. **控制显示**:使用v-show或v-if来控制组件显示。 代码示例类似引用[1]: ```vue <template> <div class="loading-container" v-show="visible"> <div class="loading-mask"> <span class="iconfont icon-jiazaidonghua"></span> </div> </div> </template> <script> export default { props: { visible: Boolean } }; </script> <style scoped> .loading-container { position: fixed; top: 0; left: 0; right: 0; bottom: 0; display: flex; justify-content: center; align-items: center; z-index: 9999; } .loading-mask { background-color: rgba(255, 255, 255, 0.8); padding: 20px; border-radius: 4px; } .iconfont { font-size: 50px; color: #297aff; animation: rotate 1.5s infinite linear; } @keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } </style> ``` 然后,在父组件中使用: ```vue <template> <div> <button @click="showLoading">Show Loading</button> <Loading :visible="isLoading" /> </div> </template> <script> import Loading from './Loading.vue'; export default { components: { Loading }, data() { return { isLoading: false }; }, methods: { showLoading() { this.isLoading = true; setTimeout(() => { this.isLoading = false; }, 2000); } } }; </script> ``` 对于Element UI的v-loading,如果用户想自定义图标,可以: 1. 使用`element-loading-spinner`类覆盖默认图标。 2. 例如: ```css .el-loading-spinner .el-icon-loading { /* 覆盖为自定义图标 */ } ``` 但具体使用iconfont,需要设置内容。 在Element UI中,自定义v-loading图标的官方方法是: - 设置`element-loading-spinner`属性或使用插槽。 例如: ```vue <template> <div v-loading="loading" element-loading-spinner="el-icon-loading"> <!-- 内容 --> </div> </template> ``` 但要用iconfont,可以: ```vue <template> <div v-loading="loading" element-loading-spinner="iconfont icon-jiazaidonghua"> <!-- 内容 --> </div> </template> ``` 然后确保全局样式定义了iconfont。 在引用[1]中,是自定义实现,不是依赖框架。所以,我应该优先提供自定义方法,因为它更灵活。 用户问题:“v-loading 自定义 iconfont 加载图标实现方法”,可能指的是Element UI的v-loading,但引用中显示自定义,所以我会覆盖两者。 在回答中: 1. 介绍两种方法:自定义组件和使用框架指令。 2. 重点在自定义方法,因为引用[1]提供了基础。 3. 添加注意事项,如引入iconfont。 生成相关问题: - 如何引入iconfont到Vue项目? - 如何优化加载动画性能? - v-loading的其他自定义选项? 最后,添加引用标识:在提到引用内容时添加[^1]。</think>### v-loading 自定义 iconfont 加载图标实现方法 在 Vue 项目中实现自定义 `v-loading` 使用 iconfont 作为加载图标,核心是通过创建自定义加载组件并集成 iconfont 资源。以下是详细步骤和代码实现(基于引用[^1]的示例优化): #### 1. **引入 iconfont 资源** - 在项目中引入 iconfont 图标库(如阿里矢量图标库): - 将下载的 iconfont 文件(如 `iconfont.css` 和字体文件)放入项目 `assets` 目录。 - 在 `main.js` 或组件中全局引入样式: ```javascript // main.js import '@/assets/iconfont/iconfont.css'; ``` #### 2. **创建自定义加载组件 (Loading.vue)** 创建一个 Vue 单文件组件,使用 iconfont 作为加载图标,并添加旋转动画: ```vue <template> <div class="loading-container" v-show="visible"> <div class="loading-mask"> <!-- 使用 iconfont 类名(如 icon-jiazaidonghua) --> <span class="iconfont icon-jiazaidonghua"></span> </div> </div> </template> <script> export default { props: { visible: Boolean // 控制显示/隐藏 } }; </script> <style scoped> .loading-container { position: fixed; top: 0; left: 0; right: 0; bottom: 0; display: flex; justify-content: center; align-items: center; z-index: 9999; } .loading-mask { background-color: rgba(255, 255, 255, 0.8); /* 半透明白色遮罩 */ padding: 30px; border-radius: 4px; } .iconfont { font-size: 50px; /* 图标大小 */ color: #297aff; /* 图标颜色 */ animation: rotate 1.5s linear infinite; /* 旋转动画 */ } @keyframes rotate { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } </style> ``` #### 3. **在父组件中使用自定义加载组件** - 导入组件并通过 `v-show` 或 `v-if` 控制显示: ```vue <template> <div> <button @click="toggleLoading">切换加载状态</button> <!-- 使用自定义加载组件 --> <Loading :visible="isLoading" /> </div> </template> <script> import Loading from '@/components/Loading.vue'; export default { components: { Loading }, data() { return { isLoading: false }; }, methods: { toggleLoading() { this.isLoading = !this.isLoading; // 模拟异步操作,2秒后关闭 if (this.isLoading) { setTimeout(() => { this.isLoading = false; }, 2000); } } } }; </script> ``` #### 4. **关键注意事项** - **图标替换**:将 `icon-jiazaidonghua` 替换为你的 iconfont 类名(在 iconfont 官网生成)。 - **动画优化**:通过 CSS `animation` 属性调整动画速度(如 `1.5s`)或方向(如 `infinite alternate-reverse`)。 - **性能考虑**:使用 `position: fixed` 避免布局抖动;`visibility: hidden` 初始隐藏(引用[^1])。 - **框架集成**:若使用 Element UI 的 `v-loading` 指令,可通过覆盖 CSS 类自定义图标: ```css /* 全局样式文件 */ .el-loading-spinner .el-icon-loading { font-family: "iconfont" !important; /* 应用 iconfont */ content: "\e601"; /* Unicode 编码 */ } ``` #### 5. **示例效果** - 显示时:图标居中旋转,背景半透明遮罩覆盖整个屏幕。 - 隐藏时:组件完全隐藏,不影响页面交互。 此方法灵活且兼容性强,可适应多数 Vue 项目需求。自定义图标避免了依赖 UI 框架的限制,便于统一团队视觉规范[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值