首页 > 其他分享 >前端面试题(css)

前端面试题(css)

时间:2023-06-20 15:34:05浏览次数:53  
标签:面试题 right border 前端 元素 100px margin css left

1.css选择器
(1)简单选择器(元素,Id,类来选取元素,通配选择器)
(2)组合选择器(根据它们之间的特定关系来选取元素)
(3)伪类选择器(根据特定状态选取元素)
(4)伪元素选择器(选取元素的一部分并设置其样式)
(5)属性选择器(根据属性或属性值来选取元素)
2.层叠顺序

当为某个 HTML 元素指定了多个样式时,会使用哪种样式呢?

页面中的所有样式将按照以下规则“层叠”为新的“虚拟”样式表,其中第一优先级最高:

(1)行内样式(在 HTML 元素中)
(2)外部和内部样式表(在 head 部分)
(3)浏览器默认样式

因此,行内样式具有最高优先级,并且将覆盖外部和内部样式以及浏览器默认样式。

3.定位元素position 属性

position 属性规定应用于元素的定位方法的类型,有五个不同的位置值:
(1)static:

    HTML 元素默认情况下的定位方式为 static(静态)。静态定位的元素不受 top、bottom、left 和 right 属性的影响。
   
    position: static;的元素不会以任何特殊方式定位;它始终根据页面的正常流进行定位:
    
(2)relative
     相对定位,相对于元素自己的初始位置,不脱离文档流。也就是说元素框偏移某个距离,元素仍保持其未定位前的形状,它原本所占的空间仍保留。
    
     设置相对定位的元素的top、right、bottom和left属性将导致其偏离其正常位置进行调整。不会对其余内容进行调整来适应元素留下的任何空间。
     
(3)fixed
     position: fixed; 的元素是相对于视口定位的,这意味着即使滚动页面,它也始终位于同一位置。 top、right、bottom 和 left 属性用于定位此元素。
    
     固定定位的元素不会在页面中通常应放置的位置上留出空隙。
(4)absolute

     position: absolute; 的元素相对于最近的定位祖先元素进行定位(而不是相对于视口定位,如 fixed)。

     然而,如果绝对定位的元素没有祖先,它将使用文档主体(body),并随页面滚动一起移动。

     注意:“被定位的”元素是其位置除 static 以外的任何元素。
(5)sticky
    position: sticky; 的元素根据用户的滚动位置进行定位。

    粘性元素根据滚动位置在相对(relative)和固定(fixed)之间切换。起先它会被相对定位,直到在视口中遇到给定的偏移位置为止 -
    
    然后将其“粘贴”在适当的位置(比如 position:fixed)。

4.浮动和清除

float 属性规定元素如何浮动。

clear 属性规定哪些元素可以在清除的元素旁边以及在哪一侧浮动。
clear 属性可设置以下值之一:

none - 允许两侧都有浮动元素。默认值
left - 左侧不允许浮动元素
right- 右侧不允许浮动元素
both - 左侧或右侧均不允许浮动元素
inherit - 元素继承其父级的 clear 值
使用 clear 属性的最常见用法是在元素上使用了 float 属性之后。

在清除浮动时,应该对清除与浮动进行匹配:如果某个元素浮动到左侧,则应清除左侧。您的浮动元素会继续浮动,但是被清除的元素将显示在其下方。

5.水平和垂直对齐

居中对齐元素
要使块元素(例如 <div> )水平居中,请使用 margin: auto;。

设置元素的宽度将防止其延伸到容器的边缘。

然后,元素将占用指定的宽度,剩余空间将在两个外边距之间平均分配.

左和右对齐 - 使用 position

左和右对齐 - 使用 float

垂直对齐 - 使用 padding:

  padding: 70px 0;
  text-align: center;

垂直对齐 - 使用 line-height

垂直对齐 - 使用 position 和 transform


垂直对齐 - 使用 Flexbox:
  display: flex;
  justify-content: center;
  align-items: center;



6.CSS 组合器

CSS 中有四种不同的组合器:

(1)后代选择器 (空格):后代选择器匹配属于指定元素后代的所有元素。
(2)子选择器 (>):子选择器匹配属于指定元素子元素的所有元素。
(3)相邻兄弟选择器 (+)
(4)通用兄弟选择器 (~)

7.伪类

什么是伪类?
伪类用于定义元素的特殊状态。
例如,它可以用于:

设置鼠标悬停在元素上时的样式
为已访问和未访问链接设置不同的样式
设置元素获得焦点时的样式


CSS - :first-child 伪类
:first-child 伪类与指定的元素匹配:该元素是另一个元素的第一个子元素。
 常用的伪类:
 (1):first-child
 (2):first-type-of
 (3):visited
 (4):hover
 (5):active
 (6):nth-child(n)
 (7):link
 

8.伪元素

什么是伪元素?
CSS 伪元素用于设置元素指定部分的样式。

例如,它可用于:

设置元素的首字母、首行的样式
在元素的内容之前或之后插入内容
常见的伪元素:
(1)::first-letter
(2)::first-line
(3)::before
(4)::after
(5)::selection

9.三列布局

(1)浮动布局:

使用浮动实现三列布局的注意点是浮动元素需要写在内容元素之前,否则布局是混乱的。这种方式实现三列布局是优点是简单、兼容性好,但缺点是需要清除浮动,
否则父盒子的高度无法撑开,可能会导致其他页面元素的布局混乱。

 <!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
                box-sizing: border-box;
            }
              .container {
                border: 1px solid black;
                background: yellow;
                overflow: hidden; //清除浮动,使盒子成为BFC,处理浮动元素父盒子高度塌陷的问题
            }
            .left {
                border: 1px solid black;
                float: left;
                width: 100px;
                background: red;
                
            }
            .right {
                border: 1px solid black;
                float:right;
                width:100px;
                background: green;
                
            }
            .center{
                margin: 0 100px;               
            
            }
        </style>
    </head>
    <body>
    	<section class="container">
            <article class="left"><br /><br /><br /></article>
            <article class="right"><br /><br /><br /></article>
            <article class="center"></article>
        </section>
    </body>
</html>

(2)绝对定位布局

使用绝对定位实现三列布局,实际上是和之前使用绝对定位实现双列布局同一个原理。
主要思路是,两边通过绝对定位定位到父盒子的左、右边框上,
再根据实际的需要设置两边盒子的宽度,高度是根据内容自适应的。
中间内容区通过定位属性左、右自适应宽度。

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
                box-sizing: border-box;
            }
            .left {
                border: 1px solid black;
                position: absolute;
                left: 0px;
                background: red;
                width: 100px;
                
            }
            .center {
                border: 1px solid black;
                position: absolute;
                left: 100px;
                right: 100px;
                background: blue;                
            }
            .right {
                border: 1px solid black;
                position: absolute;
                right: 0px;
                width: 100px;
                background: green;
            }
            .container{
                position: relative;
                
            }
        </style>
    </head>
    <body>
    	<section class="container">
            <article class="left"><br /><br /></article>
            <article class="center"><br /><br /><br /></article>
            <article class="right"><br /><br /><br /><br /></article>
        </section>
    </body>
</html>
(3)flex布局

相比于浮动和定位,使用Flexbox布局实现三列布局要更好,
因为弹性容器的高度会根据最高的弹性项进行修正,
不会出现明显的台阶式效果。
Flexbox实现三列布局的特点为简单、使用、强大,核心思路为设置中间内容盒子的"flex: 1"属性,
让中间内容区的宽度自适应,独自占据弹性容器的全部剩余空间。

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
                box-sizing: border-box;
            }
            .left {
                border: 1px solid black;
                width: 100px;
                background: red;
            }
            .center {
                border: 1px solid black;
                flex:1;
                background: blue;
            }
            .right {
                border: 1px solid black;
                width: 100px;
                background:green;
            }
            .container{
                display: flex;
                
            }
        </style>
    </head>
    <body>
    	<section class="container">
            <article class="left"><br /><br /></article>
            <article class="center"><br /><br /><br /></article>
            <article class="right"><br /><br /><br /><br /></article>
        </section>
    </body>
</html>

(4)grid布局

使用grid网格布局实现三列布局,和之前所讲的gird实现双列布局是同样的思想,
只是把列数变为了3,高度依然不设置,通过容器项的内容高度自适应撑开整体高度。

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
             * {
                margin: 0;
                padding: 0;
                box-sizing: border-box;
            }
            .left {
                border: 1px solid black;
            }
            .center {
                border: 1px solid black;
            }
            .right {
                border: 1px solid black;
            }
            .container{
                display: grid;
                grid-template-columns: 100px auto 100px;
            }
        </style>
    </head>
    <body>
    	<section class="container">
            <article class="left"><br /><br /><br /></article>
            <article class="center"><br /><br /><br /></article>
            <article class="right"><br /><br /><br /></article>
        </section>
    </body>
</html>

(5)圣杯布局

不像Flexbox或Grid布局可以控制元素显示的次序,圣杯布局是通过浮动元素和外边距属性实现三列布局,
但最重要的一点是,在文档中需要将优先渲染的内容写在最前方,但显示时看起来却好像是按照显示次序书写的一样。

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            .container {
                border: 1px solid black;
                overflow: hidden;
                padding: 0px 100px;
                min-width: 100px;                
            }
            .left {
                background-color: red;
                float: left;
                width: 100px;
                margin-left: -100%;
                position: relative;
                left: -100px;
            }
            .center {
                background-color: blue;
                float: left;
                width: 100%;
            }
            .right {
                background-color: green;
                float: left;
                width:100px;
                margin-left: -100px;
                position: relative;
                left: 100px;
                
            }
        </style>
    </head>
    <body>
    	<section class="container">
            <article class="center">center<br /><br /><br /></article>
            <article class="left">left<br /><br /><br /></article>
            <article class="right">right<br /><br /><br /></article>
        </section>
    </body>
</html>
(6)双飞翼布局

 双飞翼布局是在圣杯布局上做了优化,解决了圣杯布局中布局发生错乱的问题。
 核心思路是在圣杯布局的基础上,再在内容区添加一层新的盒子,
 该盒子通过外边距将内容与两边的浮动元素分隔开,
 实际上中心盒子是没有"padding"属性的。
 

<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            .container {
                border: 1px solid black;
                overflow: hidden;
                
            }
            .left {
                background-color: red;
                float:left;
                margin-left: -100%;
                width:100px;
                
            }
            .center{
                width: 100%;
                float:left;
                background:yellow;
            }
            .main {
                background-color: green;
                margin: 0px 100px;
            }
            .right {
                background-color: blue;
                float:left;
                width:100px;
                margin-left: -100px;
                
            }
        </style>
    </head>
    <body>
    	<section class="container">
            <article class="center">center<main class="main">main<br /><br /><br /></main></article>
            <article class="left">left<br /><br /><br /></article>
            <article class="right">right<br /><br /><br /></article>
        </section>
    </body>
</html>


10.行内元素和块级元素有什么区别

(1)默认情况下,行内元素不会以新的一行开始,而块级元素会新起一行。
(2)块级元素可以设置width,height属性,注意:块级元素即使设置了宽度,仍然是独占一行的。而行内元素设置width, height无效。
(3)块级元素可以设置margin 和 padding。
行内元素的水平方向的padding-left,padding-right,margin-left,margin-right 都产生边距效果,但是竖直方向的padding-top,padding-bottom,margin-top,margin-bottom都不会产生边距效果。(也就是水平方向有效,竖直方向无效)
(4)块级元素可以包含行内元素和块级元素。行内元素不能包含块级元素。
(5)设置居中。

行内元素想要设置水平居中,只需要text-align属性即可。 这里设置的text-align是设置在外层的div当中,评论区有提到,
因为上面讲了行内元素设置宽高是无效的,所以我们需要的居中其实是将块级元素当中的行内元素居中。
而块级元素想要设置水平居中,设置 margin 即可。
 

标签:面试题,right,border,前端,元素,100px,margin,css,left
From: https://www.cnblogs.com/liqinzhen/p/17493754.html

相关文章

  • 前端面试基础题
    1.Ajax,Axios,Fetch有什么区别?(1)三者都用于网络请求,但是维度不同(2)Ajax(AsynchronousjavaScriptandXML),一种技术统称(3)Fetch是一个具体的API,浏览器原生API,用于网络请求,和XMLHttpRequest是一个级别,Fetch语法更加简洁,易用,支持Promise(4)Axios是第三方库(),内部可以用XMLHttpRequest或......
  • 前端面试题(js)
    1.this解析器在调用函数时,每次会向函数内部传递一个隐含的参数,这个隐含的参数就是this,this指向的是一个对象,根据函数调用方式的不同,函数会指向不同的对象。(1)以函数形式调用时,this永远指向window(2)以方法的形式调用时,this指向调用方法的对象(3)当以构造函数形式调用时,this指......
  • Electron打包若依前端为桌面程序
    下面的步骤是我事后整理的,还需要第二个项目进行验证,才能知道是否完整。1.npminstallelectron--save-dev2.npminstallelectron-builder 3.设置图标的:npminstall electron-icon-builder 3.打开env.development文件修改:VUE_APP_BASE_API='线上地址/prod-api'4.在pac......
  • Java面试题集(136-150)
    Java程序员面试题集(136-150)摘要:这一部分主要是数据结构和算法相关的面试题目,虽然只有15道题目,但是包含的信息量还是很大的,很多题目背后的解题思路和算法是非常值得玩味的。136、给出下面的二叉树先序、中序、后序遍历的序列?答:先序序列:ABDEGHCF;中序序列:DBGEHACF;后序序列:DGHEBFCA。补......
  • Java面试题集(131-135)
    131、请对以下JavaEE中的名词进行解释答:容器:容器为JavaEE应用程序组件提供了运行时支持。容器提供了一份从底层JavaEEAPI到应用程序组件的联合视图。JavaEE应用程序组件不能直接地与其它JavaEE应用程序组件交互。它们通过容器的协议和方法来达成它们之间以及它们与平台服......
  • Java面试题集(116-135)
    Java程序员面试题集(116-135)摘要:这一部分讲解基于Java的Web开发相关面试题,即便在Java走向没落的当下,基于Java的Web开发因为拥有非常成熟的解决方案,仍然被广泛应用。不管你的Web开发中是否使用框架,JSP和Servlet都是一个必备的基础,在面试的时候被问到的概率还是很高的。116、说出Servl......
  • [CSS 3] CSS Specificity
     Sohigherrankcsswilloverridelowerrankcssrules.Inlinestyleswilloverrideanyothercssrules. h1:not(.small-text)//0011-:notisnotcountedaspseudoclasselementdivh1:first-child//0012-2tags,1pseudo-classdivh1.larget-text::......
  • 前端学习笔记_思维导图和资源链接
    17素材资源jQueryapi中文文档脑图-前端总结脑图-jquery总结脑图-js正则总结后台主题框架echartsjQuery插件adminlte......
  • 一道SQL面试题(行列互换)
    有一个SQL题在面试中出现的概率极高,最近有学生出去面试仍然会遇到这样的题目,在这里跟大家分享一下。题目:数据库中有一张如下所示的表,表名为sales。年季度销售量19911111991212199131319914141992121199222219923231992424要求:写一个SQL语句查询出如下所示的结果。年一季度二季度三......
  • HTML&CSS&JavaScript思维导图
    ......