zoukankan      html  css  js  c++  java
  • 负边距在布局中的应用

    根据前几天对css负边距的研究(《浅析css负边距》),在理解负边距的原理之后,可以用在以下情况当中。

    一、两列布局

    1、右侧定宽,左侧宽度自适应

      思路:要实现效果,首先,左侧的宽度要能够自适应,那么宽度可选100%或auto,我们知道设置成100%会使左侧div的宽度为父元素的100%,设置成auto会根据左侧div的实际大小自适应宽度,那如果div里面有块级元素,右侧就会被挤到下一行,所以我们选择100%;然后我们需要在左侧div的右边空出位置给右侧div,那么只要把左侧div的宽度变短,设置右外边距为负值即可,然后负值是多少呢?当然是右侧div需要多少就是多少啦!

      实现:左侧和右侧的div都设置左浮动,左侧宽度100%,并设置margn-right为右侧宽度的负值。

      验证:代码如下。

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     5 <title>右侧定宽,左侧宽度自适应布局</title>
     6 <style>
     7   #left{
     8     height: 200px;
     9     background-color: red;    
    10     float: left;
    11 
    12     width: 100%;
    13     margin-right: -200px;  
    15   }
    16   #right{
    17     height: 200px;
    18     background-color: blue;
    19     width: 200px;
    20     float: left;
    21   }
    22 </style>
    23 </head>
    24 <body>
    25   <div id="wraper">
    26     <div id="left"></div>
    27     <div id="right"></div>
    28   </div>
    29 </body>
    30 </html>

    效果图如下图图一,且左侧缩放自如。

    图一:

    二、三列布局

    1、左右两列定宽,中间一列宽度自适应

      思路:假设左右两列宽200px,要实现效果,可以让3个div都左浮动,然后给予一定的设置让它们能够显示在一行,主要就是让右列不要被挤下去,那么我们只要让中间列把右列的位置空出来即可,怎么空出来?不要再问了吧,不懂就看上文吧!

        实现:3个div都左浮动,左右两列定宽200px,中间列宽度设置为100%,留给右列的宽度绝对值为左列宽度加右列宽度400px。

        验证:代码如下。

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     5 <title>右右定宽,中间宽度自适应布局</title>
     6 <style>
     7   *{
     8     margin: 0;
     9     padding: 0;
    10   }
    11   #left{
    12     height: 200px;
    13     width: 200px;
    14     background-color: red;    
    15     float: left;
    16   }
    17   #right{
    18     height: 200px;
    19     width: 200px;
    20     background-color: blue;
    21     float: left;
    22   }
    23   #middle{
    24     height: 200px;
    25     background-color: yellow;
    26     float: left;
    27 
    28     width: 100%;
    29     margin-right: -400px;
    30   }
    31 </style>
    32 </head>
    33 <body>
    34   <div id="wraper">
    35     <div id="left"></div>
    36     <div id="middle"></div>
    37     <div id="right"></div>
    38   </div>
    39 </body>
    40 </html>

    效果图如下图图二。

    图二:

    三、单列布局

      单列布局主要用在一个div垂直水平居中。

      思路:要实现效果,可以设置绝对定位,把top和left都设置为50%,这样div的左上角就到正中间了,但要实现效果我们是需要把div的中心点放到正中间,这时,我们可以利用负边距把div的中心点拉到正中间。怎么做呢?margin-top和margin-left再设置为width的一半的负值,使div向上、向左移动对应边长的一半,就把中心点拉过来了。

    代码如下:

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     5 <title>垂直水平居中</title>
     6 <style>
     7   *{
     8       margin: 0;
     9       padding: 0;
    10   }
    11   #wraper{
    12     width: 400px;
    13     height: 200px;
    14     background-color: red;
    15 
    16     position: absolute;
    17     left: 50%;
    18     top: 50%;
    19     margin-left: -200px;
    20     margin-top: -100px;
    21   }
    22 </style>
    23 </head>
    24 <body>
    25   <div id="wraper"></div>
    26 </body>
    27 </html>

    效果图如下:

  • 相关阅读:
    docker-compose常用命令-详解
    Docker的4种网络模式
    docker-compose常用命令-详解
    windows 10安装nodejs(npm,cnpm),在谷歌浏览器上安装vue开发者工具 vue Devtools
    @Pointcut注解
    leetcode做题总结
    win10右键添加在此处打开powershell
    怎样从 bat 批处理文件调用 PowerShell 脚本
    Android Google Play app signing 最终完美解决方式
    526. Beautiful Arrangement
  • 原文地址:https://www.cnblogs.com/lovelyun/p/4773676.html
Copyright © 2011-2022 走看看