css深入浅出之宽度与高度

文档流:文档内元素的流动方向

  • 内联元素从左往右
  • 块级元素从上往下

block,inline,inline-block 元素的区别:

block 元素独占一行,宽度占满父元素宽度。可以设置 width, height, padding, margin 属性。如 div p ul 等。 block 元素可以包含其他 block 元素和 inline 元素,比较特别的是 <p> 只能包含 inline 元素。
inline 元素不换行,宽度由其内容决定。设置 width, height 无效。如 span em strong 等。 设置水平方向 padding(padding-left, padding-right) 和 margin(margin-left, margin-right) 有效, 垂直方向的 padding(padding-top, padding-bottom),margin(margin-top, margin-bottom) 无效。
inline-block 元素不换行,设置 width, height, padding, margin 属性有效。 由于 inline-block 元素会产生新的 BFC,因此可以包含浮动。

块级元素与行内元素

div高度

div高度由其内部文档流的高度总和决定

  1. 仅一行 内联元素
<style>
   div{
     border:1px solid red;
     font-size:20px;
   }
</style>
<div>
  1
</div>

设置字体高度为20px,使用默认字体时,div高度为28.67


设置font-family:Arial; div高度为24.67

设置line-height:20px;font-size:60px; div高度为22

当仅一行时,div高度由行高确定,与字体大小无关(不同字体行高不同,字体建议行高由设计师确定)

  1. 多行
<div>
  <span>1</span><br>
  <span>2</span><br>
  <span>3</span>
</div> 

使用默认字体:


设置font-family:Arial;

当多行时,div高度由多行行高相加

  • inline-block

既呈现 inline 特性(不占据一整行,宽度由内容宽度决定)
又呈现 block 特性 (可设置宽高,内外边距)
缝隙问题(inline-block 之间有空格、Tab、换行符等会产生缝隙)

<div class="box">
  <span class="inner">welcome,welcome,welcome</span>
  <span class="inner">welcome,welcome,welcome</span>
  <span class="inner">welcome,welcome,welcome</span>
</div>
<style>
  .box{
    border:1px solid green;
    text-align:center;
  }
  .inner{
    display:inline-block;
    border:1px solid red;
    width:220px;
    padding:10px;
    margin-bottom:10px;
  }
</style>

注:通过给span标签设置inline-block属性,发现既呈现 inline 特性、又呈现 block 特性
不占据整行又可设置width、height、padding、margin

消除缝隙

  1. 两标签并排
<div class="box">
  <span class="inner">welcome,welcome,welcome</span><span class="inner">welcome,welcome,welcome</span>
  <span class="inner">welcome,welcome,welcome</span>
</div>
  1. 使用font-size:0(父元素设置0,子元素自定义)
.box{
  border:1px solid green;
  text-align:center;
  font-size:0;
}
.inner{
  display:inline-block;
  border:1px solid red;
  width:220px;
  padding:10px;
  margin-bottom:10px;
  font-size:16px;
}
  1. 使用float:left
<style>
    .inner{
      float:left;
    }
    .clearfix::after{
      content:'';
      display:block;
      clear:both;
    }
</style>
<div class="box clearfix">
清除浮动

未清除浮动

如果用了浮动,其父元素一般(最好)需要清除浮动。若未清除浮动,会出现浮动溢出现象

  • word-break

<style>
  div{
    border:1px solid red;
    //word-break:break-all;
  }
</style>
<div>
  aa  bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
  cc
  dd
</div>

先要明确一点,不加word-break的时候,就是浏览器默认的时候,如果有一个单词很长,导致一行中剩下的空间已经放不下它时,则浏览器会把这个单词挪到下一行去:



在没有单词内断句的情况,单词太长会溢出了包裹它的容器

使用break-all强制断句


word-break与word-wrap区别

  • Test:实现文字两端对齐

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <style>
  div{
    border: 1px solid red;
    font-size: 20px;
  }
    span{
      border: 1px solid green;
      display: inline-block;
      width: 5em;
      text-align: justify;
      line-height: 20px;
      overflow: hidden;
      height: 20px;
    }
    span::after{
      content: '';
      display: inline-block;
      width: 100%;
      border: 1px solid blue;
    }
  </style>
</head>
<body>
<div>
  <span>姓名</span> <br>
  <span>联系方式</span>
</div>
</body>
</html>
效果
  • 文字垂直居中

少用height(会将高度写死,一旦文字变动会出现bug)
使用 line-height + padding 实现给定行高!!!!!

实现行高为130px
line-height + padding

Tips: 四行每行行高为30px, 30*4 = 120 + 5*2 = 130


height

溢出

line-height + padding

通过新增文字,对比发现,若高度固定,新增文字会溢出;使用padding会自适应,不会出现溢出现象

  • 文字溢出

1. 单行文字溢出
初始状态

文字不换行
 white-space:nowrap;    
超出部分隐藏
 overflow:hidden;    
...显示
text-overflow:ellipsis;
 //完整css代码
  <style>
  div{
    border:1px solid red;
    white-space:nowrap;      
    overflow:hidden;        
    text-overflow:ellipsis;
  }
  </style>
2. 多行溢出
google


效果
 //完整代码
 <style>
    div{
      border:1px solid red;
      display: -webkit-box;
      -webkit-line-clamp: 3;
      -webkit-box-orient: vertical;  
    
    }
  </style>

-webkit-line-clamp: 3可控制显示行数
超出部分若不想显示,使用 overflow:hidden隐藏即可

3. margin合并
<div class="dad">
  <div class="son">
    text
  </div>
</div>
<style>
    .dad{
      outline:1px solid red;

    }
    .son{
      border:1px solid green;
      padding:10px;
      margin:10px;
    }
</style>

设置子元素margin高度,发现margin-top、margin-bottom未生效。
因为父元素无遮挡,造成子元素外边距margin与父元素合并。

son

解决办法:

  1. 设置border
    .dad{
      outline:1px solid green;
      border-top:10px solid red;
      border-bottom:10px solid black;
    }

通过对父元素设置上下border实现对子元素的遮挡,margin正常显示


border
  1. 设置padding
    .dad{
       outline:1px solid red; 
       padding:1px;
    }
padding
  1. overflow:hidden
    .dad{
      outline:1px solid red; 
      overflow:hidden;
    }
overflow

不到万不得已,尽量不用overflow:hidden

  • Test:实现div水平垂直居中(不定宽高)

vh/vw
vh: 相对于视窗的高度, 视窗被均分为100单位的vh;
vw: 相对于视窗的宽度, 视窗被均分为100单位的vw;

  <style>
    body{
      margin: 0;
    }
    .son{
      border: 5px solid red;
      padding:10px;
    }
    .dad{
      height:100vh;
      display: flex;
      justify-content: center;
      align-items: center;
    }
  </style>
<div class=dad>
  <div class=son>
    block block block
  </div>
</div>
  • Test:实现一比一的 div

  <style>
    div{
      padding-top:100%;
      border:1px solid red;
    }
  </style>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容