文本垂直居中

对于行内元素,height会自己主动收缩到包裹住文本的高度,所以不存在这个问题。

可是对于block和inline-block等盒子元素。假设设置了height属性,则文本默认会在上方显示。

假设希望文本在垂直方向上居中,能够设置line-height属性等于height属性。或者大于height属性

  1. <div>
  2. hello world
  3. </div>
  1. div {
  2. height: 200px;
  3. line-height: 200px;
  4. }

文本水平居中。图标分列左右两側

效果是左側一个小箭头,右側一个小箭头,日期显示在中间

  1. <div id="wrapper">
  2. <span><</span>
  3. <span>2014年5月11日</span>
  4. <span>></span>
  5. </div>
  1. #wrapper{
  2. text-align: center;
  3. position: relative;
  4. width: 200px;
  5. }
  6.  
  7. #wrapper > span:first-child{
  8. float: left;
  9. }
  10.  
  11. #wrapper > span:last-child{
  12. float: right;
  13. }

假设给2个float元素设置width(比方为了增大点击区域的目的),则width应该设置成一样,否则会破坏日期水平居中的效果

为float元素设置width

一般来说。行内元素(如span)。会自己主动收缩以适应文本宽度,为其设置width属性是无效的。可是当span元素被float了之后。就能够为其设置width属性了

盒子有多大

对于块元素,如block和inline-block。假设不设置其width。则会自己主动扩展到父容器的宽度。此时设置它的padding和border,不会改变盒子的大小(还是和父容器一样宽),可是会缩小content的宽度

  1. <div id="parent">
  2. <div id="son">abc</div>
  3. </div>
  1. #parent {
  2. widht: 200px;
  3. }
  4.  
  5. #son {
  6. padding: 1px;
  7. border: 1px solid black;
  8. }

son的width自己主动扩展到200px。然后因为padding和border占了4px,内容区域就是196px

假设设置了son的width。实际上设置的是content的width。加上border和padding后,实际的宽度会超过父容器

  1. #son {
  2. width: 200px;
  3. padding: 1px;
  4. border: 1px solid black;
  5. }

content的宽度是200px。加上border和padding的4px。最后盒子的宽度是204px

可是,假设设置box-sizing为border-box。则设置的width就变成了整个盒子的宽度,此时再设置border和padding。又会缩小content的宽度了

  1. #son {
  2. box-sizing: border-box;
  3. width: 200px;
  4. padding: 1px;
  5. border: 1px solid black;
  6. }

实践中,在全局设置box-sizing为border-box挺不错的。这样设置padding和border时,就不用操心造成盒子宽度的变化了

水平排放li

  1. <ul>
  2. <li>1</li>
  3. <li>2</li>
  4. <li>3</li>
  5. <li>4</li>
  6. <li>5</li>
  7. </ul>
  1. ul{
  2. font-size: 0;
  3. }
  4.  
  5. li{
  6. font-size: 1rem;
  7. display: inline-block;
  8. width: 20%;
  9. }

这里的一个技巧是设置ul的font-size为0。由于</li>和<li>之间有空隙,在大部分浏览器上都会造成1px的间隙。造成一行无法容纳5个li,于是最后一个li元素就会掉到下一行。因此把ul的font-size设置成0,在li中再恢复,能够避免此1px问题。用inline-block方式实现水平布局,大多都会有这个问题

N列固定比例水平布局

有点类似上面的li平铺

  1. <div>
  2. <nav></nav>
  3. <div></div>
  4. <aside></aside>
  5. </div>
  1. div {
  2. font-size: 0;
  3. }
  4.  
  5. div > * {
  6. display: inline-block;
  7. font-size: 1rem;
  8. vertical-align: top;
  9. }
  10.  
  11. div > nav {
  12. width: 30%;
  13. }
  14.  
  15. div > div {
  16. width: 50%;
  17. }
  18.  
  19. div > aside {
  20. width: 20%;
  21. }

基本上和li平铺的模式全然一样,差别是设置全部的子元素vertical-align: top。

否则当各子元素的高度不一致时。看起来似乎没有在同一行。其有用dev tools能够看出来,3个子元素还是在同一行,仅仅是在垂直方向上没有对齐。设置vertical-align能够解决此问题

某些列宽度固定,其它列宽度比例固定的水平布局

  1. <div>
  2. <nav></nav>
  3. <div></div>
  4. <aside></aside>
  5. </div>
  1. div {
  2. display: -webkit-box;
  3. }
  4.  
  5. div > nav {
  6. width: 200px;
  7. }
  8.  
  9. div > div {
  10. -webkit-box-flex: 1;
  11. }
  12.  
  13. div > aside {
  14. -webkit-box-flex: 2;
  15. }

长处是不会出现1px问题。也不须要设置子元素为inline-block。非常方便。另外。设置display: box之后,子元素会自己主动变成等高。

这在某些场景下非常方便,可是也不适用于另外一些场景。最后display: box,在老的浏览器上支持不好,所以这样的方式没有老技巧那么通用。可是随着浏览器日趋标准,我认为慢慢就不是问题了

css笔记(二)——几种经常使用的模式的更多相关文章

  1. CSS 笔记二(Text/Fonts/Links/Lists)

    CSS Text 1> Text Color used to set the color of the text 2> Text Alignment used to set the hor ...

  2. 二十三种设计模式之原型模式的C#实现

    原型模式就是通过拷贝快速创建一个新的对象 本例UML如图 ColorBase [Serializable] public abstract class ColorBase { public int R ...

  3. amazeui学习笔记二(进阶开发3)--HTML/CSS规范Rules

    amazeui学习笔记二(进阶开发3)--HTML/CSS规范Rules 一.总结 1.am:以 am 为命名空间 2.模块状态: {命名空间}-{模块名}-{状态描述} 3.子模块: {命名空间}- ...

  4. Webpack4 学习笔记二 CSS模块转换

    前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 webpack 打包css模块 webpack是js模块打包器, 如果在入口文件引入css文件或其它的less.sass等文件,需要 ...

  5. jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}

    笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...

  6. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  7. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

  8. webpy使用笔记(二) session/sessionid的使用

    webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...

  9. HTML5样式和列表、CSS链接的四种状态

    一.HTML5样式 1.标签: <style>:样式定义: <link>:资源引用: 2.属性: type="text/css":引入文档类型: rel=& ...

  10. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

随机推荐

  1. script指定src后内部代码无效

    /********** 无效 ***************/ <script type="text/javascript" src=""> fun ...

  2. atitit.js&#160;与c#&#160;java交互html5化的原理与总结.doc

    atitit.js 与c# java交互html5化的原理与总结.doc 1. 实现html5化界面的要解决的策略 1 1.1. Js交互 1 1.2. 动态參数个数 1 1.3. 事件监听 2 2. ...

  3. 79.express里面的app.configure作用

    以下摘自 express 3.0 的 文档 app.configure([env], callback) Conditionally invoke callback when env matches ...

  4. Java 开发 2.0: 现实世界中的 Redis

    原文地址:http://www.ibm.com/developerworks/cn/java/j-javadev2-22/ 之前,我已在本系列中讨论过 NoSQL 的概念,也介绍了一些与 Java 平 ...

  5. 路径+DataRow+SqlPara防止sql注入

    绝对路径:是从盘符开始的路径,形如C:\windows\system32\cmd.exe相对路径:是从当前路径开始的路径,假如当前路径为C:\windows要描述上述路径,只需输入system32\c ...

  6. SQL try catch处理

    ALTER PROC usp_AccountTransaction @AccountNum INT, @Amount DECIMAL AS BEGIN BEGIN TRY --Start the Tr ...

  7. 玲珑学院 1010 - Alarm

    1010 - Alarm Time Limit:1s Memory Limit:128MByte DESCRIPTION Given a number sequence [3,7,22,45,116, ...

  8. C/C++(C++类型增强)

    C++类型增强 类型检查更严格 把一个const类型的指针赋给非const类型的指针.c语言中可以通的过,但是在c++中则编不过去 const int a = 10; a = 100;//const修 ...

  9. WPF中Image控件的Source属性

    原文:WPF中Image控件的Source属性 imgBook 是一个Image控件,在后台代码中我想给它指定Source的属性.我先如下方式进行: Uri uri = new Uri(strImag ...

  10. 【Henu ACM Round#17 C】Kitahara Haruki's Gift

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 判断sum/2这个价值能不能得到就可以了. 则就是一个01背包模型了. 判断某个价值能否得到. f[j]表示价值j能否得到. f[0 ...