【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里面就不用引入组件来显示了。

相关文章
|
8天前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
9天前
|
JavaScript 前端开发
Vue开发必备:$nextTick方法的理解与实战场景
Vue开发必备:$nextTick方法的理解与实战场景
68 1
|
13天前
|
JavaScript
|
16天前
|
前端开发 容器
使用 CSS Grid 布局实现响应式设计
【10月更文挑战第1天】使用 CSS Grid 布局实现响应式设计
29 4
|
16天前
|
前端开发 容器
前端技术分享:利用CSS Grid布局实现响应式设计
【10月更文挑战第1天】前端技术分享:利用CSS Grid布局实现响应式设计
|
5天前
|
前端开发 开发者 容器
Vue3中Sass的安装与使用指南:轻松上手CSS预处理器
Vue3中Sass的安装与使用指南:轻松上手CSS预处理器
11 0
|
1月前
|
前端开发 容器
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等,解释了这些属性在弹性盒子布局中的作用和用法。
|
1月前
|
JavaScript 前端开发 UED
组件库实战 | 用vue3+ts实现全局Header和列表数据渲染ColumnList
该文章详细介绍了如何使用Vue3结合TypeScript来开发全局Header组件和列表数据渲染组件ColumnList,并提供了从设计到实现的完整步骤指导。
|
1月前
|
JavaScript 前端开发
网页前端课程设计-【模仿】香港中文大学官网,轮播图及div+css布局,js的dom操作
这篇文章介绍了如何模仿香港中文大学官网进行网页前端课程设计,包括使用div+css布局、js的DOM操作以及实现轮播图等技术细节。
|
1月前
|
JavaScript 前端开发
react Or vue中引入animate.css
本文介绍了如何在React或Vue项目中引入animate.css库来使用动画效果,包括通过npm安装或在线链接引入,并展示了如何在React组件和Vue路由过渡中使用动画类。
42 0