技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-13-3.使用flex布局并开始搭建web端

简介: lex 属性用于设置或检索弹性盒模型对象的子元素如何分配空间。其中justify-content(水平方向对齐)属性和align-content(垂直方向对齐)属性更方便地解决元素的对其、分布方式
1.用sass工具定义flex布局样式
flex 属性用于设置或检索弹性盒模型对象的子元素如何分配空间。
其中 justify-content(水平方向对齐)属性align-content(垂直方向对齐)属性更方便地解决元素的对其、分布方式
在这里插入图片描述
在这里插入图片描述
具体在什么场景如何得到效果大家去链接中测试。

sass工具定义:

// flex布局
.d-flex{
    display: flex;
}
$flex-jc: (
    start: flex-start,
    end: flex-end,
    center: center,
    between: space-between,
    around: space-around,
);
@each $key,$value in $flex-jc {
    .jc-#{$key} {
        justify-content: $value;
    }
}
$flex-ac: (
    start: flex-start,
    end: flex-end,
    center: center,
    between: space-between,
    around: space-around,
    stretch: stretch,
);
@each $key,$value in $flex-ac {
    .ac-#{$key} {
        align-content: $value;
    }
}

在这里插入图片描述
另外,如果遇到需要让几个灵活项目横、纵向排列,可以用到flex-derection:

.flex-column{
    // 灵活的项目将垂直显示,正如一个列一样。
    flex-direction: column;
}

在这里插入图片描述
在这里插入图片描述

2.利用sass生成的css搭建web端

(1)添加web端路由
具体路由操作见admin路由设置
与admin端相同,直接给web端添加路由:

cd web 
vue add router

选择no,使用普通路由
在这里插入图片描述
安装完成后,web端文件自动配置,同时页面出现了路由:
在这里插入图片描述
在这里插入图片描述
我们不在所有页面使用固定路由,所以删掉vue默认设置的路由。
在这里插入图片描述
新建主入口页面Main.vue,将Main组件当作主页面,把Home.vue视为首页组件,通过路由将Home.vue作为子组件引入到Main.vue:
在这里插入图片描述
在这里插入图片描述
待页面样式完善后,添加其他页面路由。
(2)使用sass生成的css优化界面
在这里插入图片描述
给我们需要添加效果的模块直接添加类名即可。
我的页面,其中首页为Home.vue,技能学习为Skill.vue,文章中心为Article.vue:
在这里插入图片描述
Main.vue

<template>
    <div>
        <div class="topbar py-2 px-3 d-flex ac-center">
            <img src="../assets/logo.png" height="50">
            <div class="px-2 flex-1">
                <div class="text-black fs-lg pt-2">八方设计</div>
                <div class="text-gray fs-xxs pt-2">用设计挖掘梦想</div>
            </div>
            <div class="py-3">
                <button class="btn bg-primary text-white">用户登录</button>
            </div>
        </div>
        <div class="bg-primary pt-3 pb-2">
            <div class="nav d-flex text-white jc-around">
                <div class="nav-item">
                    <!-- 导航使用路由的active-class,根据所在路由位置为标签添加类名,同时在style.scss中设置active类名的样式 -->
                    <!-- extra属性与active-class配合使用,更精确找到路由位置,若不加则会认为/skill在/内(即技能学习在首页内部),二者都会被赋予active类名 -->
                    <router-link class="nav-link" tag="div" to="/" active-class="active" exact>首页</router-link>
                </div>
                <div class="nav-item">
                    <router-link class="nav-link" tag="div" to="/skill" active-class="active" exact>技能学习</router-link>
                </div>
                <div class="nav-item">
                    <router-link class="nav-link" tag="div" to="/article" active-class="active" exact>文章中心</router-link>
                </div>
            </div>
        </div>

        <!-- 路由组件 -->
        <router-view></router-view>
    </div>
</template>

<script>
export default {
    
}
</script>

<style>
    .fs-xxs{
        letter-spacing: 3px;
    }
    .fs-lg{
        letter-spacing: 3px;
    }
    .topbar{
        /* 吸顶效果 */
        position: sticky;
        top: 0;
        z-index: 999;
    }
</style>

style.scss

// 规范样式

* {
    // 避免margin/padding等将页面向外扩充,加入border-box后页面像内部挤压
    box-sizing: border-box;
    // 取消鼠标移入等高亮样式
    outline: none;
}

html {
    // 设置默认字体大小
    font-size: 13px;
}

body {
    // 设置body默认

    // 去除body边框
    margin: 0;
    // 设置字体:所有计算机自带字体,苹果电脑自带字体,非衬线字体
    font-family: Arial, Helvetica, sans-serif;
    // 行距
    line-height: 1.2rem;
    // 背景颜色
    background: #f5f5f5;
}

a {
    color: #999;
}

ul, li{
    list-style: none;
}


// colors常用颜色
$colors: (
    // 主色
    "primary": #a80506,
    // 辅色
    "auxiliary": #054ea8,
    // 点缀色
    "Embellishment":#db9e3f,

    // 白色
    "white": #fff,
    // 黑色
    "black": #000,
    // 灰色
    "gray": #777,
);
@each $colorKey, $color in $colors {
    // 文字颜色
    .text-#{$colorKey} {
        color: $color;
    }
    // 背景颜色
    .bg-#{$colorKey} {
        background: $color;
    }
}

// text常用文本
@each $var in (left, center, right) {
    .text-#{$var}{
        text-align: $var;
    }
}
// 使用px to rem插件设置默认字体大小为13px
// 设置基础字体大小
$base-font-size: 1rem;
// 根据基础字体大小设置字体大小
$font-size: (
    // 使用px to rem插件,alt + z 转化px到rem
    // xs为6px
    xxs: 0.4615,
    // xs为10px
    xs: 0.7692,
    // sm为12px
    sm: 0.9231,
    // md为13px
    md: 1,
    // lg为14px
    lg: 1.0769,
    // xl为16px
    xl: 1.2308,
);
@each $sizeKey, $size in $font-size {
    // 文字颜色
    .fs-#{$sizeKey} {
        font-size: $size * $base-font-size;
    }
}


// flex布局
.d-flex{
    display: flex;
}
.flex-1{
    flex: 1;
}
.flex-column{
    // 灵活的项目将垂直显示,正如一个列一样。
    flex-direction: column;
}
$flex-jc: (
    start: flex-start,
    end: flex-end,
    center: center,
    between: space-between,
    around: space-around,
);
@each $key,$value in $flex-jc {
    .jc-#{$key} {
        justify-content: $value;
    }
}
$flex-ac: (
    start: flex-start,
    end: flex-end,
    center: center,
    between: space-between,
    around: space-around,
    stretch: stretch,
);
@each $key,$value in $flex-ac {
    .ac-#{$key} {
        align-content: $value;
    }
}


// 间距spacing
// bootstrap中,mt-1 -> margin-top: 1rem, pb-2 -> padding-bottom: 2rem

// 类型
$spacing-types: (m: margin, p: padding);
// 方向
$spacing-directions: (t: top, r: right, b: bottom, l:left);
// 尺寸
$base-spacing-size: 1rem; // 基础尺寸
$spacing-sizes: (0: 0, 1: 0.25, 2: 0.5, 3: 1, 4: 1.5, 5: 3); // 基础尺寸为准的倍数
@each $typeKey, $type in $spacing-types {
    @each $directionKey, $direction in $spacing-directions {
        @each $sizeKey, $size in $spacing-sizes {
            // 样版: .mt-1 { margin-top: 0.25rem }
            .#{$typeKey}#{$directionKey}-#{$sizeKey} {
                #{$type}-#{$direction}: $size * $base-spacing-size;
            }
        }
    }
}
// m-1, p-1等只需要嵌套类型变量$spacing-directions和尺寸变量$spacing-sizes
@each $typeKey, $type in $spacing-types {
    @each $sizeKey, $size in $spacing-sizes {
        // 样版: .mt-1 { margin-top: 0.25rem }
        .#{$typeKey}-#{$sizeKey} {
            #{$type}: $size * $base-spacing-size;
        }
    }
}

// 水平、垂直方向边距
@each $typeKey, $type in $spacing-types {
    @each $sizeKey, $size in $spacing-sizes {
        // mx-1,px-1
        .#{$typeKey}x-#{$sizeKey} {
            #{$type}-left: $size * $base-spacing-size;
            #{$type}-right: $size * $base-spacing-size;
        }
        // my-1,py-1
        .#{$typeKey}y-#{$sizeKey} {
            #{$type}-top: $size * $base-spacing-size;
            #{$type}-bottom: $size * $base-spacing-size;
        }
    }
}

// button
.btn{
    border: none;
    border-radius: 0.1538rem;
    font-size: map-get($font-size, 'sm') * $base-font-size;
    padding: 0.4rem 0.6rem;
}

// nav-border
.nav{
    .nav-item{
        border-bottom: 3px solid transparent;
        padding-bottom: 0.2rem;
        // 符号&代表上一层本身
        .active{
            border-bottom: 2px solid #fff;
        }
    }
}
相关文章
|
11月前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
214 61
|
7月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
303 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
7月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
5819 24
|
9月前
|
安全 Java 数据安全/隐私保护
springSecurity学习之springSecurity过滤web请求
通过配置 Spring Security 的过滤器链,开发者可以灵活地管理 Web 请求的安全性。理解核心过滤器的作用以及如何配置和组合这些过滤器,可以帮助开发者实现复杂的安全需求。通过具体的示例代码,可以清晰地了解 Spring Security 的配置方法和实践。
404 23
|
9月前
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
174 10
|
7月前
|
安全 大数据 数据挖掘
课时9:阿里云Web应用防火墙:全面保障网站的安全与可用性
阿里云Web应用防火墙(WAF)基于阿里巴巴十年攻防经验,提供全面的网站安全防护。它通过Web应用防护、CC攻击防护和业务风控,有效应对各类网络威胁,确保网站的安全与可用性。智能双引擎技术降低误报率,实时数据分析和虚拟补丁更新保障系统安全。WAF已成功护航多个重大活动,为企业提供高效、简便的安全解决方案。
154 0
|
11月前
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
335 2
|
11月前
|
人工智能 搜索推荐 PHP
PHP在Web开发中的璀璨星辰:构建动态网站的幕后英雄###
【10月更文挑战第25天】 本文将带您穿越至PHP的宇宙,揭示其作为Web开发常青树的奥秘。通过生动实例与深入解析,展现PHP如何以简便、高效、灵活的姿态,赋能开发者打造动态交互式网站,同时不忘探讨其在新时代技术浪潮中面临的挑战与机遇,激发对技术创新与应用的无限思考。 ###
133 1
|
12月前
|
机器学习/深度学习 移动开发 JavaScript
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
4669 0
WK
|
11月前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
380 0