zoukankan      html  css  js  c++  java
  • CSS基础篇

    CSS基础篇

    1,介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?

    标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin 
    低版本IE盒子模型:宽度=内容宽度(content+border+padding)+ margin

    2,CSS选择器有哪些?哪些属性可以继承?

    CSS选择符:id选择器(#myid)、类选择器(.myclassname)、标签选择器(div, h1, p)、相邻选择器(h1 + p)、子选择器(ul > li)、后代选择器(li a)、通配符选择器(*)、属性选择器(a[rel=”external”])、伪类选择器(a:hover, li:nth-child)

    可继承的属性:font-size, font-family, color

    不可继承的样式:border, padding, margin, width, height

    优先级(就近原则):!important > [ id > class > tag ]
    !important 比内联优先级高

    3,display有哪些值?说明他们的作用?

        block       块类型。默认宽度为父元素宽度,可设置宽高,换行显示。
        none         缺省值。象行内元素类型一样显示。
        inline       行内元素类型。默认宽度为内容宽度,不可设置宽高,同行显示。
        inline-block  默认宽度为内容宽度,可以设置宽高,同行显示。
        list-item   象块类型元素一样显示,并添加样式列表标记。
        table       此元素会作为块级表格来显示。
        inherit     规定应该从父元素继承 display 属性的值。

    4,position的值?

    static(默认):按照正常文档流进行排列;
    relative(相对定位):不脱离文档流,参考自身静态位置通过 top, bottom, left, right 定位;
    absolute(绝对定位):参考距其最近一个不为static的父级元素通过top, bottom, left, right 定位;
    fixed(固定定位):所固定的参照对像是可视窗口。

    5,元素竖向的百分比设定是相对于容器的高度吗?

    当按百分比设定一个元素的宽度时,它是相对于父容器的宽度计算的,但是,对于一些表示竖向距离的属性,例如 padding-top , padding-bottom , margin-top , margin-bottom 等,当按百分比设定它们时,依据的也是父容器的宽度,而不是高度。

    6,对BFC规范(块级格式化上下文:block formatting context)的理解?

    1、Formatting context(格式化上下文) 是 W3C CSS2.1 规范中的一个概念

    2、具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性

    3、通俗一点来讲,可以把 BFC 理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部

    4、触发 BFC

    只要元素满足下面任一条件即可触发 BFC 特性:

      • body 根元素
      • 浮动元素:float 除 none 以外的值
      • 绝对定位元素:position (absolute、fixed)
      • display 为 inline-block、table-cells、flex
      • overflow 除了 visible 以外的值 (hidden、auto、scroll)

    7为什么要清除浮动以及清除浮动的几种方法?

    1,因为当父盒子高度为0时,子盒子不占位置,子盒子不会撑开父盒子,所以下面的标准流盒子,会跑到父盒子中的子盒子下面

    2,清除方法:

    ①在浮动盒子的后面添加一个空盒子,对该空盒子添加CSS样式:clear: both;

    ②对浮动的盒子父级添加该属性:overflow: hidden;

    ③单伪元素标签法,谁出问题就给谁加一个clearfix类名(常用)。

    ④双伪元素标签法,谁出问题就给谁加一个clearfix类名。

    8,css中的单冒号和双冒号的区别?::before和:after的作用是什么?

    1,CSS3为了区分伪类和伪元素,已经明确规定了伪类用一个冒号来表示,而伪元素则用两个冒号来表示

    2,单冒号(:)用于css3伪类,双冒号(::)用于CSS3伪元素

    3,::before :在元素之前插入某些内容;:after:在元素之后插入某些内容

    9,ZOOM:1的原理和作用(清除浮动)

    1,Zoom属是IE浏览器的专有属性

    2,当设置了zoom的值之后,所设置的元素就会就会扩大或者缩小,高度宽度就会重新计算了,这里一旦改变zoom值时其实也会发生重新渲染,运用这个原理,也就解决了ie下子元素浮动时候父元素不随着自动扩大的问题。

    10,对line-height的理解?

    1,line-height只影响行内元素,并不能直接应用于块级元素,line-height 具有可继承性,块级元素的子元素会继承该特性,并且在行内元素上生效。

    2,line-height指的是在同一个元素中,两个文本行基线间的距离。

    11,手动写动画,最小的时间间隔是多少?

    多数显示器的默认频率是60HZ,即每秒刷新60次。所以理论上的最小间隔是 1/60*1000ms = 16.7ms

    12,行内块元素什么时候出现间隙?怎么解决?

    行内元素之间产生水平空隙的原因:代码中有意或无意的添加了换行符,tab(制表符)或者空格等字符引起的;

    解决方法?

    1. 删除引起问题的换行符,制表符或者空格等,但是缺点是会使代码结构混乱;
    2. 设置margin属性为负数,如:margin-left: -3px;缺点是负数的值不确定,得具体情况具体分析,不推荐;
    3. 设置font-size: 0; 用于消除换行符、tab(制表符)、空格等字符造成的影响.

    13,div水平垂直居中的方法?

    1,div绝对定位水平垂直居中【margin:auto实现绝对定位元素的居中】

    div{
                 200px;
                height: 200px;
                background: green;
                position:absolute;
                left:0;
                top: 0;
                bottom: 0;
                right: 0;
                margin: auto;
            }

    2,div绝对定位水平垂直居中【margin 负间距】

    div{
                200px;
                height: 200px;
                background:green;
                position: absolute;
                left:50%;
                top:50%;
                margin-left:-100px;
                margin-top:-100px;
            }

    3,css不定宽高水平垂直居中(display:flex;)

    .box{
    
                 height:600px;
                 display:flex;
                 justify-content:center;
                 align-items:center;
                   /* aa只要三句话就可以实现不定宽高水平垂直居中。 */
            }
            .box>div{
                background: green;
                 200px;
                height: 200px;
            }

    14,CSS实现div的高度填满剩余空间?

    1,box-sizing方案

    1. 外层box-sizing: border-box; 同时设置padding: 100px 0 0
    2. 内层100像素高的元素向上移动100像素,或使用absolute定位防止占据空间;
    3. 另一个元素直接height: 100%;
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <style type="text/css">
        html,
        body {
          height: 100%;
          padding: 0;
          margin: 0;
        }
    
        .outer {
          height: 100%;
          padding: 100px 0 0;
          box-sizing: border-box;
        }
    
        .A {
          height: 100px;
          margin: -100px 0 0;
          background: #BBE8F2;
        }
    
        .B {
          height: 100%;
          background: #D9C666;
        }
    
      </style>
    </head>
    <body>
      <div class="outer">
        <div class="A"></div>
        <div class="B"></div>
      </div>
    </body>
    
    </html>

    2,absolute positioning

    1. 外层position: relative
    2. 百分百自适应元素直接position: absolute; top: 100px; bottom: 0; left: 0
    html,
    body { height: 100%; padding: 0; margin: 0; }
    .outer { height: 100%; position: relative; }
    .A { height: 100px; background: #BBE8F2; }
    .B { background: #D9C666;  100%; position: absolute; top: 100px ; left: 0 ; bottom: 0; }

    15,圣杯布局和双飞翼布局(问的我点蒙)

    要求:

    1、三列布局,中间宽度自适应,两边定宽;

    2、中间栏要在浏览器中优先展示渲染;

    3、允许任意列的高度最高;

    4、要求只用一个额外的DIV标签;

    5、要求用最简单的CSS、最少的HACK语句

    方法1:flex: 0 0 100px;

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <style type="text/css">
        * {
          box-sizing: content-box;
          /* 伸缩项目自动box-sizing:border-box,所以需调整为content-box */
          margin: 0;
          padding: 0;
        }
    
        body {
          display: flex;
          flex-direction: column;
          /* 头、中部、脚纵向显示 */
        }
    
        header,
        footer {
          flex: 0 0 50px;
          /* 头、脚尺寸固定,不放大、不缩小 */
          background: #3f3f3f;
        }
    
        .main {
          display: flex;
    
          /* 
            flex:1 == 1 1 auto:剩余空间放大比例(flex-grow)  空间不足缩小比例(flex-shrink)    分配多余空间之前项目占据的主轴空间(flex-basis)
            flex:1指的是:中部区域自由伸缩
            auto指的是项目本来大小,因未给main设置高度,main高度由子元素最高者决定,若子元素高度为0,则main高度为0
            块级元素未主动设置高度或未被子元素撑起高度,浏览器默认为块级元素分配高度为0。
            */
          flex: 1;
        }
    
        .content {
          background: red;
          height: 1000px;
    
          /* 
            横向中间内容区自适应,即使未指定宽度,但会分配宽度 
            块级元素未主动设置宽度或未被子元素撑起宽度,浏览器默认为块级元素分配宽度为可使用的全部宽度,比如全屏宽。
            */
          flex: 1;
        }
    
        .left,
        .right {
          height: 800px;
          background: blue;
          flex: 0 0 100px;
          /* 左右两列固定宽 */
        }
    
        .left {
          order: -1;
          /* 让left居于左侧 */
        }
      </style>
    </head>
    
    <body>
      <header></header>
      <div class="main">
        <div class="content"></div>
        <div class="left"></div>
        <div class="right"></div>
      </div>
      <footer></footer>
    </body>
    
    </html>

    方法2,float布局

     <p>三栏布局</p>
                <div>
                    <div class="main">
                        <!-- main宽度为100%,撑开占满全屏 -->
                        <div class="main-wrap">
                            <!-- main-wrap设置左右margin -->
                            Main
                        </div>
                    </div>
                    <div class="left">
                        Left
                    </div>
                    <div class="right">
                        Right
                    </div>
                </div>
               
                <style>
                    .left, .main, .right {
                        height: 100px;
                        line-height: 100px;
                        float: left;
                        background: #fff;
                    }
                    .left {
                         190px;
                        margin-left: -100%;
                        background: #e4e4e4;
                    }
                    .right {
                         230px;
                        margin-left: -230px;
                        background: #c90;
    
                    }
                    .main {
                         100%;
                    }
                    .main-wrap {
                        margin: 0 230px 0 190px;
                    }
                </style>

    3,

     <p>两栏布局</p>
                <div>
                    <div class="main2">
                        <div class="main2-wrap">
                           Main2
                        </div>
                    </div>
                    <div class="left2">
                        Left2
                    </div>
                </div>
              
    
                <style>
                    .main2, .left2 {
                        float: left;
                        height: 100px;
                        line-height: 100px;
                    }
                    .main2 {
                         100%;
                        background: #fff;
                    }
                    .main2-wrap {
                        margin-left: 200px;
                    }
                    .left2 {
                         200px;
                        margin-left: -100%;
                        background: #c60;
                    }
                </style>
  • 相关阅读:
    跟KingDZ学HTML5之三 画布Canvas
    跟KingDZ学HTML5之七 探究Canvas之各种特效
    跟KingDZ学HTML5之八 HTML5之Web Save
    Aptana Studio 3 如何汉化,实现简体中文版
    跟KingDZ学HTML5之十一 HTML5 Form 表单新元素
    跟KingDZ学HTML5之九 HTML5新的 Input 种类
    跟KingDZ学HTML5之十二 HTML5 Form 表单元素新增属性
    跟KingDZ学HTML5之十三 HTML5颜色选择器
    SSL协议运行机制
    门面模式 到 socket
  • 原文地址:https://www.cnblogs.com/zzghk/p/10422025.html
Copyright © 2011-2022 走看看