几道简单的面试题

懒得进行整理,直接复制粘贴用HTML打开

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            .hr {
                width: 300px;
                background-color: #000;
            }

            .hr.half-px {
                height: 0.5px;
            }

            .hr.one-px {
                height: 1px;
            }

            .hr.scale-half {
                height: 1px;
                transform: scaleY(0.5);
            }

            .hr.gradient {
                height: 1px;
                background: linear-gradient(0deg, #fff, #000);
            }

            .hr.boxshadow {
                height: 1px;
                background: none;
                box-shadow: 0 0.5px 0 #000;
            }

            .hr.svg {
                background: none;
                height: 1px;
                background: url("data:image/svg+xml;utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='1px'><line x1='0' y1='0' x2='100%' y2='0' stroke='#000'></line></svg>");
            }

            .box {
                width: 0;
                height: 0;
                border-top: 0px solid transparent;
                border-bottom: 100px solid #f00;
                border-left: 100px solid transparent;
                border-right: 100px solid transparent;
                transform: scale(1, 1.732);
            }

            .fu {
                width: 400px;
                height: 400px;
                background-color: pink;
                /* position: relative; */
                /* 4.弹性布局,子元素可以不用设置宽高 */
                /* display: flex; */
                /* 主轴居中 */
                /* justify-content: center; */
                /* 侧轴居中 */
                /* align-items: center; */
                /* 5.table布局 子元素可以不用设置宽高 */
                /* display: table-cell; */
                /* 垂直方向上居中对齐 */
                /* vertical-align: middle; */
                /* 文本对齐方式 */
                /* text-align: center; */
                /* 6.网格布局 */
                display: grid;
                align-items: center;
                justify-content: center;
            }

            .zi {
                /* width: 100px;
                height: 100px; */
                background-color: #f00;
                /* position: absolute;
                left: 50%;
                top: 50%; */
                /* 1.需要给子元素设置宽高 */
                /* margin-left: -50px;
                margin-top: -50px; */
                /* 2.不需要给子元素设置宽高 */
                /* transform: translate(-50%, -50%); */
                /* 3.子元素需要宽高 */
                /* left: 0;
                top: 0;
                right: 0;
                bottom: 0;
                margin: auto; */
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <!-- (1)pc端画一条0.5px的线 -->
        <!-- 直接画 -->
        <p>0.5px</p>
        <div class="hr half-px"></div>
        <p>1px</p>
        <div class="hr one-px"></div>
        <!-- 设置1px,然后使用缩放scale 0.5 -->
        <p>1px + scaleY(0.5)</p>
        <div class="hr scale-half"></div>
        <!-- 用线性渐变linear-gradient -->
        <p>linear-gradient</p>
        <div class="hr gradient"></div>
        <!-- 使用box-shadow -->
        <p>box-shadow</p>
        <div class="hr boxshadow"></div>
        <!-- 利用SVG -->
        <p>svg</p>
        <div class="hr svg"></div><br><br><br>


        <!-- (2)画出来一个等边三角形、一个等腰三角形 -->
        <div class="box">
            <!-- 三角形 -->
        </div>


        <!-- (3)让一个元素水平垂直据中 -->
        <!-- 方法一:定位+margin负值 -->
        <!-- 方法二:定位+transform负值 -->
        <!-- 方法三:定位+margin:auto -->
        <!-- 方法四:flex布局 -->
        <!-- 方法五:table布局 -->
        <!-- 方法六:grid网格布局 -->
        <div class="fu">
            <div class="zi">子元素</div>
        </div>


        <!-- (4)flex弹性布局所有相关属性 -->

        <!-- display:flex 
        三个核心概念:
        -flex项,需要布局元素
        flex容器,包含flex项
        direction,flex的布局方向
        -->

        <!-- flex-direction
         row(默认值):主轴为水平方向,从左到右
         row-reverse:主轴为水平方向,从右到左
         column:主轴为垂直方向,从上到下
         column-reverse:主轴为垂直方向,从下到上
         -->

        <!--  flex-wrap
         nowrap(默认):不换行
         wrap:换行,第一行在上方
         wrap-reverse:换行,第一行在下方
         -->

        <!-- justify-content
          flex-start(默认值):左对齐
          flex-end:右对齐
          center:居中
          space-between:两端对齐,项目之间间隔相等
          space-around:每个项目两侧间隔相等,项目之间的间隔比项目与边框的间隔大一倍
          -->

        <!-- align-items
           flex-start:交叉轴的起点对齐
           flex-end:交叉轴的终点对齐
           center:交叉轴的中点对齐
           baseline:项目第一行的基线对齐
           stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度
           -->

        <!-- align-content
            定义了多根轴线的对齐方式,如果项目只有一根轴线,那么该属性将不起作用
            flex-start:与交叉轴的起点对齐
            flex-end:与交叉轴的终点对齐
            center:与交叉轴的中点对齐。
            space-between:与交叉轴两端对齐,轴线之间的间隔平均分布
            space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍
            stretch(默认值):轴线占满整个交叉轴
            -->
        <!-- order属性 -->

        <!--flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。  -->

        <!-- flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

.item {
  flex-shrink: <number>; /* default 1 */

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
负值对该属性无效-->

        <!-- align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
} -->

        <!-- (5)让一个元素隐藏的方式、分别有什么区别 -->
        <!-- 1、overflow:hidden;
        防止溢出,也是一种隐藏,只不过是把超出范围的元素隐藏,这种一般用于文字过多或者图片特效以及自适应中div没法设置高度时使用
        2.display:none
        设置元素的display为none是最常用的隐藏元素的方法。
        
        .hide {
             display:none;
         }
        这就是完全的隐藏了,直接消失,任何对该元素直接的用户交互操作都不可能生效,被隐藏的元素完全不会占用空间,仿佛元素完全不存在一样。
        
        3、opacity:0
        opacity属性表示元素的透明度,而将元素的透明度设置为0后,元素也是隐藏的。
        
         .transparent {
             opacity:0;
        }
        这种方法和visibility:hidden的一个共同点是元素隐藏后依旧占据着空间,设置透明度为0后,元素只是隐身了,它依旧存在页面中,它也同样影响用户交互。在读屏软件中会被识别。
        
        4、position:
        元素的定位
        
        .box{
            position:absolutely;
            top:-4555px;
            left:-45545px
        }
        top和left设置成足够大的负数,相当于把元素放到可视区域外,它不会影响布局,能够让元素保持可操作性,在读屏软件上可以被识别。
        
        5,visibility:hidden
        设置元素的visibility为hidden也是一种常用的隐藏元素的方法,和display:none的区别在于,元素在页面消失后,其占据的空间依旧会保留着,所以它只会导致浏览器重绘而不会重排。
        
        .hidden{
           visibility:hidden 
           }
        visibility:hidden适用于那些元素隐藏后不希望页面布局会发生变化的场景
        
        6,设置height,width等盒模型属性为0
        将元素的margin,border,padding,height和width等影响元素盒模型的属性设置成0,如果元素内有子元素或内容,还应该设置其overflow:hidden来隐藏其子元素,一种方法,不建议使用。
        
         .hiddenBox {
             margin:0;
             border:0;
             padding:0;
             height:0;
             width:0;
             overflow:hidden;
        }
        存在着一些问题。但平时我们用到的一些页面效果可能就是采用这种方式来完成的,比如jquery的slideUp动画,它就是设置元素的overflow:hidden后,接着通过定时器,不断地设置元素的height,margin-top,margin-bottom,border-top,border-bottom,padding-top,padding-bottom为0,从而达到slideUp的效果。 -->

    </body>
</html>

<!-- (6)实现一个页面,上下固定高度中间自由变化高度的布局 -->

第一种

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>This is title</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }

            html,
            body {
                height: 100%;
            }

            .container {
                display: flex;
                height: 100%;
                flex-direction: column;
            }

            .top {
                height: 100px;
                background-color: #a9ff29;
            }

            .middle {
                flex: 1;
                overflow: auto;
                background-color: #ffb91b;
            }

            .bottom {
                height: 50px;
                background-color: #40c3ff;
            }
        </style>
    </head>
    <body>
        <!-- 弹性布局 -->
        <div class="container">
            <div class="top">上</div>
            <div class="middle">中</div>
            <div class="bottom">下</div>
        </div>
    </body>
</html>

第二种

<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>This is title</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }

            html,
            body {
                height: 100%;
            }

            .container {
                display: grid;
                height: 100%;
                grid-template-rows: 100px auto 50px;
            }

            .top {
                background-color: #a9ff29;
            }

            .middle {
                background-color: #ffb91b;
            }

            .bottom {
                background-color: #40c3ff;
            }
        </style>
    </head>

    <body>
        <!-- 网格(grid)  -->
        <div class="container">
            <div class="top">上</div>
            <div class="middle">中</div>
            <div class="bottom">下</div>
        </div>
    </body>
</html>

第三种

<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>This is title</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }

            .top {
                height: 100px;
                background-color: #a9ff29;
            }

            .middle {
                height: calc(100vh - 150px);
                background-color: #ffb91b;
            }

            .bottom {
                height: 50px;
                background-color: #40c3ff;
            }
        </style>
    </head>
    <body>
        <!-- 利用css中vh单位和calc() 函数 -->
        <div class="container">
            <div class="top">上</div>
            <div class="middle">中</div>
            <div class="bottom">下</div>
        </div>
    </body>
</html>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值