iOS开发如何学习前端(2)

上一篇成果如下。

实现的效果如下。

  1. 实现了一个横放的<ul>,也既iOS中的UITableView.
  2. 实现了当鼠标移动到列表中的某一个<li>,也既iOS中的UITableViewCell,的时候,这个li标签的背景色会变成黑色。

页面很简单。但是仍存在一个小问题。眼尖的同学可以发现。当鼠标悬浮在li上的时候,背景色是变了没错,但是当背景色变的时候,我们发现,其实黑色的li的bottom是超过父控件的,也就是说,我们li的下边没和ul的下边对齐。
这是为什么呢?

我去check了一下我们的css文件。关于<li><a>的属性是这样的。

li {
float: left;
height: 44px;
width: auto;
} li a {
display: block;
text-decoration: none;
color: white;
text-align: center;
padding: 14px 16px
}

这里出问题的地方在于,我用了一个不是很优雅的方法来实现了text的居中。

我是怎么实现的呢?
这里,需要先解释一下在css中,padding的含义。先看一张iOS中的图。

这是一个UILabel,我给他设置了左边距和上边距,熟悉iOS的同学都知道,这时候,这个label的长宽会自动和内容的长宽一致。
那么如果把css中的padding概念套在iOS中,那么可以说,在这种情况下,padding应该是0.

好,这时候我们把约束条件增加两个,我把这个label的宽和高都设置成固定值。

现在这个label变成了什么样子呢?
他变成了这个样子

这个时候,UILabel的宽高远大于text的宽高。那么,这个时候,padding的值就不是0了。
是多少呢?
UIFont有个属性是pointSize,那么padding-top的值就是(UILabel的高 - 内容的高)/2
padding-left的值就是
(UILabel的宽 - 内容的宽)/2
所以如果想要文字居中显示的话,就需要padding-top和padding-bottom相同。

但是代码中,我们的padding-top和padding-bottom已经相同了,为什么鼠标悬浮状态的时候感觉<a>大了呢?
实际上,我用chrome的Inspect查看了一下。发现

实际上<a>的高度是46,超过了li的高度,这就是为什么hover状态下,当背景色变的时候,<a>的bottom超过了li的bottom.

直觉告诉我,这种做法不太好。为什么,因为设置padding来实现垂直居中需要耗费大量的精力,还得你自己算字体大小和padding的关系。挺讨厌的。
于是我谷歌了一下。

点击去之后看到了这种做法。

原理就是把line-height这个属性和文字的容器height设置成大小一致即可。

后来我发现了一个问题,就是把line-height设置成百分比的形式是无效的。比如
line-height: 100%.
为什么呢?因为line-height只能设置成px形式的值才意味着文字内容和容器内容高度一致,如果设置成百分比形式,那么会让css以为设置的是字体的大小。

然后我们把css改成这样。

li a {
display: block;
text-decoration: none;
color: white;
text-align: center;
line-height: 44px;
padding-left: 16px;
padding-right: 16px;
}

效果如下。

搞定了。

进入正题,弹出菜单

今天想要实现的效果如下。

这个实现原理,类似于iOS中的把一个父View的其中一个子View的hidden设置为true。然后添加一个事件,比如点击之后,把这个view的hidden设置为false。那么这个子view就显示出来了。
那么在css中对应的属性就是display了。

先看看html。

<html>
<head>
<link rel="stylesheet" href="dropdown.css" type="text/css">
</head>
<body>
<div class="dropBtn">
DropDown
<div class="dropdown">
<ul class="dropdownul">
<li><a href="#">Link </a></li>
<li><a href="#">Link </a></li>
<li><a href="#">Link </a></li>
</ul>
</div>
</div>
</body>
</html>

那么class为dropBtn的就是我们的父view,对应的子view是class为dropdown的div。里面还内嵌一个列表ul,我们现在需要做的就是先把div.dropdown的display属性设置为none.

div.dropBtn div.dropdown {
display: none;
}

然后,效果是当鼠标滑动到div.dropBtn上的时候,列表显示。
那么就可以这么写。

div.dropBtn:hover div.dropdown {
display: inline;
}

搞定。

完整的css文件如下。

* {
margin: 0px;
padding: 0px;
}
div.dropBtn {
width: 100px;
background: green;
}
div.dropBtn div.dropdown {
display: none;
} div.dropBtn:hover div.dropdown {
display: inline;
}
div.dropdown {
position: relative;
}
ul.dropdownul {

    width: 100%;
} li {
list-style: none;
display: block;
background: yellow;
height: 40px;
} li:hover {
background: red;
} li a {
display: block;
text-decoration: none;
text-align: center;
}
 

解释一下.

  • 第一段就是把所有选择器的margin和padding都设置为0,防止出现一些乱七八糟的问题。
  • 第二段设置最外层的div的宽度
  • 第三段,先把里面的div.dropdown隐藏
  • div.dropBtn:hover div.dropdown 这句就是检测到鼠标移动到最外层div的时候显示里面的div

完毕。

 

iOS开发如何学习前端(2)的更多相关文章

  1. iOS开发如何学习前端(1)

    iOS开发如何学习前端(1) 我为何学前端?因为无聊. 概念 前端大概三大块. HTML CSS JavaScript 基本上每个概念在iOS中都有对应的.HTML请想象成只能拉Autolayout或 ...

  2. iOS开发如何学习前端

    原文链接 前端大概三大块. HTML CSS JavaScript 基本上每个概念在iOS中都有对应的.HTML请想象成只能拉Autolayout或者设置Frame的ViewController.好比 ...

  3. 关于iOS开发的学习

    关于iOS开发的学习,打个比方就像把汽车分解:    最底层的原料有塑料,钢铁    再用这些底层的东西造出来发动机,座椅    最后再加上写螺丝,胶水等,把汽车就拼起来了 iOS基本都是英文的资料, ...

  4. IOS开发---菜鸟学习之路--(二十二)-近期感想以及我的IOS学习之路

    在不知不觉当中已经写了21篇内容 其实一开始是没有想些什么东西的 只是买了Air后 感觉用着挺舒服的,每天可以躺在床上,就一台笔记本,不用网线,不用电源,不用鼠标,不用键盘,干干脆脆的就一台笔记本. ...

  5. IOS开发---菜鸟学习之路--(一)

    PS(废话): 看了那么多的博客文章,发现大部分人都一直在强调写技术博客的重要性,索性自己也耐着性子写写看吧. 写博客的重要性之类的说明,我就不做复制黏贴的工作了.因为自己没有写过多少,所也不清楚是不 ...

  6. iOS开发架构学习记录

    闲着没事看了一些iOS开发架构的视频,简单的介绍了几个常用的架构设计,现将它记录如下,以后有时间再专门写这方面的内容,大家可以看看,感兴趣的就进一步学习. 一.架构基础 1.架构设计的目的 进一步解耦 ...

  7. IOS开发---菜鸟学习之路--(二十三)-直接利用键值对的方式来处理数据的感想

    首先声明,本文纯粹只是做为本人个人新手的理解.文中的想法我知道肯定有很多地方是错的. 但是这就是我作为一个新人的使用方法,对于大牛非常欢迎指导,对于喷子请绕道而行. 由于这是早上跟我学长讨论数据处理时 ...

  8. IOS开发---菜鸟学习之路--(十七)-利用UITableView实现个人信息界面

    首先来看下我们要实现的效果 需要实现这样的效果 然后我们开始动手吧. 首先选择添加一个新的ViewController 然后打开XIB文件,添加一UITableView 并将样式设置为分组 同时将按住 ...

  9. iOS开发RunLoop学习:一:RunLoop简单介绍

    一:RunLoop的简单介绍 #import "ViewController.h" @interface ViewController () @end @implementatio ...

随机推荐

  1. Heroku第三方服务接入指南(二)

    上文我们讲了第三方服务.Heroku.用户三者的关系,这一篇进入正题,了解第三方厂商(下文简称厂商)怎样为Heroku开发服务.这里仅仅做简介,了解heroku大致是怎么做的.假设你的平台.希望接入第 ...

  2. Delphi 7调用C语言编写的DLL

    DLL一定是要C语言导出的符号,也就是extern “C”. 当然,我们都知道DLL调用分为动态调用和静态调用. 动态调用的一般思想为,先LoadLibrary那个你想加载的DLL,然后通过GetPr ...

  3. 在容器服务kubernetes上配置https

    当前容器服务Kubernetes集群支持多种应用访问的形式,最常见形式如SLB:Port,NodeIP:NodePort和域名访问等.但是Kubernetes集群默认不支持HTTPS访问,如果用户希望 ...

  4. LNMP分离式部署实例[转]

    很多人在练习部署LNMP环境的时候,大都数是部署在同一个虚拟机上面的.但是实际工作中,我们一般都是分离部署的. 今天我就用3台虚拟机,部署下LNMP环境.以供参考! 网络拓扑图: 首先准备3台虚拟机: ...

  5. 【转】Braid - 一个发人深思的游戏

    Braid - 一个发人深思的游戏 我已经很久很久没有打游戏了(如果不算 Angry Birds 之类用来打发时间的游戏的话).我的最后一个真正意义上的游戏机,是 PlayStation 1.在那上面 ...

  6. Android Framework中的线程Thread及它的threadLoop方法

    当初跟踪Camera的代码中的时候一直追到了HAL层,而在Framework中的代码看见了许很多多的Thread.它们普遍的特点就是有一个threadLoop方法.依照字面的意思应该是这个线程能够循环 ...

  7. elasticsearch 小试牛刀

  8. Knockout: radio选项切换引发click事件的一点总结

    1.场景:如下图,当选择定期存款时,输入框右边出现红色的必输项星号,当选择活期存款时,不再出现该星号. 2.思路一:不使用knockout,直接用click事件,就可以实现这个需求,代码如下: < ...

  9. ganglia安装 by frank

    作者是frank. 1.安装epelrpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm2. ...

  10. Centos7源代码安装freeswitch和启动freeswitch

    centos7下安装freeswitch版本:1.6. 1.下载源代码: 进入目录 cd /usr/local/src 克隆原代码 git clone -b v1.6 https://freeswit ...