Web使用Pug与Stylus

5.pug用法:

5.1层级:
需要按照阶梯层级来写pug代码,例如Html标签肯定包裹了Head和body标签,那html标签在第一行,head和body就必须在第二,三行,而且要缩进两个空格写,这里的head和body是同级的,所以他们必须保持一致的缩进

// 传统写法
<html>
    <head></head>
    <body>
        <h1></h1>
        <p></p>
        <p></p>
        <button></button>
    </body>
</html>

// pug写法
html
    head
    body
        h1
        p
        p
        button

比较得出pug写法很简洁,而且不需要闭口,传统的必须用</>来闭口。

5.2 id和class
class用.表示,id用#表示

    // 传统写法
    <html>
        <head></head>
        <body>
            <h1 id="pageTitle">This Is Page Title</h1>
            <p class="top-p">
                嘿嘿嘿
            </p>
            <p class="bottom-p">
                哈哈哈
            </p>
        </body>
    </html>

    // pug写法
    html
        head
        body
            h1#pageTitle This Is Page Title
            p.top-p
                嘿嘿嘿
            .bottom-p
                哈哈哈

另外,<div></div>的class和id属性写法最简单,可能是因为这个是html最常见的标签,所以他不需要加前缀,直接这样

    <div id = "div-id">哼哼</div>
    <div class="display-div">哈哈</div>
    
    // pug写法
    .div-id
    .display-div

5.3 属性写在圆括号里
传统html写法

  <div class = "container">
    <input type="number" v-model="mName" class="input_name" placeholder="请输入用户名"/>
    <button @click="clickSubmit()" class="btn_submit">提交</button>
    <img border="0" src="/images/pulpit.jpg" alt="Pulpit rock" width="304" height="228"/>
  </div>

pug写法

  .container
    input(type="number" v-model="mName" class="input_name" placeholder="请输入用户名字")
    button(@click="clickSubmit()" class="btn_submit") 提交
    img(src="/images/pulpit.jpg" class="dateIcon" width="304" height="228" alt="Pulpit rock")

最后总结:
1.传统控件不需要. 例如input,button,img,textrea,p,span等等,直接写代表控件的名字,在圆括号里面写属性
2.div肯定是.class名字开头,但是传统控件也可以手动加class名字和id名字,方便其它地方使用

实际demo:
1.效果图:

image.png

html部分代码

<template lang="pug">
  .page
    .row(@click="showDateTimePicker()")
      span(class="title") 日期
      .right
        img(src="../../../assets/turnleft.png" class="dateIcon")
        span(class="date") {{currentDate}}
      .line
    .row(style="padding-top:8px")
      span(class="title") 班次
      .right
        .button(v-for="item,index in scheduleList" :key="index"  :style="index==currentShift? buttonChooiceStyle() : buttonUnChooiceStyle()" @click="clickShift(index)") {{item.name}}
      .line
    .row.active
      span(class="title") 停机总时长 (min)
      .right
        input(type="number" v-model="bean.total_time" class="input" placeholder="填写停机总时长")
      .line
    .row.active
      span(class="title") 设备 (电气) (min)
      .right
        input(type="number" v-model="bean.elec_device" class="input" placeholder="填写设备(电气)")
      .line
    .row.active
      span(class="title") 设备 (机械) (min)
      .right
        input(type="number" v-model="bean.mach_device" class="input" placeholder="填写设备(机械)")
      .line
    p 独自一行
    .showSpan
      span  也是一行
    .save
      .button(@click="addData()") 保存

</template>

样式代码,是用stylus实现的,你们也可以用传统的方式实现,但是pug搭配stylus非常方便,两者都不用写一些多余的代码。

<style lang="stylus" scoped>
  row()//通用方法,可以定义多个在下面调用
    display flex
    flex-direction row
  lineStyle()//通用方法2 如果是拷贝这些代码注意第一个方法以下的代码空格可能会乱,导致样式不对,注意对比
    height 1px
    background-color #EEEEEE
    position absolute
    width 100%
    bottom 0px
    left 10px

  .page
    width 100%
    height 100%
    overflow-x hidden
    padding-bottom 62px
    .row
      position relative
      row()
      align-items center
      padding 12px 10px
      .title
        color #333333
        font-size 14px
      .right
        flex 1
        display flex
        flex-direction row-reverse
        flex-wrap wrap
      .line
        lineStyle()
      &.active
        padding 0 10px
      .date
        color #666666
        font-size 16px
      .dateIcon
        width 5px
        height 10px
        margin-top 4px
        margin-left 6px
    p
      background firebrick
    .showSpan
      width 100%
      span
        background green
    .button
      border 1px solid #1E9AFF
      color #1E9AFF
      padding-left 15px
      padding-right 15px
      height 24px
      background-color #fff
      display flex
      justify-content center
      align-items center
      font-size 14px
      border-radius 4px
      margin-left 10px
      margin-top 5px
    .input
      font-size 14px
      text-align right
      height 45px
    .save
      width 100%
      bgf()
      position fixed
      bottom 0
      wh 100% 52px
      font-size 14px
      display flex
      justify-content flex-end
      border-top 1px solid #EEEEEE
      .button
        display flex
        justify-content center
        align-items center
        height 28px
        width 80px
        margin 12px 28px
        background-color #1E9AFF
        color #fff
        border null
        border-radius 16px
</style>

对于stylus的使用特点

  1. class的名字前面用.开头,在下一行缩进两格开始写样式,这个class的子布局的名字声明和他的样式的缩进保持一致,子布局样式实现又在下一行并且缩进两个单元格进行,说的很抽象,看上面代码就明白了。
  2. 可以定义通用方法,除了定义在当前的style里面(demo里面有),也可以定义一个全局的,这个就不细说了。
  3. &符号是代表当前这一层的上面一层的名字,切割要用.来切割,好处是代码清晰
    例如上面pug实现的html写的是
<template lang="pug">
  .main_header 头部布局
    .main_header.left  左边布局
    .main_header.right 右边布局
</template>
<style lang="stylus">
  .main_header
    background white
    &.left
    &.right
</style>

& 就是 .main_header 所以&.left 就是.main_header.left

  1. 样式动态改变用:class辅助实现:
<template lang="pug">
  button(class="button_style" :class="{special_style: isSpecialStyle}" @click="changeStyle()")  点击改变样式
</template>


<script>
  export default {
    data() {
      return {
        isSpecialStyle:false
      }
    },
    method:{
      changeStyle() {
        // 通过控制这个变量确定是否使用special_style
        this.isSpecialStyle = !this.isSpecialStyle
      }
    }
  }
</script>

<style scoped lang="stylus">
 .button_style
     width 90px
     height 36px
     padding-left 2px
     padding-right 2px
     border-radius 26px
     font-size 12px
     color rgba(255,255,255,1)
     line-height:17px;
     background #FFFFFF
     border:1px
     &.special_style
        background #4472C5
        border:1px solid #4472C5

</style>
***5.3 ***

CSS语法补充

padding是上右下左的顺序,有四种写法:

padding:10px; 意思是上下左右值全是10px
padding:5px 10px; 意思是上下为5px,左右为10px;
padding:1px 2px 3px 4px; 这个写法意思是:上为1px,右为2px,下为3px,左为4px
padding:5px 10px 7px; 这种写法意思是:上为5px,左右为10px,下为7px

注意:android里面都是固定的写法左右上下,只有两种写法:

padding:10px;意思是左上右下值全是10px
padding:1px 2px 3px 4px; 这个写法意思是:左为1px,上为2px,右为3px,下为4px

js常用方法补充:

// 深度复制对象方法
copy(obj){
        let copyObj = {}; //最初的时候给它一个初始值=它自己或者是一个json
        for(let name in obj){
          if(typeof obj[name] === "object"){ //先判断一下obj[name]是不是一个对象
            copyObj[name]= (obj[name].constructor===Array)?[]:{}; //我们让要复制的对象的name项=数组或者是json
            this.copy(obj[name],copyObj[name]); //然后来无限调用函数自己 递归思想
          }else{
            copyObj[name]=obj[name];  //如果不是对象,直接等于即可,不会发生引用。
          }
        }
      return copyObj; //然后在把复制好的对象给return出去
     },
// 浅复制,这个赋值的是地址,会跟着变。
Var newObj = Oldobj
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 180,161评论 5 436
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 75,785评论 2 342
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 128,551评论 0 297
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 48,708评论 1 254
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 57,479评论 4 337
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 43,558评论 1 250
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 34,544评论 3 364
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 33,100评论 0 237
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 37,231评论 1 278
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 32,788评论 2 285
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 34,457评论 1 300
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 30,484评论 3 294
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 35,750评论 3 287
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 27,507评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 28,714评论 1 240
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 38,993评论 2 318
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 38,555评论 2 318

推荐阅读更多精彩内容