前端面试题:页面布局

题目

  • 实现如下页面布局。核心区域左侧自适应,右侧固定宽度 200px
    前端面试题:页面布局_第1张图片

解决思路一

  • 侧边栏aside通过负值左外边距得以和content共处一行
  • 真正的自适应内容则放置在content的内部,使用右外边距得以和aside保持固定距离
  • 使用overflow:hidden清除浮动

实现代码

html:


<html lang="zh-cn">
<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>Documenttitle>
    <link rel="stylesheet" href="css/main.css" media="screen">
head>
<body>
    <div class="head">
        <div class="logo">
            logo
        div>
        <div class="username">
            用户名
        div>
    div>
    <div class="main">
        <div class="content">
            <div class="real">content-自适应宽度div>
        div>
        <div class="aside">
            aside-定宽200px
        div>
    div>
    <div class="footer">
        footer
    div>
body>
html>

css:

*{
    margin: 0;
    padding: 0;
}
.head{
    height: 70px;
    margin: 10px;
    overflow: hidden;
    border: 2px solid green;
}
.logo{
    width: 50px;
    height: 50px;
    margin: 10px;
    float: left;
    border: 1px solid red;
}
.username{
    width: 150px;
    margin: 40px 10px 0px 0px;
    float: right;
    text-align: right;
    border: 1px solid black;
}
.main{
    margin: 10px;
    overflow: hidden;
}
.content{
    width: 100%;
    float: left;
}
.real{
    border: 2px solid blue;
    height: 400px;
    margin-right: 220px;
}
.aside{
    width: 200px;
    margin-left: -204px; 
    float: left;
    border: 2px solid red;
}
.footer{
    height: auto;
    margin: 0 10px;
    text-align: center;
    border: 2px solid black;
}

运行截图

前端面试题:页面布局_第2张图片

解决思路二

  • 使用grid属性构建网格布局
  • .header中通过flex属性完成对.logo.username的定位

实现代码

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">
    <link rel="stylesheet" href="css/grid.css" media="screen">
    <title>grid布局title>
head>

<body>
    <div class="container">
        <div class="header">
            <div class="logo">logodiv>
            <div class="username">usernamediv>
        div>
        <div class="content">content-自适应宽度div>
        <div class="aside">aside-定宽200pxdiv>
        <div class="footer">footerdiv>
    div>

body>

html>

css:

.header{
    display:flex;
    justify-content: space-between;
    grid-area: header;
    border: 2px solid green;
    margin: 10px;
}
.logo{
    align-self: flex-start;
    height: 50px;
    width: 50px;
    margin: 5px 0 0 5px;
    border: 1px solid gold;
    padding: 5px;
}
.username{
    align-self: flex-end;
    height: 25px;
    width: 150px;
    margin: 0 5px 5px 0;
    border: 1px solid rgb(255, 30, 199);
    text-align: right;
    padding: 5px;
}
.content{
    grid-area: content;
    border: 2px solid blue;
    margin-left: 10px;
    padding: 5px;
}
.aside{
    grid-area: aside;
    border: 2px solid red;
    margin-right: 10px;
    padding: 5px;
}
.footer{
    grid-area: footer;
    border: 2px solid black;
    margin: 10px;
    text-align: center;
    padding: 5px;
}
.container{
    display: grid;
    grid-column-gap: 20px;
    grid: 
        [row-start] "header header" 100px [row-end]
        [row-start] "content aside" 400px [row-end]
        [row-start] "footer footer" auto [row-end]
        / auto 200px;
}

运行截图

前端面试题:页面布局_第3张图片

你可能感兴趣的:(前端基础)