前端面试笔试题目-CSS专项练习(进阶)(下)

简介: 前端面试笔试题目-CSS专项练习(进阶)(下)

7、绝对定位(absolute)


绝对定位会把元素拿出文档流,不会再占据原来的空间。绝对定位元素的父级是距离该元素最近的定位祖先,也就是"position"属性不为"static"的最近任意祖先。如果没有这个定位祖先,那么绝对定位元素就相对于文档的根元素"html"进行定位。

当前类名为"outer"、“middle”、“inner"的盒子(外、中、里盒子)嵌套在一起,现在给三个盒子均设置左内边距10px,再自定义盒子背景颜色以便于观察。再给里盒子设置绝对定位属性"position:

absolute”,会发现里盒子的位置并没有发生改变,因为绝对定位的默认位置是当前绝对定位盒子在流中的位置。

继续给里盒子设置"left:0px"属性,观察到里盒子是根据最外层盒子定位的,直接绕过了中间盒子,这是由于中间盒子的定位属性为默认的"static",此时再给中间盒子设置定位属性"position:absolute",会发现里盒子现在是根据中间盒子重新定位的。

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            .outer {
                width: 100px;
                height: 100px;
                padding-left:10px;
                background-color:black;
            }
            .middle {
                width: 100px;
                height: 100px;
                padding-left:10px;
                background-color:red;
                position:absolute;
            }
            .inner {
                width: 100px;
                height: 100px;
                padding-left:10px;
                background-color:yellow;
                position:absolute;
                left:0px;
            }
        </style>
    </head>
    <body>
      <div class="outer">
            <div class="middle">
                <div class="inner">
                </div>
            </div>
        </div>
    </body>
</html>

总结


  • position:absolute;属性,会根据position属性不为"static"的最近任意祖先,如果没有这个定位祖先,那么绝对定位元素就相对于文档的根元素"html"进行定位。


8、绝对定位(absolute) - 评注


绝对定位非常适合创建弹出层、提示和对话框等覆盖于其他内容之上的组件。比如有一篇文章,可以给文章添加一些行内的评注,最好以气泡图的样式显示在文章外部的空白区域中。

绝对定位的元素默认会待在自己还在流中时的地方,现在给"aside"盒子设置绝对定位属性"position:absolute",此时"aside"盒子从流中出来并且覆盖住了下方的元素,现在可以将它向左移动一些,把它定位到文章内容的左边。"article"盒子的左外边距为10rem,想让"aside"评注放在左边空白处的中间,需要进行计算,这里省略计算步骤。

现在只需要将评注组件向左移动9rem即可。现在给评注组件置"margin-left:-9rem",在CSS中,负边距是完全有效的,负左外边距可以将元素往左拉,其他有趣的效果这里不做赘述。此时观察效果,评注在"相煎何太急?"内容的左边,可以很醒目的告诉读者该句的意思。

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            article {
                margin-left: 10rem;
            }
            aside {
                width: 5rem;
                padding: 1rem;
                color: white;
                background-color: pink;
                border-radius: 0.5rem;
                position:absolute;
                margin-left:-9rem;
            }
            aside:after {
                content: '';
                position: absolute;
                display: block;
                width: 0;
                height: 0;
                border: 0.5rem solid pink;
                border-bottom-color: transparent;
                border-right-color: transparent;
                right: -1rem;
                top: 0.5rem;
            }
            .note {
                color: green;
                text-decoration-line: underline;
            }
        </style>
    </head>
    <body>
      <section>
            <article>
                <p>煮豆燃豆萁,</p>
                <p>豆在釜中泣。</p>
                <p>本是同根生,</p>
                <aside>豆秸怎能这样急迫地煎熬豆子呢?</aside>
                <p class='note'>相煎何太急?</p>
            </article>
        </section>
    </body>
</html>

9、堆叠顺序定位(z-index)


z-index属性设置元素的堆叠顺序,拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的上面。z-index可以设置为负数,且该属性只能作用于定位元素。

现在给"img"图片标签添加"position: absolute"、"left: 0px"和"top: 0px"属性,此时会发现图片被定绝对定位在了页面的左上角,并且遮挡住了下方的内容。现在继续给图片标签添加"z-index: -1"属性,现在图片堆叠在了字体内容的下方。


<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            img{
                position:absolute;
                left:0px;
                top:0px;
                z-index:-1;
            }
        </style>
    </head>
    <body>
      <h1>The countdown to Christmas starts here.</h1>
        <img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fuploads.xuexila.com%2Fallimg%2F1912%2F1135-191202143454.jpg&refer=http%3A%2F%2Fuploads.xuexila.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1639984107&t=eca951193e736a17eb96278117bcfb1f" width="100">
        <p>由于图像的 z-index 是 -1,因此它在文本的后面出现。</p>
    </body>
</html>

结果:


25cbb5f6963f44378170cb94e4e3fe61.png

总结:


  • z-index属性设置元素的堆叠顺序,拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的上面


10、相对定位(relative)


相对定位的元素仍然会待在原来的地方,即不会从流中出来。此后可以通过"top"、“right”、"bottom"和"left"属性使元素相对于初始位置进行移动。

现在给类名为"center"的盒子设置相对定位属性"position: relative"、设置"left: 50px"、设置"top: 50px",再自定义背景颜色以便于观察。此时可以观察到中间盒子在原始的位置上向右、向下均移动了50px的距离,并且保留了原来的空间。

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            .left {
                width: 100px;
                height: 100px;
            }
            .center {
                width: 100px;
                height: 100px;
                position:relative;
                background-color:black;
                left:50px;
                top:50px;
            }
            .right {
                width: 100px;
                height: 100px;
            }
        </style>
    </head>
    <body>
      <div class="left"></div>
        <div class="center"></div>
        <div class="right"></div>
    </body>
</html>


结果:


334b7ae6177448e5ac68cf9a65babdfe.png

总结:


  • position:relative;仍然会待在原来的地方,即不会从流中出来。此后可以通过"top"、“right”、"bottom"和"left"属性使元素相对于初始位置进行移动。


11、HTML绝对定位(relative)


固定定位是由绝对定位衍生出来的,不同之处在于,固定定位元素的父级始终是视口。因此固定定位可以用来创建始终停留在窗口相同位置的元素。比如:固定侧栏、固定顶栏等。这样方便用户,不必再费事寻找栏目。

现在给"nav"盒子设置固定定位属性"position: fixed"、设置"top: 0"、设置自定义宽度、背景颜色。此时滑动滚轮,可以发现"nav"盒子始终固定在页面的最上方。但是,数字1却被覆盖了。由于固定定位的盒子不在流中,所以遮盖住了下方的元素。此时再给"section"盒子设置上外边距为1rem,此时1数字正常出现了。固定定位需要注意下方是否有元素被遮挡。

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            nav{
                width:100%;
                height:20px;
                background-color:black;
                position:fixed;
                top:0px;
            }
            section{
                margin-top:1rem;
            }
        </style>
    </head>
    <body>
      <nav><br /></nav>
        <section>1<br />2<br /></section>
    </body>
</html>

结果:


7151d8d516aa4e519dcdbbe3bc4e361d.png


总结:


  • position:fixed;属性固定定位元素的父级始终是视口


12、HTML绝对定位(relative) -广告


固定定位不仅可以用于导航栏目,还可以用于控制中心、广告、重要提示内容等。本节使用固定定位实现一个广告牌功能,关闭按钮和该按钮的功能已给出,当点击按钮时,广告牌会消失。

现在给类名为"advert"的盒子设置固定定位属性"position: fixed"、设置"right: 0"、设置"bottom: 0",此时广告牌的位置被固定在了视口的右下方。

现在还需要将关闭按钮定位在广告牌的右上方,继续给类名为"x"的按钮盒子设置绝对定位属性"position: absolute"、设置"right: 0",观察按钮的位置,已经被定位在了广告牌的右上方。一个简易的广告牌就设计完成了。

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            .advert {
                width: 300px;
                height: 200px;
                background-color: black;
                position:fixed;
                right:0px;
                bottom:0px;
            }
            .advert:first-line {
                color: white;
            }
            .x{
                position:absolute;
                right:0px;
            }
        </style>
    </head>
    <body>
      <section class="advert">
            广告文案
            <button class="x">x</button>
        </section>
        <script>
            document.querySelector('button').onclick = function() {
                this.parentNode.style.display = 'none'
            }
        </script>
    </body>
</html>

13、display-flex(弹性盒子)


Flexbox,也就是Flexible Box Layout模块(弹性盒子),是CSS提供的用于布局的一套新属性。这套属性包含针对容器、容器直接子元素(弹性项)的两类属性。Flexbox可以控制弹性项的这几个方面:

大小,基于内容以及可用空间

流动方向,水平还是垂直,正向还是反向

两个轴向上的对齐与分布

顺序,与源代码中的顺序无关

现在给"ul"标签添加"display: flex"属性,让该列表成为flex容器,注意:除非另有声明,否则该属性默认弹性项排列方向为正横向,即"flex-direction: row"。现在可以看到,列表内容已经是水平排列,并且根据各自的内容宽度进行了收缩。

现在对主轴(即"flex-direction"属性声明的轴向)进行排列,该属性为"justify-content"且默认值为"flex-start",现在给"ul"标签设置"justify-content: center"属性,可以发现弹性项在主轴上已经居中了。但是此时会发现由于"home"的字体比其他字体大,所以弹性项在辅轴(与主轴对应的另一方向的轴)上并没有对齐,这是由于控制辅轴对齐方式的"align-items"属性默认为"stretch"即拉伸,会占满"ul"的所有高度空间,并且该行的基线是默认的。

现在再给"ul"标签添加"align-items: center"属性,会发现"li"标签此时没有撑满"ul"标签的高度,并且在辅轴上是居中对齐的,如果给该属性设置"baseline"值,仅仅会在辅轴上将内容文字对齐。

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
                box-sizing: border-box;
            }
            nav ul {
                height: 2rem;
                list-style: none;
                /*列表成为flex容器*/
                display:flex;
                /*弹性项在主轴上居中*/
                justify-content:center;
                /*标签在辅轴上居中对齐*/
                align-items:center;
            }
            nav ul li {
                border: 1px solid black;
            }
            nav ul li:first-child {
                font-size: 1.2rem;
            }
        </style>
    </head>
    <body>
      <nav>
            <ul>
                <li>home</li>
                <li>spaceships</li>
                <li>planets</li>
                <li>stars</li>
            </ul>
        </nav>
    </body>
</html>

结果:

c78f76f783e8465684d5f3f584c030b0.png


总结:


  • 采用Flex布局的元素,被称为Flex容器(flex container),简称“容器”。其所有子元素自动成为容器成员,成为Flex项目(Flex item),简称“项目”。


14、display - flex(可伸缩项属性)


Flexbox支持对弹性项的灵活控制。Flex的意思为可伸缩,这体现在以下三个属性中:

flex-basis:基础值

flex-grow:拉伸弹性系数,如果容器宽度减去弹性项的基础值之和之后还有剩余空间,那么就按照弹性系数比例去分配剩余空间

flex-shrink:缩减弹性系数,和拉伸弹性系数逻辑相反,这三个属性应用给弹性项,而不是容器。现在首先给所有的"li"添加"flex: 1 0 0%"属性,该属性的三个值分别为flex-grow、flex-shrink和flex-basis,表示:当有剩余空间时均匀分配剩余空间、当超出容器宽度时不进行缩放、弹性项的基础值都为容器的0%。此时可以看到四个每个"li"标签的宽度都为125px,分别占据了容器的1/4。

现在再单独给第一个"li"标签设置"flex-grow: 2"属性,此时又会发现所有"li"标签的宽度比值为2:1:1:1。

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            nav {
                width: 500px;
            }
            nav ul {
                display: flex;
                list-style: none;
            }
            nav ul li{
                flex:1 0 0%;
            }            
            nav ul li:first-child{
                flex-grow:2;
            }
        </style>
    </head>
    <body>
       <nav>
            <ul>
                <li>home</li>
                <li>spaceships</li>
                <li>planets</li>
                <li>stars</li>
            </ul>
        </nav>
    </body>
</html>


结果:

ffc3d3e2cd8a4177b36e906a032da6b2.png


相关文章
|
4月前
|
Web App开发 缓存 前端开发
浏览器常见面试题目及详细答案解析
本文围绕浏览器常见面试题及答案展开,深入解析浏览器组成、内核、渲染机制与缓存等核心知识点。内容涵盖浏览器的主要组成部分(如用户界面、呈现引擎、JavaScript解释器等)、主流浏览器内核及其特点、从输入URL到页面呈现的全过程,以及CSS加载对渲染的影响等。结合实际应用场景,帮助读者全面掌握浏览器工作原理,为前端开发和面试提供扎实的知识储备。
170 4
|
4月前
|
缓存 NoSQL Java
Java Redis 面试题集锦 常见高频面试题目及解析
本文总结了Redis在Java中的核心面试题,包括数据类型操作、单线程高性能原理、键过期策略及分布式锁实现等关键内容。通过Jedis代码示例展示了String、List等数据类型的操作方法,讲解了惰性删除和定期删除相结合的过期策略,并提供了Spring Boot配置Redis过期时间的方案。文章还探讨了缓存穿透、雪崩等问题解决方案,以及基于Redis的分布式锁实现,帮助开发者全面掌握Redis在Java应用中的实践要点。
198 6
|
9月前
|
前端开发 JavaScript 开发者
前端 CSS 优化:提升页面美学与性能
前端CSS优化旨在提升页面美学与性能。通过简化选择器(如避免复杂后代选择器、减少通用选择器使用)、合并样式表、合理组织媒体查询,可减少浏览器计算成本和HTTP请求。利用硬件加速和优化动画帧率,确保动画流畅。定期清理冗余代码并使用缩写属性,进一步精简代码。这些策略不仅加快页面加载和渲染速度,还提升了视觉效果,为用户带来更优质的浏览体验。
|
4月前
|
算法 Java 关系型数据库
校招 Java 面试基础题目解析及学习指南含新技术实操要点
本指南聚焦校招Java面试,涵盖Java 8+新特性、多线程与并发、集合与泛型改进及实操项目。内容包括Lambda表达式、Stream API、Optional类、CompletableFuture异步编程、ReentrantLock与Condition、局部变量类型推断(var)、文本块、模块化系统等。通过在线书店系统项目,实践Java核心技术,如书籍管理、用户管理和订单管理,结合Lambda、Stream、CompletableFuture等特性。附带资源链接,助你掌握最新技术,应对面试挑战。
89 2
|
4月前
|
安全 Java 编译器
Java 校招面试题目合集及答案 120 道详解
这份资料汇总了120道Java校招面试题目及其详细答案,涵盖Java基础、JVM原理、多线程、数据类型、方法重载与覆盖等多个核心知识点。通过实例代码解析,帮助求职者深入理解Java编程精髓,为校招面试做好充分准备。无论是初学者还是进阶开发者,都能从中受益,提升技术实力和面试成功率。附带的资源链接提供了更多学习材料,助力高效备考。
152 3
|
4月前
|
存储 算法 Java
校招 java 面试基础题目及解析
本文围绕Java校招面试基础题目展开,涵盖平台无关性、面向对象特性(封装、继承、多态)、数据类型、关键字(static、final)、方法相关(重载与覆盖)、流程控制语句、数组与集合、异常处理等核心知识点。通过概念阐述和代码示例,帮助求职者深入理解并掌握Java基础知识,为校招面试做好充分准备。文末还提供了专项练习建议及资源链接,助力提升实战能力。
125 0
|
6月前
|
前端开发
|
6月前
|
前端开发
|
6月前
|
前端开发 JavaScript
|
6月前
|
XML 前端开发 JavaScript

热门文章

最新文章