【Vue3从零开始-实战】S5:CSS作用域约束及登录页的布局实现

简介: 【Vue3从零开始-实战】S5:CSS作用域约束及登录页的布局实现

@@DVBVTGC2D7ROIYF4YK_@O.png


前言


实战已经开始了!在前面几篇文章中,我们把首页的布局和样式都完成了,也将首页拆分成了多个组件,并合并成一个首页展示出来了。本章节会先补充一个知识点 - Css作用域约束,然后还会将登录页的布局实现出来。


CSS作用域约束


在之前的代码中,我们的组件样式里面都是用的style标签,并在标签上写了一个lang=scss,这就表示我们的样式可以根据scss的方式去写。


在首页有这样一段样式代码:


<style lang="scss">
.wrapper {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0.5rem;
  right: 0;
  padding: 0 0.18rem;
  overflow-y: auto;
}
</style>
复制代码


如果在其他组件也定义了一个wrapper的类名,并写了样式,那页面上会怎么呈现出来呢?


<div class="tabbar wrapper">
  <div class="tabbar__item" v-for="item in tabbarList" :key="item.icon">
    <div class="iconfont" v-html="item.icon"></div>
    <div class="tabbar__title">{{item.title}}</div>
  </div>
</div>
复制代码


  • tabbar组件中添加了一个wrapper类名


.wrapper {
  background-color: red;
}
复制代码


  • 并在tabbar组件的样式中给wrapper一个红色背景


G8D%(Q0)W%@V~W80VK(AYS4.png


这时候会发现不仅页面的背景变成了红色,tabbar组件还跑到顶部去了。


⭐️ 如果想要找到并修改wrapper的样式,但是又有多个地方写了wrapper的样式,那么定位起来就比较困难了。


🔥 理论上来说,我们在写前端样式时,一个组件样式应该只是作用于当前组件内部,不应该影响到外部的组件。


如果想要实现这样的理论效果,那么就需要在style标签上添加一个scoped属性。


<style lang="scss" scoped>
</style>
复制代码


scoped:当前样式仅对当前组件有效。


E5OW[_J4FTBT@KL139GO@@K.png


🐂 这时候页面就会正常显示了,而tabbar组件中的wrapper样式只会作用于当前组件。


建议:以后在写组件样式的时候,最好都加上scoped,这样方便大家维护组件样式。


登录页


在写登录页面之前,我们需要先在views目录下面新建Login文件夹和Login.vue文件。


LZ$VN6501UO8TSS39N~5HYQ.png


稿图


SC0DXL(FO6`D}$5%90L@$Z1.png


由于组件的DOM结构比较简单,样式也不太复杂,所以下面会直接对组件和样式贴代码,大家也可以自行DIY登录页的哦。。。


组件DOM


<template>
  <div class="wrapper">
    <img class="wrapper__img" src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-a8a16cef-f2b9-4644-b216-3b95bcb12602/236a3cf5-e6e7-4f37-916f-72e1465ac359.png"/>
    <div class="wrapper__input">
      <input class="wrapper__input__content" placeholder="请输入手机号" />
    </div>
    <div class="wrapper__input">
      <input class="wrapper__input__content"  placeholder="请输入密码" />
    </div>
    <div class="wrapper__login-button">登陆</div>
    <div class="wrapper__login-link">立即注册</div>
  </div>
</template>
复制代码

组件样式


<style lang="scss" scoped>
@import '../../style/viriables.scss';
.wrapper {
  position: absolute;
  top: 50%;
  left: 0;
  right: 0;
  transform: translateY(-50%);
  &__img {
    display: block;
    margin: 0 auto .4rem auto;
    width: .66rem;
    height: .66rem;
  }
  &__input {
    height: .48rem;
    margin: 0 .4rem .16rem .4rem;
    padding: 0 .16rem;
    background: #F9F9F9;
    border: 1px solid rgba(0,0,0,0.10);
    border-radius: 6px;
    border-radius: 6px;
    &__content {
      line-height: .48rem;
      border: none;
      outline: none;
      width: 100%;
      background: none;
      font-size: .16rem;
      color: $content-notice-font-color;
      &::placeholder {
        color: $content-notice-font-color;
      }
    }
  }
  &__login-button {
    margin: .32rem .4rem .16rem .4rem;
    line-height: .48rem;
    background: #0091FF;
    box-shadow: 0 .04rem .08rem 0 rgba(0,145,255,0.32);
    border-radius: .04rem;
    border-radius: .04rem;
    color: #fff;
    font-size: .16rem;
    text-align: center;
  }
  &__login-link {
    text-align: center;
    font-size: .14rem;
    color: $content-notice-font-color;
  }
}
</style>
复制代码


  • 在样式中,引入了一个公共scss,在首页的代码中也用到过的。


$content-notice-font-color: #777;
复制代码

App.vue中引入组件


<template>
  <div>
    <Login />
  </div>
</template>
<script>
import Login from './views/login/Login'
export default {
  name: 'App',
  components: {
    Login
  }
}
</script>
复制代码


9L8S76GPX9571AF0(YH83CP.png


⭐️ 这时候在打开根路由的时候,就会渲染出Login页面了。


但是现在没办法看到首页了,该怎么办呢?


路由配置


👉 打开router目录下面的index.js文件


``Y_OG7$R_KVF%RT~PKS[$4.png


👆 将Home和Login两个组件引入进去


import Home from '../views/home/Home'
import Login from '../views/login/Login'
复制代码


✌️ 将Home配置成根路由,将Login配置成/Login的路由


const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  }, {
    path: '/login',
    name: 'Login',
    component: Login
  }
]
复制代码


👌 配置App.vue


<template>
  <div>
    <router-view />
  </div>
</template>
<script>
export default {
  name: 'App'
}
</script>
复制代码


  • App.vue中就需要用router-view标签来展示路由了,其他的组件都不需要引入。


网络异常,图片无法展示
|

总结

本篇文章主要是补充了前面没有提到的Css作用域约束,还将登录页布局实现了,并把登录页和首页的路由配置完成之后,在App.vue里面就不用引入组件来显示了。

相关文章
|
2月前
|
JavaScript 前端开发
在Vue2或Vue3中项目中使用 Isotope(同位素) 过滤和排序神奇的布局神器,全网独家实现!
本文介绍了在Vue2或Vue3项目中如何使用Isotope(同位素)布局库来创建动态的网格布局,并提供了详细的代码实现和效果展示,包括过滤和排序功能。
69 0
在Vue2或Vue3中项目中使用 Isotope(同位素) 过滤和排序神奇的布局神器,全网独家实现!
|
14天前
|
前端开发 容器
css布局-弹性布局学习笔记
这篇文章是关于CSS弹性布局的学习笔记,详细介绍了flex容器和元素的相关属性,包括flex-direction、flex-wrap、flex-flow、justify-content、align-items、align-content以及order、flex-grow、flex-shrink、flex-basis、flex和align-self等,解释了这些属性在弹性盒子布局中的作用和用法。
|
13天前
|
JavaScript 前端开发 UED
组件库实战 | 用vue3+ts实现全局Header和列表数据渲染ColumnList
该文章详细介绍了如何使用Vue3结合TypeScript来开发全局Header组件和列表数据渲染组件ColumnList,并提供了从设计到实现的完整步骤指导。
|
13天前
|
JavaScript 前端开发
网页前端课程设计-【模仿】香港中文大学官网,轮播图及div+css布局,js的dom操作
这篇文章介绍了如何模仿香港中文大学官网进行网页前端课程设计,包括使用div+css布局、js的DOM操作以及实现轮播图等技术细节。
|
2月前
|
前端开发 安全 容器
CSS如何优雅实现卡片多行排列布局?
【8月更文挑战第24天】CSS如何优雅实现卡片多行排列布局?
47 3
|
2月前
|
前端开发 开发者 容器
探索现代Web开发中的CSS Grid布局技术
【8月更文挑战第29天】在数字时代的浪潮中,网页设计不断进化以适应日新月异的用户需求。CSS Grid布局技术作为一项革新性的前端工具,为设计师和开发者提供了前所未有的布局能力。本文旨在通过深入浅出的方式介绍CSS Grid的核心概念、基本用法以及在实际项目中的应用,帮助读者快速掌握这一强大的网页布局工具。
43 3
|
2月前
|
编解码 前端开发 开发者
【前端设计达人必备】揭秘CSS尺寸单位的魔力:从基础到实战,打造灵动响应式网页!
【8月更文挑战第26天】本文深入探讨了CSS中常用的尺寸单位,包括像素(px)、百分比(%)、视窗单位(vw/vh/vmin/vmax)、可伸缩相对单位(em/rem)以及Flexbox和Grid中的fr单位。通过具体案例展示了每种单位的特点及其适用场景。像素适用于固定尺寸元素;百分比和em/rem利于构建响应式布局;视窗单位适合全屏设计;fr单位则能有效管理复杂网格布局的空间分配。掌握这些单位有助于开发者设计出更加灵活、高质量的网页布局。
44 4
|
2月前
|
前端开发 开发者 容器
【Web布局的革命】探索CSS Grid栅格系统,打造未来网页设计!
【8月更文挑战第25天】在网页设计领域,布局至关重要。传统的布局方法难以满足复杂需求,CSS Grid 栅格系统因此诞生。它是一种二维布局模式,能直接控制行和列,简化复杂网格的设计。通过定义 `display: grid;` 创建网格容器,并利用 `grid-template-columns` 和 `grid-template-rows` 设置行列尺寸,轻松实现响应式布局。此外,CSS Grid 支持高级功能,如网格区域划分和对齐设置,极大提升了布局的灵活性和创意空间。随着浏览器兼容性的增强,CSS Grid 必将成为未来网页设计的关键技术之一。
53 1
|
2月前
|
JavaScript
Vue学习之--------消息订阅和发布、基础知识和实战应用(2022/8/24)
这篇文章介绍了Vue中消息订阅和发布的机制,作为组件间通信的一种方式,特别适用于任意组件间的通信。文章通过基础知识讲解和具体的代码实例,展示了如何使用`pubsub-js`库来安装、订阅、发布消息,并在组件销毁前取消订阅以避免内存泄漏。
Vue学习之--------消息订阅和发布、基础知识和实战应用(2022/8/24)
|
2月前
|
JavaScript 前端开发 开发者
Vue学习之--------深入理解Vuex、原理详解、实战应用(2022/9/1)
这篇文章详细介绍了Vuex的基本概念、使用场景、安装配置、基本用法、实际应用案例以及注意事项,通过一个数字累加器的实战示例,帮助开发者深入理解Vuex的原理和应用。