CSS布局注意问题

作者: Mr_LvHeng | 来源:发表于2019-10-30 14:32 被阅读0次

CSS布局笔记,可能有些乱,以后再补充吧~

margin合并影响布局

兄弟元素之间

在默认情况下两个 div 之间的 margin 属性会重合,例如:

代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
    main {
      border: 1px solid blue;
    }
    div {
        border: 1px solid red;
        height: 100px;
        margin: 10px;
    }
</style>
</head>
<body>
    <main>
      <div></div>
      <div></div>
      <div></div> 
    </main>
</body>
</html>  

效果图:

3.jpg

代码预览地址:http://js.jirengu.com/lehehesoge/1/edit

但在其中插入一个有边框的 div 时,margin 又会被撑开,例如:

代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
    .demo {
        border: 1px solid red;
        height: 100px;
        margin: 10px;
    }
</style>
</head>
<body>
    <div class="demo"></div>
    <div style="border: 1px solid #000"></div>
    <div class="demo"></div>
    <div class="demo"></div>
</body>
</html>

效果图:

2.jpg

代码预览地址:http://js.jirengu.com/giqanalumi/10/edit?html,output

即使插入的 div 边框为 0.1px 其他div的margin也会受到影响,会影响的属性还有: display: table; display: flex

父子元素之间

当给子元素一个 margin-top 时,父元素也会被挤下去

代码

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
    main {
      border: 1px solid blue;
      padding: 5px;
    }
    .child {
      height: 100px;
      width: 100px;
      background-color: #ff0000;
      margin-top: 100px; 
    }
    .parent {
      background-color: #000;
    }
  </style>
</head>
<body>
    <main>
      <div class="parent">
        <div class="child"></div>
      </div>
    </main>
</body>
</html>

图示:

4.jpg

代码预览地址:http://js.jirengu.com/cimunikafi/1/edit

但是当给父元素添加了一个border属性时,它又会撑开父元素

代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
    main {
      border: 1px solid blue;
      padding: 5px;
    }
    .child {
      height: 100px;
      width: 100px;
      background-color: #ff0000;
      margin-top: 100px; 
    }
    .parent {
      background-color: #000;
      border-top: 5px solid green;
    }
  </style>
</head>
<body>
    <main>
      <div class="parent">
        <div class="child"></div>
      </div>
    </main>
</body>
</html>

图示

4.jpg

代码预览链接:http://js.jirengu.com/cimunikafi/2/edit

除了加 border 属性,会影响的属性还有: padding display: inline-block; display: flex; display: table; overflow: hidden;

如果在有 margin 属性的子元素上添加一个内联元素,那么 margin 也不会影响父元素布局

li小圆点 受display影响

代码

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
      ul {
          border: 1px solid #000;
      }
    li {
      display: block;
    }
  </style>
</head>
<body>
    <ul>
      <li>选项1</li>
      <li>选项2</li>
      <li>选项3</li>
    </ul> 
</body>
</html>

图:

9.jpg

代码地址预览:http://js.jirengu.com/kiciminufa/1/edit

原因:由于默认的 li 的 display 属性为: list-item 小圆点只会显示在有这个属性的元素上

position 会影响 dispaly属性

代码

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
  
    .parent {
      background: yellow;
      height: 100px;
      position: relative;
    }
    .child {
      display: inline;
      border: 1px solid red;
      position: absolute;
      bottom: 0;
      right: 0;
    }
  
  </style>
</head>
<body>
  <div class="parent">
    <div class="child">内联样式</div>
  </div>
</body>
</html>

此时打开控制台选中 child 元素 在控制台右侧选择 Computed 一栏 搜索 display ,就可以看到实际上child 的 display 属性变成了 block ,如图:

8.jpg

代码预览链接:http://js.jirengu.com/yucujokate/1/edit

注意:只有当 display 的属性为 inline 或者 inline-block 时添加 position 属性才会被变为 block

position: fixed 会受 transform 影响

当给有 position: fixed 属性的父元素或祖先元素一个 transform 属性时 position: fixed 就不会相对屏幕定位,而是相对那个父元素或祖先元素定位。

代码

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
  
    main {
      width: 200px;
      height: 200px;
      border: 1px solid blue;
      transform: translate(10px, 50px);
    }
    .demo {
      width: 100px;
      height: 100px;
      background-color: red;
      position: fixed;
      right: 5px;
      top:50px;
    }
    
  </style>
</head>
<body>
  <main>
    <div class="demo"></div>
  </main>
</body>
</html>

图示:

image

代码预览链接:http://js.jirengu.com/zesiyopemi/2/edit

float 元素会影响周围的 inline 元素

代码

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
  
    .parent {
      background: blue;
      height: 100px;
    }
    .float {
      background: rgba(255, 0, 0, 0.5);
      width: 100px;
      height: 60px;
      float: left;
    }
    .child {
      width: 300px;
      height: 50px;
      background: white;
    }
  
  </style>
</head>
<body>
  <div class="parent">
    <div class="float">浮动元素</div>
    <div class="child">文字元素</div>
  </div>
</body>
</html>

这时 float 元素就会影响兄弟元素里的 inline 元素,如图:

10.jpg

代码预览链接:http://js.jirengu.com/bojacipogu/10/edit

拓展:浮动最初的作用

浮动开始只是为了让图文混排出现的,当在一段文字中插入一个图片,文字默认是与图片底线对齐的。很不美观,于是就出现了 float: left 等属性,可以显示图片又使文字排版美观

相关文章

  • CSS布局注意问题

    CSS布局笔记,可能有些乱,以后再补充吧~ margin合并影响布局 兄弟元素之间 在默认情况下两个 div 之间...

  • 圣杯布局与双飞翼布局

    圣杯布局 HTML css 注意点 双飞翼布局 HTML css 注意点

  • 【react-native】小结-2

    CSS布局 deviceWidth && deviceHeight Dimensions 注意: numb...

  • 页面布局居中问题

    css页面布局水平垂直居中问题 居中问题

  • CSS经典布局

    CSS经典布局 本文主要对一些常见的CSS布局问题进行总结,涉及三栏布局、负margin、清除浮动、居中布局、Fl...

  • css布局问题

    一.水平居中 子元素为行内元素还是块状元素,宽度一定还是宽度未定,采取的布局方案不同。 子元素为 行内元素:对父元...

  • CSS布局问题

    1.居中布局: 水平居中:子元素于父元素水平居中且其(子元素与父元素)宽度均可变。 inline-block+te...

  • CSS 利用table实现五种常用布局

    布局一: 效果: 代码: html: 注意:div中要有内容,不然显示不出来 css: 布局二: 效果: 代码: ...

  • 文章收藏

    CSS布局 CSS布局方案整理

  • css

    css基础css选择器css常见样式1css常见样式2CSS布局上CSS布局下flex布局塔防小游戏flex布局青...

网友评论

    本文标题:CSS布局注意问题

    本文链接:https://www.haomeiwen.com/subject/phvovctx.html