任务四、 一个最常见的移动端页面

完成的事情

  1. 完成简单布局,然后填充界面
  2. 与效果图对比优化
  3. 完成验收要求:header扩展性 & 顶栏固定
  4. 进行placeholder样式兼容性研究
  5. 完成任务四-深度思考
  6. task4跟随深度思考 & 师兄建议进行修改

    • 输入栏左侧换用label
    • 输入限制 电话11位,密码16位
    • 根据HTML结构的语义化修改index.html
    • 尝试main下再加一个div.content用来包裹滚动的内容

计划的事情

  • [ ] 任务五计划及完成一部分
  • [ ] 了解CSS通配符 & 选择器性能优化/浏览器渲染原理
  • [ ] float学习(周六学习)

    • [ ] 张鑫旭《CSS世界》相关章节
    • [ ] 张鑫旭 float系列
  • [ ] 深度思考:手机分辨率和网页px的区别(TODO:周末补学)

    • link1
    • link2
    • link3

遇到的问题

  • FireFox60下placeholder样式修改失效

    • input:-moz-placeholder(失效)
    • input::-moz-placeholder(失效)
    • input:placeholder-shown(失效)

收获

一、 布局 & 优化

  1. 明确效果:一个宽度自适应屏幕的登录界面
  2. 步骤:

    • 1).对目标效果GIF进行截图,获得全屏效果图、425px效果图、320px效果图
    • 2).从PSD文件中导出需要的图片(phone&lock),并用吸管工具获取界面背景色#eff0f4、登录按钮底色#5fc0cd、input中间小杠颜色#eaedee
    • 3). 开始简单界面编写

      • 首先是topbar, 关闭登录注册,分成三列,关闭靠左登录居中注册靠右

        • 布局:可以用float解决靠左靠右剩下一个在文档流中居中,不过按照惯例要走新一点的路,所以这里选择使用flex布局,topbar类设置justify-conent: space-around,也就是两端对齐,项目间间隔相等的主轴对齐方式.再设置align-items: center使三个项垂直居中.
        • 调整:

          • topbar中的文字里边有距离,这里应该用padding做填充撑起外盒,还没有测量,可以先这是html的font-size再用rem做padding填充.
          • 关闭登录注册刚开始用的是三个<a>标签,并且做了个去底线处理,但是中途发现登录是个title而不是链接,故筛选大小后暂时先选用<h3>.
      • 然后是container-form两个各占一行的输入:

        • 布局:由于是左icon右input的布局,所以用flex,并且这是主轴靠左,input设flex:1,完成大致布局.
        • 左侧icon:有图片做icon右边有输入栏,由于icon是图片并且有近似等高的同行小杠杠,于是设计图片左右padding+右侧border,看原型图发现右侧小杠杠似乎稍高,于是图片上下也设置一点padding来撑高右侧小杠杠,之后外面用一个div包住设置margin和行高来居中,完成左侧;
        • 右侧input:简单设置一下padding并去掉border&outline就好,在此顺便对placeholder的样式做一点探究(见下面总结)
      • 接着是container-form的button, 由于button的display是inline-block所以可以控制width,设置为100%,然后设置上下padding.然后"登录"之间有一个字左右的间距所以加上&nbsp;
      • 最后是forgetpw,包含文字并且靠右,继续用flex,主轴flex-end,交叉轴center.设置好a标签的颜色样式

  3. 对比优化

    • 对比

      • topbar高度不够,左右padding稍宽,登录字体不一样
      • 输入左侧icon的横向padding加一点,行高加一点
      • 登录高度不够.效果图"登录"应该是用letter-spacing做间隔的导致没居中(这个不改哈哈)
      • 忘记密码字体过大
      • GIF效果图没有做点击input显示"圆圈+x".
      • 处理:这个裁剪下PSD的图然后简单设置一下就可以简单加入输入行了.flex大法好!
    • 完成之后效果如下:
  4. 学习更多CSS知识之后修改CSS,尝试可复用yang'shi:

    • header使用分三种方案: flex、float+absolute、absolute,可以通过修改header的标签应用不同效果.
    • form-row组建完成一行样式

二、验收标准

  1. 扩展性要求:去掉header的三块文字的任意一两个,剩下的一两个都还在原位置上不会受到影响

    • 一开始用的是flex三列布局,三个标签按照flex的justify-content: space-between;等距离分成左中右,纵向按照align-items: center;垂直居中,但是这样的样式去掉一个标签布局就会变化,去掉标签的话需要用等长的&nbsp;来顶上才能保持标签位置不变.
    • 为了满足扩展性要求,将header改为左右float中间正常居中样式,但是实测发现浮动的a标签会占位导致中间的标签不居中(span内联包围了float),所以暂时放弃这个方案,并计划找时间学习float看看有无解决方法.
    • 根据上面方法进行修改,左右使用absolute,中间不变,轻松搞定...
  2. 移动端:header始终固定顶部

    • 解决:header加fixed,给定width并设置top,完成.
    • 效果:

三、 深入思考

  1. position定位有哪几种?各有什么特点 参考:CSS 相对|绝对(relative/absolute)定位系列

    • static:默认定位

      • 不可层叠,不脱离文档流
    • relative:相对当前位置定位

      • 不可层叠,不脱离文档流
      • 相对其正常位置进行定位,通过left、right、top、bottom位移
    • absolute:绝对定位

      • 包裹性:让元素由原来宽度变成自适应内部元素的宽度
      • 破坏性:脱离文档流,令原本占据的空间坍塌(布局破坏)
      • 定位:相对最近的非static父级定位,如果没有则继续向上查找直到body,通过left、right、top、bottom位移,可通过z-index进行层次分级
      • 会生成一个块级框
    • fixed:固定定位

      • 包裹性:让元素由原来宽度变成自适应内部元素的宽度
      • 破坏性:脱离文档流,令原本占据的空间坍塌(布局破坏)
      • 相对于浏览器viewport定位,通过left、right、top、bottom位移,可通过z-index进行层次分级
      • 会生成一个块级框
    • inherit:从父类继承position属性的值
  2. 哪些css属性可以设置百分比,其计算原则是什么?

    • 参考:MDN
    • 计算原则:百分比*参照值

      • Tip: 百分比值是一种相对值,任何时候要分析它的效果,都需要正确找到它的参照值
    • 可设置属性

      • 盒模型系列:

        • content: width(参照包含块宽度)、height(参照包含块高度)
        • padding(参照包含块宽度)
        • border

          • border-radius(参照包自身宽度&高度)
          • border-image

            • border-image-slice(参考图片尺寸)
            • border-image-width(参考自身宽度&高度)
        • margin(参照包含块宽度)
      • 定位系列:

        • left、right(参照包含块宽度)
        • top、bottom(参照包含块高度)
      • 文本系列:

        • text-indent(参照包含块宽度)
        • word-spacing(参照受影响字体宽度)
        • text-size-adjust(参考相对应文字字号)
        • font-size(参照包含父元素字号)
      • flex系列:

        • flex-basis(参考flex容器大小)
      • background系列:

        • background-position(参考背景定位区域大小-背景图片大小,其中大小指的是水平偏移的宽度和垂直偏移的高度) 图例
        • background-size(相对于定位区域)
  3. 常见的表单元素有哪些?各有什么属性?

    • form 表单

      • 属性

        • action: 提交表单时执行的动作,可以在此指定某个服务器表单处理脚本(如果省略action,action被设置为当前页面)
        • method: HTTP方法(GET|POST)
        • accept-charset:使用的字符集
        • autocomplete: 自动完成表单(默认开启)
        • enctype:提交数据的编码
        • novalidate:规定不验证表单
        • target:规定action属性中地址的目标(默认_self,也就是指向当前)
    • input 输入,可通过改变type变换形态

      • 属性 其他属性参考了解HTML表单之input元素的30个元素属性

        • type: text(文本) | password(密码,变圆点) | checkbox(复选框) | radio(单选)
        • html5新增属性:color & date & datetime & datetime-local & email & month & number & range & search & tel & time & url & week
    • datalist(html5) <input>的预定义选项列表, input的list属性引用datalist的id即可关联

      • 子元素option 待选项
    • label 标签,可以通过for属性绑定对应input的id
    • select 下拉列表

      • 子元素option 待选项
    • textarea 多行文本框, 用rows&cols控制大小
    • button 按钮,可通过改变type变换作用

      • 属性type: button(按钮) | sumbit(提交) | reset(重置)
    • fieldset 表单外框

      • 子元素legend 表单外框名称
  4. 如何理解HTML结构的语义化? 参考:理解HTML语义化

    • 含义:标签有特定的意义,即内容的结构化(内容语义化),选择合适的标签(代码语义化). 例如header指页面顶部栏,nav指导航栏.
    • 意义:

      • 代码结构优雅,便于阅读理解文档布局,便于开发合作维护
      • 爬虫解析方便
      • 用户体验 & 特殊设备解析(title、alt的信息注释)
    • 最佳实践:

      • 少用无意义的div&span, 无特定意义时尽量用p取代div
      • 纯样式标签用CSS替代
      • 表格标题用caption,表头用thead&th,主体用tbody&td,尾部用tfoot包围.
      • 每个input标签的对应的说明文本都要使用label标签,通过设置label的for=(input's id)即可关联
  5. 使用fixed的时候,在手机上查看是否会有问题,怎么解决?

    • 这部分个人经验不足,在网上找部分案例和解决方法

      • 1)Web移动端Fixed布局的解决方案

        • 问题图片:
        • 问题描述:设置好上下fixed,中间普通margin与上下隔开.下拉列表超过一页,点击输入框,在软键盘唤起之后页面底部的fixed元素将失效.
        • 问题原因:软键盘唤起之后,页面fixed元素将失效,当页面超过一屏并滚动时,失效的fixed元素也会随之滚动.
        • 问题解决:

          • 思路:如果当前层级页面不滚动,那么即便fixed元素失效也无法随页面滚动.
          • 修改:中间使用absolute与上下隔开,并且y轴设置可滚动(如果出现滚动卡顿,可以加入-webkit-overflow-scrolling:touch【非标准,用于SafariMobile】)
      • 2) 其他一些问题处理

        • 输入框focus后被软键盘遮挡,可以尝试input的scrollIntoView.
        • iOS可能有坑:软键盘遮挡输入框然后在输入一条文字后重写显示输入框
        • 最好将header和footer的touchmove事件禁止,防止出发浏览器全屏模式切换导致header和footer被工具栏遮蔽.
        • 滚动到页面上下边缘时继续拖拽会将view拖走导致页面"露底".可以做一些确认边缘的判断来阻止touchmove事件的发生.
  6. 常见的移动端登录页header有哪些实现方式?

    • 没找到类似的文字,总结一下我用到的

      • 简单通用flex,水平三分垂直居中

        • 特点:简单好用适合布局,但是删除元素会导致布局破坏
      • 左右float中间自动

        • 特点:使用简单,但是布局上个人不太喜欢用float
      • 左右absolute中间自动

        • 特点:暴力, 稳

四、探究input标签的placeholder样式

  • 结果如下

    /* Webkit浏览器支持(非标准) https://developer.mozilla.org/zh-CN/docs/Web/CSS/::-webkit-input-placeholder */
    .form-raw input::-webkit-input-placeholder {color: #aaa;
    }
    /* Chrome:57+已支持去前缀 https://www.chromestatus.com/feature/6715780926275584 */
    .form-raw input::placeholder {color: #aaa;
    }
    /* IE10+支持  https://developer.mozilla.org/zh-CN/docs/Web/CSS/:-ms-input-placeholder */
    .form-raw input:-ms-input-placeholder {color: #aaa;
    }
    /* Firefox 4-18 */
    .form-raw input:-moz-placeholder {color: #aaa;
    }
    /* 很奇怪, FireFox60实测不支持 */
    /* Firefox 19+(非标准) https://developer.mozilla.org/zh-CN/docs/Web/CSS/::-moz-placeholder*/
    .form-raw input::-moz-placeholder {color: #aaa;
    }
    /* 实验中特性 https://developer.mozilla.org/en-US/docs/Web/CSS/:placeholder-shown */
    .form-raw input:placeholder-shown {color: #aaa;/* border: 2px solid red; */   /* border有效并且只有在Firefox有效*/
    }

效果

  • Github
  • 线上展示

系列文章

  • 【CSS练习】IT修真院--练习1-九宫格
  • 【CSS练习】IT修真院--练习2-开发工具
  • 【CSS练习】IT修真院--练习3-简单界面
  • 【CSS练习】IT修真院--练习4-移动端界面
  • 【CSS练习】IT修真院--练习5-护工个人界面
  • 【CSS练习】IT修真院--练习6-护工列表界面

【CSS练习】IT修真院--练习4-移动端界面相关推荐

  1. 【CSS练习】IT修真院--练习6-护工列表界面

    任务六. 护工列表页 完成的事情 1.规划任务六 2.完成基本界面编写 计划的事情 [x] 限制最小宽度 [x] 使用雪碧图替换当前的多张图片引入 [x] 完成模拟下拉框编写 [x] 屏幕过窄时,列表 ...

  2. 【CSS练习】IT修真院--练习2-开发工具

    任务二. 认识开发工具 今天完成的事情 IDE & 编辑器对比 版本管理工具学习 Git基本操作 代码托管平台对比 服务器使用学习 明天计划的事情 分析任务三, 完成规划及部分开发 遇到的问题 ...

  3. 【CSS练习】IT修真院--练习1-九宫格

    九宫格--用html+css制作一个网页 一. 目标效果: 二. 效果描述 圆角橙色九宫格,自适应页面大小 三. 开发计划 1. 开发 [x] index.html建九个div.block [x] a ...

  4. 【CSS练习】IT修真院--练习3-简单界面

    任务三. 一个最简单的移动端页面 今天完成的事情 运用布局知识跟随设计图进行布局,完成简单Demo并继续学习优化. 让布局更好适应屏幕变化(使用了盒模型及百分比). 了解rem&em& ...

  5. 【修真院web小课堂】请描述 BFC(Block Formatting Context) 及其如何工作

    请描述 BFC(Block Formatting Context) 及其如何工作 小课堂[北京-WEB-A组] 分享人:要来点本子吗 大家好,我是IT修真院北京分院第35期的学员,一枚正直.纯洁.善良 ...

  6. 【修真院“善良”系列之十八】WEB程序员从零开始到就业的全资料V1.0——只看这一篇就够了!...

    前言 这是两年以来,修真院收集整理的学习资料顺序. 以CSS15个任务,JS15个任务为基础,分别依据要完成任务的不同的技能点,我们整理出来了这么一篇在学习的时候需要看到的资料. 这是Version ...

  7. 【修真院“善良”系列之十八】WEB程序员从零开始到就业的全资料V1.0——只看这一篇就够了!

    这里是修真院小课堂,本篇分析的主题是 [WEB程序员从零开始到就业的全资料V1.0] 前言 这是两年以来,修真院收集整理的学习资料顺序. 以CSS15个任务,JS15个任务为基础,分别依据要完成任务的 ...

  8. 【修真院web小课堂】ID和class有什么区别?

    大家好,我是IT修真院武汉分院web第16期的学员孟晨,一枚正直纯洁善良的web程序员 今天给大家分享一下,修真院官网js(职业)任务一,深度思考中的知识点--ID和class有什么区别? 1.背景介 ...

  9. 【修真院WEB小课堂】定时器有哪些用法?

    这里是修真院前端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析前端知识/技能,本篇分享的是: [定时器有哪些用 ...

最新文章

  1. sql语句中 时间数值转换为时间格式函数
  2. Pinpoint 插件开发
  3. 求助:一个物理专业的在做GPU的人
  4. DTCC 2020 | 阿里云叶正盛:数据库2025
  5. 第八周结对编程四则运算二
  6. Java中集合 练习 计算疯狂值
  7. 快速排序非递归算法c语言实现,数据结构与算法----3.5 非递归的快速排序方法
  8. 虚拟机危险!一个存在11年的缓冲区溢出漏洞--毒液
  9. delphi 去掉字符串中所有的标点符号_[话俾你知]Python使用正则处理字符串技巧(分割、替换)...
  10. DOS命令taskkill
  11. python大数据和java大数据的区别-Java、Python和大数据,哪个发展前景最好?
  12. php webqq登陆,Smart QQ——腾讯新一代网页版 WebQQ,更简洁纯粹的实用在线聊天工具!...
  13. ss-panel安装笔记
  14. 设置html字体大小 js,js如何改变文章的字体大小
  15. 【UE4】UE4框选
  16. 计算机开机键鼠无法识别,外设门诊:鼠标开机不认 需重插拨怎么办
  17. 明基发布T系列智能商务投影机
  18. 计算机收藏夹位于哪个磁盘,电脑浏览器收藏夹保存在哪里
  19. 用“真快乐”切入社交电商后,国美做“家装”能否多点开花?
  20. 【framework】IMS启动流程

热门文章

  1. 解决傲游浏览器没有兼容模式
  2. 域、代理服务、防病毒服务器、WEB/FTP、打印服务器、路由交换、文件服务器
  3. 在Tomcat上挂载预下载文件的方法
  4. eureka集群 ha_Eureka
  5. 离线情报分析工具CaseFile
  6. Visual Studio找不到iOS模拟器
  7. dSploitzANTI渗透教程之HTTP服务重定向地址
  8. OUYA设备的购买和安装
  9. oracle中怎么用累计,oracle实现累加,累计百分比计算
  10. matlab gui优化,matlabgui优化程序