css(五)---css中的一些问题

不定宽高水平和垂直居中
如给元素一个宽高进行水平垂直居中,这个自然是很简单的。方法也有很多种,那么今天就复习一下不定宽高的。当然本质也是差不多的。
在说居中之前,首先讲一下文字的水平垂直居中:

        height: 300px;
        width: 300px;
        border: 1px solid black;
        color: rgb(216, 50, 38);
        text-align: center;
        line-height: 300px;

这里写图片描述

这个居中主要是利用 text-align: center;和 line-height: height;这两个属性进行居中的。
接下来,进入主题吧:

  • 给父级设一个flex盒子
    • 这是利用css3中的弹性盒子的一些属性,主要是利用flex属性。给父级一个宽高,而子级则没有给宽高,让子级进行水平垂直居中的。
  .wrapper{
            width: 200px;
            height: 200px;
            border: 1px solid black;
            display: flex;
            align-items: center;//子元素水平居中
            justify-content: center;//子元素垂直居中
        }
         <div class="wrapper">
                <div>不定宽高居中</div>
         </div>

这里写图片描述

通过 align-items: center;和 justify-content: center;属性,将子元素进行水平垂直居中,这种方式在移动布局页面的时候经常的使用。是现在比较火得页面布局方式,讲到css3时,再详细的介绍吧。

  • 利用table-cell的方法
    • display:table-cell属性指让标签元素以表格单元格的形式呈现,类似于td标签。目前IE8+以及其他现代浏览器都是支持此属性的,但是IE6/7只能对你说sorry了,这一事实也是大大制约了display:table-cell属性在实际项目中的应用,我们都知道,单元格有一些比较特别的属性,例如元素的垂直居中对齐,关联伸缩等,所以display:table-cell还是有不少潜在的使用价值的,虽说IE6/7不支持此属性,但是幸运的是,IE6/7一些乱糟糟的属性与渲染,我们可以其他方法实现同样或是类似的效果。
      大家可以好好研究一下IE6/7,因为这个浏览器当时是比较牛的一款,基本上霸占了整个市场,它也不顾及兼不兼容的问题,我是老大都得听我的。但随着谷歌公司推崇的Google浏览器,IE再也不能像以前任性了,才开始注重兼容性的问题。导致以前的浏览器有一些问题,具体可以自己去研究一下。
   <style>
  .wrapper{
            width: 200px;
            height: 200px;
            border: 1px solid black;
            display: table-cell;
            text-align: center;//水平居中
            vertical-align: middle;//垂直状态是什么样的形式,里面的属性值还有top、bottom。
        }
        .wrapper div{
            vertical-align: middle;
            display: inline-block;
        }

    </style>

    <div class="wrapper">
        <div>不定宽高居中</div>
    </div>

最终显示效果和之前的差不多,都是让其子元素相对与父元素水平垂直居中的。

  • 利用css3的transform属性
    • 因为子元素没有宽高,所以不能根据margin进行缩进的。因此就引入了transform属性,对没有宽高的元素进行水平垂直居中。
    • 这是css3动画中的一个属性,为了改变元素的相对值,里面有相应的属性值,分别是translateX()、translateY()、translateZ()。最后一个是3d效果的,在z方向上进行运动。
 <style>
 .wrapper{
            width: 200px;
            height: 200px;
            border: 1px solid black;
            position: relative;
        }
        .wrapper div{
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%,-50%);//第一个参数是X,第二个参数是Y的值。

        }
        </style>
         <div class="wrapper">
                <div>不定宽高居中</div>
          </div>

这种方式也能实现水平垂直居中的的要求。虽然实现这种方式的方法有很多的,但是第一种用的比较多,也是现在最流行的方式。
三栏布局
布局是制作页面最基础的思想,那么我所熟知的左中右三栏宽度自适应于浏览器的方法有三个:绝对定位法,margin负值法以及自身浮动法。这些方法简洁实用,且无兼容性问题。


  • 绝对定位法

这或许是三种方法里最直观,最容易理解的:左右两栏采用绝对定位,分别固定于页面的左右两侧,中间的主体栏用左右margin值撑开距离。于是实现了三栏自适应布局。

    <style>
     width: 100%;
          height: 200px;
          position: relative;
      }
      .left,.right{
          width: 200px;
          height: 200px;
          position: absolute;
          top: 0;
      }
      .left{
          left: 0;
          background: red;
      }
      .right{
          right: 0;
          background: yellow;
      }
      .main{
          margin: 0 200px;
          height: 200px;
          background: green;
      }
    </style>
    <div class="wrapper">
        <div class="left">1</div>
        <div class="main">2</div>
        <div class="right">3</div>
    </div>

结果如下:

这里写图片描述

  • margin负值法
    • 这种方法是在实际的网站中应用的最多的,首先,中间的主体要使用双层标签。左栏与右栏都是采用margin负值定位的,左栏左浮动,margin-left为-100%,由于前面的div宽度100%与浏览器,所以这里的-100%margin值正好使左栏div定位到了页面的左侧;右侧栏也是左浮动,其margin-left也是负值,大小为其本身的宽度即200px。
   .wrapper{
          width: 100%;
          height: 200px;
      }
      .main{
          width: 100%;
          height: 200px;
          float: left;
      }
      .body{
          height: 200px;
          margin: 0 200px;
          background: green;
      }
      .left,.right{
          float: left;
          width: 200px;
          height: 200px;
      }
      .left{
          margin-left: -100%;
          background: red;
      }
      .right{
          margin-left: -200px;
          background: yellow;
      }
 <div class="wrapper">
        <div class="main">
            <div class="body"></div>
        </div>
        <div class="left">1</div>
        <div class="right">3</div>
    </div>

三栏相互关联,可谓真正意义上的自适应,有一定的抗性——布局不易受内部影响。因为不受内部影响,所以在实际操作中用的比较多。

  • 自身浮动法
    • 此方法代码最简单。应用了标签浮动跟随的特性。左栏左浮动,右栏右浮动,主体直接放后面,就实现了自适应。
 .wrapper{
          width: 100%;
          height: 200px;
      }
      .left{
          width: 200px;
          height: 200px;
          float: left;
          background: red;
      }
      .main{
          height: 200px;
          margin: 0 200px;
          background: green;
      }
      .right{
          width: 200px;
          height: 200px;
          float: right;
          background: yellow;
      }
  <div class="wrapper">
        <div class="left">1</div>
        <div class="right">3</div>
        <div class="main">2</div>
    </div>

这布局需要注意的是主体main的属性,这个主体必须放在坐后面,其它两个位置随意放。如果主体放在最前的时候,后面两个固定栏就会被主体的margin撑开,从而会在下一行显示。所以一定要注意。
这三种布局方法各有各的好处,其中margin负值法用的最为广泛,实际用的也比较的多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值