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

相关文章
|
1月前
|
前端开发 UED 容器
在 CSS 中使用 Flex 布局实现页面自适应时需要注意什么?
【10月更文挑战第22天】在使用 Flex 布局实现页面自适应时,需要对其基本原理和特性有深入的理解,同时结合具体的布局需求和场景,进行细致的调整和优化。通过合理的设置和注意事项的把握,才能实现理想的自适应效果,提升用户体验。还可以根据实际情况进行更深入的探索和实践,以不断提升 Flex 布局的应用能力。
|
23天前
|
前端开发 JavaScript 数据处理
CSS 变量的作用域和 JavaScript 变量的作用域有什么不同?
【10月更文挑战第28天】CSS变量和JavaScript变量虽然都有各自的作用域概念,但由于它们所属的语言和应用场景不同,其作用域的定义、范围、覆盖规则以及与其他语言特性的交互方式等方面都存在明显的差异。理解这些差异有助于更好地在Web开发中分别运用它们来实现预期的页面效果和功能逻辑。
|
19天前
|
前端开发 JavaScript 安全
HTML+CSS+JS密码灯登录表单
通过结合使用HTML、CSS和JavaScript,我们创建了一个带有密码强度指示器的登录表单。这不仅提高了用户体验,还帮助用户创建更安全的密码。希望本文的详细介绍和代码示例能帮助您在实际项目中实现类似功能,提升网站的安全性和用户友好性。
33 3
|
23天前
|
前端开发 开发者 容器
CSS 变量的作用域是什么?
【10月更文挑战第28天】理解CSS变量的作用域规则对于有效地使用CSS变量来组织和管理页面样式非常重要。通过合理地利用全局作用域和局部作用域,以及掌握变量的覆盖和继承规则,可以创建更具可维护性、灵活性和可扩展性的CSS样式表,实现各种复杂的页面设计和样式需求。
|
2月前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
2月前
|
JavaScript 前端开发
Vue开发必备:$nextTick方法的理解与实战场景
Vue开发必备:$nextTick方法的理解与实战场景
136 1
|
24天前
|
前端开发 容器
实现CSS品字布局
【10月更文挑战第27天】
|
2月前
|
JavaScript
|
2月前
|
前端开发 容器
使用 CSS Grid 布局实现响应式设计
【10月更文挑战第1天】使用 CSS Grid 布局实现响应式设计
56 4