HTML/CSS 基础篇二

BFC

官方解释:它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。当涉及到可视化布局的时候,BFC提供了一个环境,HTML元素在这个环境中按照一定规则进行布局。

目的:形成一个完整独立的空间,让空间中的子元素不会影响到外部的布局。(外面的元素不会影响到里面的元素,里面的元素也不会影响到外面的元素。)

创建BFC:

  • float:left/right
  • position:absolute/fixed
  • block:line-block/flex/table-cell
  • overflow:auto/hidden/scroll

解决问题:
浮动元素高度坍塌问题
清除浮动

布局自适应问题
一般为左侧固定,右侧自适应。
利用块级元素尽可能的沾满一行的特性。右边的宽度可以随着页面宽度的变化而变化。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>BFC</title>
  <style>
    .out {
      height: 300px;
    }
    .left {
      height: 100%;
      width: 200px;
      background-color: #c5d2ff;
      float: left;
    }
    .right {
      height: 100%;
      background-color: #ff8784;
      overflow: hidden;
    }
  </style>
</head>
<body>
  <div class="out">
    <div class="left"></div>
    <div class="right">lyz</div>
  </div>
</body>
</html>

其他方法实现自适应

  • 左侧浮动 右侧margin-left
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>左侧浮动 右侧margin-left</title>
  <style>
    .out {
      height: 300px;
    }
    .left {
      height: 100%;
      float: left;
      width: 200px;
      background-color: #ff8784;
    }
    .right {
      height: 100%;
      margin-left: 200px;
      background-color: #859cff;
    }
  </style>
</head>
<body>
  <div class="out">
    <div class="left"></div>
    <div class="right">lyz</div>
  </div>
</body>
</html>
  • 左侧绝对定位 右侧margin-left
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>左侧绝对定位 右侧margin-left</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }
    .out {
      height: 300px;
    }
    .left {
      height: 300px;
      width: 200px;
      background-color: #ff8784;

      position: absolute;
      top: 0;
      left: 0;
      bottom: 0;
    }
    .right {
      height: 100%;
      margin-left: 200px;
      background-color: #859cff;
    }
  </style>
</head>
<body>
  <div class="out">
    <div class="left"></div>
    <div class="right">lyz</div>
  </div>
</body>
</html>
  • 右侧顶线和右边为0 left为200
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>右侧元素设置顶线和右侧位置为0 左线位置为200px</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }
    .out {
      height: 300px;
    }
    .left {
      height: 100%;
      width: 200px;
      background-color: #ff8784;
    }
    .right {
      /*width: 100%;*/
      height: 300px;
      background-color: #859cff;
      position: absolute;
      right: 0;
      top: 0;
      left: 200px;
    }
  </style>
</head>
<body>
  <div class="out">
    <div class="left"></div>
    <div class="right">lyz</div>
  </div>
</body>
</html>
  • flex
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Flex</title>
  <style>
    .out {
      height: 300px;
      display: flex;
    }
    .left {
      height: 100%;
      width: 200px;
      background-color: #c5d2ff;
    }
    .right {
      flex: 1;
      height: 100%;
      background-color: #ff8784;
    }
  </style>
</head>
<body>
  <div class="out">
    <div class="left"></div>
    <div class="right">lyz</div>
  </div>
</body>
</html>

解决外边距(margin)垂直方向重合的问题
兄弟元素在垂直外边距取得是绝对值最大值而不是和
通过触发BFC来防止他们之间的相互影响。
例如:为其中一个元素外面包裹父元素,设置overflow:hidden

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .fa {
      overflow: hidden;
    }
    .bfc {
      width: 100px;
      height: 100px;
      background-color: #ff8784;
    }
    .bfc:nth-child(1) {
      margin-bottom: 10px;
    }
    .bfc:nth-child(2) {
      margin-top: 10px;
    }
  </style>
</head>
<body>
  <div class="fa">
    <div class="bfc"></div>
  </div>
  <div class="bfc"></div>
</body>
</html>

另一种:用padding代替margin,简单易懂但是本身就需要设计padding,就不能使用来。

DIV水平垂直居中

  • 定位
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .two {
      width: 300px;
      height: 300px;
      background-color: #ff8784;
		
	  /*必须有盒子的父元素的宽高 但是无需考虑*/
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      margin: auto;
    }
  </style>
</head>
<body>
  <div class="one">
    <div class="two"></div>
  </div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .two {
      width: 300px;
      height: 300px;
      background-color: #ff8784;

      position: absolute;
      left: 50%;
      top: 50%;
      /*必须知道宽高 一下为宽高的一半值*/
      margin-left: -150px;
      margin-top: -150px;
    }
  </style>
</head>
<body>
  <div class="one">
    <div class="two"></div>
  </div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .two {
      width: 300px;
      height: 300px;
      background-color: #ff8784;
      
	  /*不需要具体宽高 内容撑开即可*/
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }
  </style>
</head>
<body>
  <div class="one">
    <div class="two">xx</div>
  </div>
</body>
</html>
  • display:flex
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .one {
      width: 600px;
      height: 600px;
      background-color: #e74f2c;
      display: flex;
      justify-content: center;
      align-items: center;
    }
    .two {
      width: 300px;
      height: 300px;
      background-color: #ff8784;
    }
  </style>
</head>
<body>
  <div class="one">
    <div class="two"></div>
  </div>
</body>
</html>
  • display:table-cell
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
  	/*父级必须有固定宽高*/
    .one {
      width: 600px;
      height: 600px;
      background-color: #e74f2c;
      display: flex;
      justify-content: center;
      align-items: center;
    }
    .two {
      width: 300px;
      height: 300px;
      background-color: #ff8784;

      display: table-cell;
      vertical-align: center;
      text-align: center;
    }
  </style>
</head>
<body>
  <div class="one">
    <div class="two"></div>
  </div>
</body>
</html>

display/visibility/opacity区别

display:

  • DOM结构:浏览器不会渲染dispaly:none的元素 不占据空间
  • 事件监听:无法进行DOM事件监听
  • 性能:动态改变此属性会重排,性能差。
  • 继承:不能继承
  • transition:不支持

visibility:

  • DOM结构:元素隐藏 但是会渲染 占据空间

  • 事件监听:无法进行DOM事件监听

  • 性能:动态改变会引起重绘,性能较高。

  • 继承:可以继承,子元素visibility:visible时则会显示。

  • transition:立即显示,隐藏会延时。

  • opacity:

  • DOM结构:元素透明度为0 元素隐藏 占据空间

  • 事件监听:可以进行DOM事件监听

  • 性能:提升为合成层,不会触发重绘,性能较高。

  • 继承:可以继承,但子元素不能设置opacity:1来取消隐藏

  • transition:可以延时显示和隐藏

响应式布局方式

  • madia 媒体查询
  • 百分比
  • rem 相对html元素的字体大小
  • vh/vw
  • flex

px和em的区别

px是固定长度单位
em不固定,根据父元素字体大小决定。

rgba和opacity区别

opacity作用与元素以及元素所包含的内容
rgba只是作用域元素的颜色或背景颜色(不会继承)

如何实现小于12px的字体大小

transform: scale();
但是相应的容器也会变小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值