回答: CSS 选择器用于选择 HTML 元素,以便应用样式。常见的选择器有:
元素选择器:选择所有指定类型的元素。
p {
color: blue;
}
类选择器:选择所有带有指定类的元素。
.class-name {
color: green;
}
ID 选择器:选择带有指定 ID 的元素。
#id-name {
color: red;
}
属性选择器:选择带有指定属性的元素。
[type="text"] {
border: 1px solid black;
}
后代选择器:选择所有是某元素后代的元素。
div p {
color: purple;
}
伪类选择器:选择处于特定状态的元素,如 :hover
、:first-child
等。
a:hover {
color: orange;
}
回答: CSS 盒模型描述了一个元素在文档布局中的占据空间的方式,包括以下部分:
示例:
div {
width: 100px;
height: 100px;
padding: 10px;
border: 5px solid black;
margin: 20px;
}
该 div
元素的总宽度和高度计算如下:
flexbox
布局模型及其常见属性。回答:
flexbox
是一种一维布局模型,用于在容器中分配空间并排列项目。它可以使容器内的元素在不确定容器大小的情况下很好地排列。
常见属性:
display: flex
:定义一个 flex 容器,启用 flexbox 布局。
flex-direction
:设置主轴方向。
flex-direction: row | row-reverse | column | column-reverse;
justify-content
:在主轴上对齐项目。
justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
align-items
:在交叉轴上对齐项目。
align-items: flex-start | flex-end | center | baseline | stretch;
flex-wrap
:定义项目是否在容器中换行。
flex-wrap: nowrap | wrap | wrap-reverse;
示例:
.container {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
}
回答: CSS 网格布局(Grid Layout)是一种二维布局系统,可以同时处理行和列,用于创建复杂的网页布局。
常见属性:
display: grid
:定义一个网格容器,启用网格布局。
grid-template-columns
和 grid-template-rows
:定义网格的列和行。
grid-template-columns: 100px 200px auto;
grid-template-rows: 100px 200px;
grid-column-gap
和 grid-row-gap
:设置列和行之间的间隙。
grid-column-gap: 10px;
grid-row-gap: 20px;
grid-template-areas
:定义网格区域的布局。
grid-template-areas:
"header header header"
"sidebar main main"
"footer footer footer";
grid-area
:为单个项目指定网格区域。
.header {
grid-area: header;
}
示例:
.container {
display: grid;
grid-template-columns: 1fr 2fr;
grid-template-rows: auto;
grid-gap: 10px;
}
.item1 {
grid-column: 1 / 2;
grid-row: 1 / 3;
}
.item2 {
grid-column: 2 / 3;
grid-row: 1 / 2;
}
回答: CSS 伪类用于选择元素的特定状态,伪元素用于选择元素的特定部分。
伪类(Pseudo-classes):选择元素的特殊状态。
:hover
:鼠标悬停时的元素。
a:hover {
color: red;
}
:nth-child(n)
:选择父元素的第 n 个子元素。
li:nth-child(2) {
color: blue;
}
:first-child
:选择父元素的第一个子元素。
p:first-child {
font-weight: bold;
}
伪元素(Pseudo-elements):选择元素的特定部分。
::before
:在元素内容之前插入内容。
p::before {
content: "Note: ";
font-weight: bold;
}
::after
:在元素内容之后插入内容。
p::after {
content: " Read more...";
}
::first-line
:选择元素的第一行。
p::first-line {
font-style: italic;
}
回答: 响应式设计通过 CSS 媒体查询和灵活的布局实现,以确保网页在不同设备和视口上表现良好。
媒体查询:根据视口的宽度、高度、分辨率等条件应用不同的样式。
@media (max-width: 600px) {
.container {
flex-direction: column;
}
}
百分比和相对单位:使用百分比或相对单位代替固定像素,创建灵活的布局。
.container {
width: 80%;
}
弹性盒布局(Flexbox) 和 网格布局(Grid Layout):使用现代布局技术创建灵活的布局。
.container {
display: flex;
flex-wrap: wrap;
}
视口单位:使用 vw
、vh
等单位。
.container {
width: 50vw;
}
position
属性及其值。回答:
position
属性用于指定元素的定位方式。常见的值有:
static
:默认值,元素按照正常的文档流进行定位。
.element {
position: static;
}
relative
:相对定位,元素相对于其正常位置进行定位。
.element {
position: relative;
top: 10px;
left: 20px;
}
absolute
:绝对定位,元素相对于最近的已定位祖先元素进行定位。
.element {
position: absolute;
top: 10px;
left: 20px;
}
fixed
:固定定位,元素相对于浏览器窗口进行定位,不会随滚动条滚动。
.element {
position: fixed;
top: 10px;
left: 20px;
}
sticky
:粘性定位,元素在滚动
到特定位置时变为固定定位。
.element {
position: sticky;
top: 0;
}
box-sizing
属性及其值。回答:
box-sizing
属性用于定义元素的宽度和高度是否包括内边距和边框。
content-box
:默认值,宽度和高度只包括内容,不包括内边距和边框。
.element {
box-sizing: content-box;
}
border-box
:宽度和高度包括内容、内边距和边框。
.element {
box-sizing: border-box;
}
示例:
.element {
width: 100px;
height: 100px;
padding: 10px;
border: 5px solid black;
box-sizing: border-box;
}
在这个示例中,.element
的总宽度和高度仍然是 100px,因为 box-sizing: border-box
包括了内边距和边框。
float
属性?如何清除浮动?回答:
float
属性用于让元素在文档中向左或向右浮动,常用于创建多列布局。
示例:
.left {
float: left;
width: 50%;
}
.right {
float: right;
width: 50%;
}
浮动元素会影响后续元素的布局,为了避免这种影响,可以使用清除浮动。
clear
属性。
.clearfix::after {
content: "";
display: block;
clear: both;
}
示例:
<div class="clearfix">
<div class="left">Left column</div>
<div class="right">Right column</div>
</div>
.container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.container {
display: grid;
place-items: center;
height: 100vh;
}
.container {
position: relative;
height: 100vh;
}
.content {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.container {
display: table;
height: 100vh;
width: 100%;
}
.content {
display: table-cell;
vertical-align: middle;
text-align: center;
}
CSS 选择器的优先级由以下规则决定:
当然,还有更多关于 CSS 的面试题及其详细答案解答。
display
属性及其常见值。回答:
display
属性用于设置元素的显示类型。
常见值:
block
:将元素显示为块级元素,独占一行。
.element {
display: block;
}
inline
:将元素显示为行内元素,不独占一行。
.element {
display: inline;
}
inline-block
:将元素显示为行内块级元素,既具有块级元素的特性(如设置宽高),又保持行内元素的特性。
.element {
display: inline-block;
}
none
:隐藏元素,不占据任何空间。
.element {
display: none;
}
flex
:将元素显示为弹性盒容器,使其子元素使用 flex 布局。
.container {
display: flex;
}
grid
:将元素显示为网格容器,使其子元素使用 grid 布局。
.container {
display: grid;
}
回答: CSS 变量,也称为自定义属性,允许在 CSS 中定义变量,并在整个文档中重用它们。
定义变量:
:root {
--main-color: #3498db;
--padding: 10px;
}
使用变量:
.element {
color: var(--main-color);
padding: var(--padding);
}
在这个示例中,--main-color
和 --padding
是定义在 :root
选择器中的全局变量,可以在其他样式中使用 var()
函数引用。
transition
属性及其常见用途。回答:
transition
属性用于在元素的某些属性发生变化时,定义过渡效果。
常见属性:
transition-property
:指定应用过渡效果的属性。
transition-property: all | property-name;
transition-duration
:定义过渡效果的持续时间。
transition-duration: 1s | 500ms;
transition-timing-function
:指定过渡效果的时间函数。
transition-timing-function: ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(n,n,n,n);
transition-delay
:定义过渡效果的延迟时间。
transition-delay: 0s | 2s;
综合使用:
.element {
transition: all 0.3s ease-in-out;
}
.element:hover {
background-color: red;
transform: scale(1.2);
}
在这个示例中,当 .element
元素被鼠标悬停时,背景颜色和缩放比例会在 0.3 秒内平滑变化。
@keyframes
定义动画?回答:
CSS 动画用于在一段时间内创建元素的复杂动画效果。通过 @keyframes
定义动画步骤。
定义动画:
@keyframes slideIn {
from {
transform: translateX(-100%);
}
to {
transform: translateX(0);
}
}
使用动画:
.element {
animation: slideIn 1s ease-in-out;
}
在这个示例中,.element
元素会在 1 秒内从左侧滑入到其原始位置。
transform
属性及其常见值。回答:
transform
属性用于应用 2D 或 3D 变换效果,如旋转、缩放、移动或倾斜。
常见值:
translate(x, y)
:移动元素。
transform: translate(50px, 100px);
scale(x, y)
:缩放元素。
transform: scale(1.5, 2);
rotate(angle)
:旋转元素。
transform: rotate(45deg);
skew(x-angle, y-angle)
:倾斜元素。
transform: skew(20deg, 10deg);
matrix(a, b, c, d, e, f)
:应用 2D 矩阵变换。
transform: matrix(1, 0.5, -0.5, 1, 0, 0);
示例:
.element {
transform: translate(50px, 100px) scale(1.2) rotate(45deg);
}
在这个示例中,.element
元素会先移动,然后缩放,最后旋转。
filter
属性?列举几种常见的滤镜效果。回答:
filter
属性用于应用图形效果,如模糊或颜色偏移,通常用于图像。
常见滤镜效果:
blur(radius)
:应用模糊效果。
filter: blur(5px);
brightness(percentage)
:调整亮度。
filter: brightness(150%);
contrast(percentage)
:调整对比度。
filter: contrast(200%);
grayscale(percentage)
:应用灰度效果。
filter: grayscale(100%);
sepia(percentage)
:应用棕褐色效果。
filter: sepia(100%);
hue-rotate(angle)
:调整色相。
filter: hue-rotate(90deg);
示例:
.image {
filter: grayscale(100%) blur(2px);
}
在这个示例中,.image
元素会被应用灰度和模糊效果。
回答: 使用媒体查询和 Flexbox 可以创建一个响应式导航栏,当视口宽度较小时变为垂直布局。
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Responsive Navbar</title>
<style>
.navbar {
display: flex;
justify-content: space-between;
background-color: #333;
padding: 10px;
}
.navbar a {
color: white;
padding: 14px 20px;
text-decoration: none;
text-align: center;
}
.navbar a:hover {
background-color: #ddd;
color: black;
}
@media (max-width: 600px) {
.navbar {
flex-direction: column;
align-items: flex-start;
}
.navbar a {
display: block;
width: 100%;
}
}
</style>
</head>
<body>
<div class="navbar">
<a href="#home">Home</a>
<a href="#services">Services</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</div>
</body>
</html>
在这个示例中,导航栏在视口宽度小于 600px 时变为垂直布局,导航链接占据 100% 的宽度。
calc()
函数?如何使用它?回答:
calc()
函数用于动态计算 CSS 属性值,可以混合使用不同的单位。
示例:
.element {
width: calc(100% - 50px);
padding: calc(10px + 2%);
margin-left: calc(1em + 5%);
}
在这个示例中,.element
的宽度为父容器的 100% 减去 50px,内边距为 10px 加上 2% 的父容器宽度,左外边距为 1em 加上父容器宽度的 5%。