css布局

在这里我所介绍的方法尽量做到了出现的bug最少、自适应强,而且高效、实用、简捷地实现常见网页布局

从上到下,详细描述内容我就不一 一 解释啦,如字体、颜色、大小、项目符号、下划线等等,请自己体会哦!

CSS左右布局典型方法:

第一、网页中实现 logo 和导航栏的左右多列布局

logo 和 nav 都是宽度不确定,根据内容而定的,div、a、Ul 等标签均不用width/height 来确定宽高,目的有利于改动内容;

 一、html结构如下:

html

二、CSS具体步骤:(html从内到外的写法)

1、将a标签里的两个span的内容通过margin、padding……属性放到合适位置;

2、重要一步:将垂直分布的导航栏排列到水平线上 :

        1、.topNavBar nav > ul > li{ float: left; }       //水平线上排列

        2、给 Li 的父级元素 Ul 添加.clearfix::after{ content: "";    display: block;  clear: both;}       // 消除float 带来的bug

        3、载通过margin 、padding   属性将导航条和 logo  至于同一个高度;

        4、这一步也是在导航条中常见的样式: 给最外面的 div 添加 .topNavBar{ position:fixed;}                                                      /*相对屏幕固定,  将logo 及导航条始终位于可视页面的顶部 */

三、网页效果如图:

导航条



第二、页面中间实现左右两列布局

一、html结构如下:


html

二、CSS具体步骤:

1、.userCard .picture{  float: left; }  ;

.userCard .text{  float: left; }                             //将picture 和 text 浮动起来,分为左右两部分

2、

          // 给父级元素添加clearfix,消除float 带来的bug

3、.userCard dl dd,.userCard dl dt{ float: left; }    // 将text里面的 dt、dd 内容 浮动起来

4、.userCard dl dt{width: 30%;}            /* 根据内容,将 dt、dd 占有合适的宽度,只要两者之和

      .userCard dl dt{width: 30%;}              等于100% 即可,若有paading则宽度适可而止*/

三、网页效果如图:


产品描述

在此,外面两列左右布局,内部text 内容再次左右两列布局;

在这里,hello是以图片形式显示的,具体做法就不介绍了,有兴趣可以点击下面链接了解具体做法:https://htmlpreview.github.io/?https://raw.githubusercontent.com/cnqinglin/The-Shapes-Of-Css.github.io/master/index_shape.html                                 复制蓝色部分可以查看源代码哦




第三、页面中间实现左右多列布局

一、html结构如下:


html

二、CSS具体步骤:

1、.userCard > footer.media > a{ display: inline-block; }      // 以内联元素形式显示、块级元 素                                                                                                    形式排列

2、.userCard > footer.media{ text-align: center;}         /*通过给父级元素text-align:cernter;使a                                                                                  元素居中,inline-block 的好处是不管 有多                                                                                    少a 标签都会居中,以内容来决定宽度*/

3、.media > a >svg{ vertical-align:center;}    //消除dispaly:inline-block;的bug;使图片上下间隙                                                                             一样

三、网页效果如图:

media

CSS左右布局简单的其它方法:

1、简单的块级元素里头内容居中时外面块级元素添加 margin:auto;  里面内联元素添加 tex-align: center;即可;

2、想把图片放到任意位置:最好用绝对定位:给父级元素position:relative;给自己元素position:absolute;再用 top/left/right/bottom布局;





CSS水平居中方法:

1、内联元素内文字水平居中:

直接加text-align:center;

2、块级元素内部文字或图片居中:

先将内容浮动,把他父级元素居中就行;比如:ol/ul 的li 里面有内容居中时,给ol/ul 外面加div,再给div添加text-align:center;

举例:

html:    

    

            

                       

  1. 内容一
  2.                     

  3. 内容二
  4.                     

  5. 内容三
  6.                     

  7. 内容四
  8.                     

  9. 内容五
  10.                     

  11. 内容六
  12.                     

  13. 内容七
  14.                     

  15. 内容八
  16.                     

  17. 内容九
  18.                     

  19. 内容十
  20.         

 

css

            div{

                  border:1px solid red;

                  text-align:center;

                }

            ol{

                  list-style:none;

                  display:inline-block;

            }

          li{

                  float:left;

                  padding-right:30px;

            }

结果:

内外两次水平居中

CSS垂直居中方法:

1、块级元素里内容垂直居中:

    (1)   想要一个把 div 高度最终设为为 30px,div 里有内联元素(一行字)垂直居中,字的大小为 14px : 

        方法一:给 div 的样式为 font-size: 14px; line-height: 20px; padding: 5px 0; 

        方法二:给 div 的样式为 font-size: 14px; line-height: 24px; padding: 3px 0; 

        方法三:给 div 的样式为 font-size: 14px; line-height: 30px;

    (2)  div里面有个div,想把里面的div垂直水平都居中:

        第一种情况:

        需要外部div设为屏幕一样宽高(外部div高确定)里面的居中,(定宽定高)则做法:

        html:   

        css:    .dad{ box-sizing:border-box;height:100vh;}

                   .son{ width:   px; height:    px; padding:   px; margin:auto; position:absolute; right:0px; left:0px; top:0px;bottom:0px;}

        第二种情况:

         外部div的高度宽度都不确定,里面的div居中的做法:

        html:   

        css:    .dad{ display:flex;justify-content:center;align-items:center;}

                   .son{ width:   px; height:auto; padding:   px;}

2、内联元素里内容垂直居中:

方法一:给文字添加font-size.再给它设置一样的上下padding;

方法二:

                                

                                      

                                          hahhashshdd哈哈哈fkslj 发的水库和第三方库河水库防洪看 凤凰                                                u'k'f'sh'f'd'k'dasjkdkbsdfbfsdkhbshdbfhsdbhfb房贷首付fksdbfsdsf                                                bhhahhhahhah是哈韩圣诞卡社保卡不哭哈不是靠好吧点回                                                            复BASF吧

                                    

                            

                              span{

                                       border:1px solid red;(这个可忽略)

                                       display:inline-block;

                                       padding-top:20px;

                                      padding-bottom:20px;

                                      line-height:20px;

                                    }

内联元素垂直居中

一般不使用vertical-align:center;display:inline-block;时出bug时才用到;

若在div中只有文字建议用第一个方法,div中有其他块级元素或结构较复杂,建议使用方法二:好处是不局限于内容多少


以上全部内容概括:布局问题都涉及到水平垂直居中,垂直居中较简单,而水平居中无非以下两种方法:

           1、父元素:text-align:center;       

                子元素:display:inline-block;   通常这个方法有bug,比如ul>li水平居中时中间会出来空隙。

           2、父父元素:text-align:center;   

                父元素 : .clearfix{content:"";display:block;clear:both;}  ;         在这里有时需要让父元素紧紧包围时不要写clearfix,不然会把整个宽度包含进来。        

                子元素:float:left/right;


定位问题:

1、绝对定位:脱离文档流

   方法1: position:fixed;   相对于屏幕固定;一般用于背景图;

2、相对定位:没有脱离文档流,相对父级元素定位,就是相对于之前的位置而按要求移动

    方法:            父元素:position:relative;     //但是添加了这个属性后就不脱离文档流了

                          子元素:position:absolute;    //这一步脱离文档流了

3、脱离文档流方法:

        方法1: position:fixed;   相对于屏幕固定;一般用于背景图;

        方法2: position:absolute;   相对于父级元素定位;

        方法3: float:left;   浮动起来;


元素高度:

1、内联元素:

            内联元素是不接受高度的,由内容来决定(行高)高度,非要给它设置宽高,添加display:inline-block;属性,display:inline-block;属性使元素以内联元素形式排列,块级元素样式显示;

            (内联元素的左右会受margin\padding的影响,但高度不受影响;)

2、块级元素:

            块级元素是由其内部文档流总和决定;

文档流Normal  Flow:内联元素从左往右流动,遇到阻碍就会换行;块级元素从上往下、每一个元素占一行、(分别另起一行流动)、依次流动;

 


……………………………………div的高度有谁来决定:…………………………………………

1、在div中只有多个内联元素(span里文字)时:div的高度是有行高决定

        文字省略溢出:

         1、一行文本:给父级元素添加:white-space:nowrap;  //多出的隐藏掉   overflow:hidden;   text-overflow: ellispsis;

         2、多行文本:直接在谷歌上搜:css moulti line text ellipsis 即可;

 2、在div中有只块级元素时:   分情况:看看margin合不合并决定高度问题

        margin合并问题:

            

                      这种情况下阻止margin合并方法:(就是让子元素全部放在父元素里面)

            

         方法1、.dad{  padding-top:xxx;padding-bottom:xxx;}   建议使用

            

                                    方法2、.dad{  overllow:hidden;}   不是很建议这个方法,当需要做到悬浮层时就不能这样做;

3、在div中既有内联元素又有块级元素时:高度有div中内部文档中流元素总和决定;

总结:div的高度是由它内部文档流的元素总和决定;如果是里面元素脱离了文档流,则在计算高度时不算进来;





常用的两个页面效果:

1、实现一个一比一的div的方法:

div{ border:  px solid red; padding-top:100%;}

2、写出「姓名」与「联系方式」两端对齐的方法:

css:

    span {

      display: inline-block;

      width: 5em;

      text-align: justify;

      line-height: 20px;

      overflow: hidden;

      height: 20px;


    }

    span:after{

      content: '';

      display: inline-block;

      width: 100%;

      border: 1px solid blue;

    }


html:

  姓名

  联系方式


                                                                                以后会不定期更新内容

你可能感兴趣的:(css布局)