【内敛快元素间隙问题,浮动,溢出,高度崩塌解决,导航制作,等高队列】03

今日事,今日毕

11. 内敛块元素间隙问题

  1. 虽然imginput都是内联元素,但是他们表现的是内联块元素的效果:

    • 可以和非区块元素在同一行显示
    • 支持所有的样式
    • 不设置宽高的时候由内容(文字图片等)撑开
    • 换行符会被解析
  2. 由于内联块会解析换行符,因此用内联块布局的时候两个相邻的元素间会出现空格,不利于我们计算布局,如何去掉内联块之间的空格

    在这里插入图片描述

    • 注释连续标签拆分标签等方式去掉换行符(无论哪种方法都会使页面结构混乱和不利于阅读)

      <a href="">导航一</a><!--  
      --><a href="">导航一</a><!-- 
      --><a href="">导航一</a>
      
      <a href="">导航一</a><a href="">导航一</a><a href="">导航一</a>
      
      <a href="">导航一</a
      ><a href="">导航一</a
      ><a href="">导航一</a>
      
    • margin-left设置为负值(文字大小改变时,需要重新设置)

      设置字间距-npx/-nem(同样有字体大小问题,且在欧朋和ie7浏览器中会有问题)

      <!-- 
      margin: [1/4 font-size]
      谷歌不符合该比例-->
      <div id="test0">
          <a href="">导航一</a>
          <a href="" class="after">导航一</a>
          <a href="" class="after">导航一</a>
      </div>
      
      /* way2: */
      #test0{
          font-size: 20px;
      }
      #test0 .after{
          margin-left: -0.25em;
      }
      
    • 设置父元素字体大小为0,并在子元素中重新设置字体大小(是低版本谷歌浏览器有问题,由于谷歌浏览器自动更新,因此该方法是比较好的方法)

      <div id="test1">
          <a href="">导航一</a>
          <a href="" class="after">导航一</a>
          <a href="" class="after">导航一</a>
      </div>
      
      /* way3: */
      #test1{
          font-size: 0;
      }
      #test1 a{
          /* 需要给子元素重新设置字体大小 */
          font-size: 20px;
      }
      

12. 浮动

  1. 用div+css做布局有个问题,就是区块元素不能在同一排显示

  2. 浮动样式float可以解决这个问题:元素脱离文档流,按照浮动方向移动,遇到父级边界或者相邻浮动元素停住

    float:left/right/none(默认值)
    
    • 将窗体自上而下分成一行一行,并在每行中按从左至右依次排放元素,称为文档流,也称为普通流
    • HTML中全部元素都是盒模型,盒模型占用一定的空间,依次排放在HTML中,形成了文档流
    • 元素脱离文档流之后,将不再在文档流中占据空间,而是处于浮动状态(可以理解为漂浮在文档流的上方)
    • 脱离文档流的元素的定位基于正常的文档流,当一个元素脱离文档流后,依然在文档流中的其他元素将忽略该元素并填补其原先的空间。
<div class="parent">
    <div>div1</div>
    <div>div2</div>
    <div>div3</div>
    <div>div4</div>
</div>
.parent{
    border: 2px solid black;
}
.parent div{
    width: 80px;
    height: 80px;
    background-color: cadetblue;
    border: 1px solid red;
    /* 
    移动到父元素的边界或兄弟元素的旁边
    父元素高度崩塌
    */
    float: right;
}

在这里插入图片描述

在这里插入图片描述

12.1 溢出问题

  1. 溢出设置overflow(复合样式,由overflow-x和overflow-y集合成):当有内容或子元素溢出此元素时的处理方法:
    • visible(默认值,溢出时不处理),
    • hidden(溢出裁剪,裁剪部分不可见),
    • scroll(元素显示滚动条,溢出部分可以通过滚动条查看),
    • auto(x/y方向有溢出部分时,该方向出现滚动条),
    • inherit(继承)
  2. 溢出的部分不会影响页面布局

在这里插入图片描述

<div class="box1">离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻;离离原上草,一岁一枯荣;海内存知己,天涯若比邻</div>
<div class="box2"></div>

12.2 浮动问题及解决

  1. 设置浮动后,由于元素脱离文档流,结果会使父元素高度崩塌并与其他元素发生重叠解决浮动元素脱离文档流不占位的方法

    • 为父元素设置高度:优点简单、兼容性好;缺点高度有时未知、子元素数量变化导致换行

    • 将父元素设置为BFC盒子

      • 父元素浮动【不用】
      • overflow:hidden:优点简单、兼容性好;缺点hidden可能裁剪有用的东西

      在这里插入图片描述

    • 在浮动元素的最后设置空标签的样式clear:both优点本身就是W3C给我们的闭合浮动的方法、兼容性好;缺点会给父元素中增加无意义的空标签

      <div class="parent">
          <!-- 脱离文档流;父元素高度崩塌,没有高度 -->
          <div>div1</div>
          <div>div2</div>
          <div>div3</div>
          <!-- 给浮动元素之后设置兄弟节点;设置clear:both[创建了无意义的空标记] -->
      	<span style="display: block; height: 0; clear: both;"></span> 
      </div>
      
    • 利用css的==伪元素==来模拟空标签并设置clear:both:

      • 优点解决上述方法中的缺点;
      • 缺点低版本IE浏览器需要用.clearfix{*zoom:1}来兼容
      .parent{
          width: 500px;
          border: 2px solid black;
          /* overflow: hidden; */
      }
      .parent::after{
          display: block;
          content: "";
          clear: both;
      }
      .parent div{
          width: 80px;
          height: 80px;
          background-color: coral;
          /* 浮动溢出 */
          float: left;
      }
      .next{
          width: 200px;
          height: 200px;
          background-color: blue;
      }
      

12.3 等高队列练习

在这里插入图片描述
在这里插入图片描述

<div class="parent">
    <div class="child">离离原上草,一岁一枯荣;海内存知己,天涯若比邻;海内存知己,天涯若比邻</div>
    <div class="child">离离原上草,一岁一枯荣;海内存知己,天涯若比邻;海内存知己,天涯若比邻;海内存知己,天涯若比邻;海内存知己,天涯若比邻;海内存知己,天涯若比邻;海内存知己,天涯若比邻;海内存知己,天涯若比邻;海内存知己,天涯若比邻;海内存知己,天涯若比邻</div>
    <div class="child">离离原上草,一岁一枯荣;海内存知己,天涯若比邻</div>
    <div class="child">离离原上草,一岁一枯荣;海内存知己,天涯若比邻;海内存知己,天涯若比邻;海内存知己,天涯若比邻;海内存知己,天涯若比邻</div>
</div>
.parent{
    width: 450px;
    border: 2px solid black;
    overflow: hidden;
}
.parent::after{
    content: "";
    display: block;
    clear: both;
}
.child{
    width: 100px;
    margin: 0 5px;
    background-color: burlywood;
    float: left;

    /* 神奇等高 */
    margin-bottom: -500px;
    padding-bottom: 500px;
}

12.4 商品排列练习

<!-- 
用浮动做一个商品列表,要求12个商品元素每个尺寸120px*100px,一行4个,每两个商品间距离10px

【只有上下外边距会发生折叠】
【浮动不存在外边距折叠问题】
-->
<div class="parent clearfix">
    <div class="child">商品</div>
    <div class="child">商品</div>
    <div class="child">商品</div>
    <div class="child">商品</div>
    <div class="child">商品</div>
    <div class="child">商品</div>
    <div class="child">商品</div>
    <div class="child">商品</div>
    <div class="child">商品</div>
    <div class="child">商品</div>
    <div class="child">商品</div>
    <div class="child">商品</div>
</div>
.parent{
    border: 2px solid black;
    width: 520px;
}
/* 公共使用清除浮动 */
.clearfix::after{
    display: block;
    content: "";
    clear: both;
}
.child{
    width: 120px;
    height: 100px;
    background-color: chocolate;
    /* margin-right: 10px;
    margin-bottom: 10px; */
    float: left;
    margin: 5px;
}

13. 列表

  1. 把一系列类似的项在页面中展示出来就要用到列表,如名词定义、商品列表等

    • 包括dl(定义列表)、dt(定义名)、dd(详情)、ul(无序列表)、ol(有序列表)、li(列表的项)
    • 其中dt和dd是dl的子元素
    • li是ul和ol的子元素
    <!-- 不同浏览器打开不一样,所以一般清除默认样式-->
    
    <!-- 定义列表 -->
    <dl>
        <dt>前端</dt>
        <dd>html css js...</dd>
        <dt>后端</dt>
        <dd>java c+</dd>
        <dd>mysql</dd>
    </dl>
    
    <ul>
        <li>1</li>
        <li>2</li>
        <li>apple</li>
    </ul>
    
    <ol>
        <li>banana</li>
        <li>banak</li>
        <li>选择题</li>
    </ol>
    
    ul,ol{
        margin: 0px;
        padding: 0px;
    }
    ul li,ol li{
        list-style: none;
    }
    
  2. 导航

    • 通过一定的技术手段,为网页的访问者提供一定的途径,使其可以方便地访问到所需的内容
    • 通常制作导航要用到列表元素(ul、ol、li)和超链接元素(a)
    • 导航有水平方向和垂直方向,其中水平方向的导航就是需要把元素在同一行中展示出来,可以用内联元素、内联块或者浮动的区块元素
    • 当我们得到一个导航的ul图后,首先需要分析导航结构,用需要的元素把导航的HTML结构完成,然后为其设置样式,需要在ps里精确测量,最后的完成的页面应该与ul图相同

14. 导航练习

<ul class="menu">
    <li><a href="">网站首页</a></li>
    <li><a href="">关于我们</a></li>
    <li><a href="">产品展示</a></li>
    <li><a href="">新闻中心</a></li>
    <li><a href="">人力资源</a></li>
    <li><a href="">网上留言</a></li>
    <li><a href="">联系我们</a></li>
</ul>
/* 清楚默认样式 */
ul{
    margin: 0px;
    padding: 0px;
}
.menu::after{
    display: block;
    content: "";
    clear: both;
}
/* 子元素设高,父元素设宽 */
ul li{
    list-style: none;
    width: 60px;
    float: left;
}
a{
    color: #000;
    text-decoration: none;
}
/* 伪类选择器优先级高于标记名选择器;但是低于class选择器 */
a:visited{
    color: #000;
    text-decoration: none;
}
a:hover{
    color: #000;
    text-decoration: none;
}
a:link{
    color: #000;
    text-decoration: none;
}
a:active{
    color: #000;
    text-decoration: none;
}
.menu a{
    background-color: #c3c3c3;
    display: block;
    height: 22px;
    font-size: 10px;
    text-align: center;
    line-height: 22px;
}

.menu a:hover{
    color: gold;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值