html练习,图片显示问题请教
本帖最后由 黑色Ace 于 2024-8-21 09:42 编辑【写在前面】我知道我写的很烂,其实是在其他模版上自己瞎改的,没有系统学过,但因为急用,所以请大伙轻点喷~
【想要效果】创建840*750大小的区域,其中第一行是photo1,占840*100,第二行是photo2和photo3并排,分别占420*650。三个区域初始显示旧图,鼠标移动到任一区域,会显示该区域的新图,且对应区域的边框有亮色提示,点击对应区域可以跳转网页
【实际效果】
【存在问题】
问题一:photo2和photo3无法并排,测试发现photo3的width小于等于410px时可以并排,但整体格式未对齐
问题二:图片下方出现一条空白区域,查阅发现和“基线对齐”相关,但已经添加了“display: block;”,且也试过“vertical-align:middle;”,都是一样的情况【感谢~】请大伙麻烦帮看看问题出在哪里,该怎么修改,万分感谢!【源代码】
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>test</title>
</head>
<body>
<html>
<head>
<style type="text/css">
/** 重置浏览器默认标签样式 */
* {
margin: 0;
padding: 0;
}
body {
background-image: url(img/background.jpg);
background-size: cover;
}
.xttblog {
width: 840px; /** 大框宽 */
height: 750px; /** 大框高 */
margin-top: 30px; /** 顶距 */
margin-left: auto;
margin-right: auto;
color: black;
}
.box {
list-style-type: none;
}
.box:after {
content: ".";
display: block;
line-height: 0;
width: 0;
height: 0;
clear: both;
visibility: hidden;
overflow: hidden;
}
.box li {
float: left;
}
.box li a, .box li a:visited {
display: block;
border: 5px solid #ccc; /** 框线厚度 */
margin-left: -5px; /** 框线重叠 */
margin-top: -5px; /** 框线重叠 */
position: relative;
z-index: 1;
}
.box li a:hover {
border-color: rgb(233, 99, 121);
z-index: 2;
}
</style>
</head>
<body>
<div class="xttblog">
<ul class="box">
<li><a class="photo1" target="_blank" href="../1/1.html"><img src="img/1.jpg" onmouseover='this.src="img/1-after.jpg"' onmouseout='this.src="img/1.jpg"' width="840px" height="100px" /></a></li>
<li><a class="photo2" target="_blank" href="../2/2.html"><img src="img/2.jpg" onmouseover='this.src="img/2-after.jpg"' onmouseout='this.src="img/spring.jpg"' width="420px" height="650px" /></a></li>
<li><a class="photo3" target="_blank" href="../3/3.html"><img src="img/3.jpg" onmouseover='this.src="img/3-after.jpg"' onmouseout='this.src="img/summer.jpg"' width="420px" height="650px"/></a></li>
</ul>
</body>
</html>
对`.box li`的宽度设置为`50%`,这样两个图片就可以并排显示。同时,移除了每个`<img>`标签的固定宽度和高度,并设置了`.box img`的宽度和高度为`100%`和`auto`,这样图片就会自动调整大小以适应其父元素`<a>`的尺寸,同时保持图片的原始比例。
注意,由于`<li>`的宽度设置为`50%`,所以这里假设只有两个图片要并排显示。如果有更多的图片需要并排显示,那么`<li>`的宽度应该相应调整为`100% / 图片数量`。 尺寸要考虑边框。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>test</title>
<style type="text/css">
/** 重置浏览器默认标签样式 */
* {
margin: 0;
padding: 0;
}
body {
background-image: url(img/background.jpg);
background-size: cover;
}
.xttblog {
width: 840px;
/** 大框宽 */
height: 750px;
/** 大框高 */
margin-top: 30px;
/** 顶距 */
margin-left: auto;
margin-right: auto;
color: black;
}
.box {
list-style-type: none;
}
.box:after {
content: ".";
display: block;
line-height: 0;
width: 0;
height: 0;
clear: both;
visibility: hidden;
overflow: hidden;
}
.box li {
float: left;
}
.box li a,
.box li a:visited {
display: block;
/* border: 5px solid #ccc; */
/** 框线厚度 */
/* margin-left: -5px; */
/** 框线重叠 */
/* margin-top: -5px; */
/** 框线重叠 */
position: relative;
z-index: 1;
}
.box li a:hover {
border-color: rgb(233, 99, 121);
z-index: 2;
}
</style>
</head>
<body>
<div class="xttblog">
<ul class="box">
<li><a class="photo1" target="_blank" href="../1/1.html"><img src="img/1.jpg"
onmouseover='this.src="img/1-after.jpg"' onmouseout='this.src="img/1.jpg"' width="840px"
height="100px" /></a>
</li>
<li>
<ul class="box" style="display: flex;">
<li><a class="photo2" target="_blank" href="../2/2.html"><img src="img/2.jpg"
onmouseover='this.src="img/2-after.jpg"' onmouseout='this.src="img/spring.jpg"'
width="420px" height="650px" /></a>
</li>
<li><a class="photo3" target="_blank" href="../3/3.html"><img src="img/3.jpg"
onmouseover='this.src="img/3-after.jpg"' onmouseout='this.src="img/summer.jpg"'
width="420px" height="650px" /></a>
</li>
</ul>
</li>
</ul>
</body>
</html> <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>test</title>
</head>
<body>
<html>
<head>
<style type="text/css">
* {
box-sizing: border-box;
}
.flex {
display: flex;
}
.photo1 {
width: 840px;
height: 100px;
}
.photo2,
.photo3 {
width: 420px;
height: 650px;
}
.photo3 {
}
.photo1,
.photo2,
.photo3 {
border: 5px solid #ccc;
}
.photo1:hover,
.photo2:hover,
.photo3:hover {
border-color: rgb(233, 99, 121);
}
img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
</head>
<body>
<div class="photo1">
<a target="_blank" href="../1/1.html"
><img
src="https://img0.baidu.com/it/u=2852972384,536914861&fm=253&fmt=auto&app=120&f=JPEG?w=750&h=500"
onmouseover='this.src="https://img1.baidu.com/it/u=3046933795,1481568088&fm=253&fmt=auto&app=138&f=JPEG?w=750&h=500"'
onmouseout='this.src="https://img0.baidu.com/it/u=2852972384,536914861&fm=253&fmt=auto&app=120&f=JPEG?w=750&h=500"'
/></a>
</div>
<div class="flex">
<div class="photo2">
<a target="_blank" href="../2/2.html"
><img
src="https://img2.baidu.com/it/u=3552294757,3243191882&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=889"
onmouseover='this.src="https://img1.baidu.com/it/u=3832935010,529609358&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=730"'
onmouseout='this.src="https://img2.baidu.com/it/u=3552294757,3243191882&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=889"'
/></a>
</div>
<div class="photo3">
<a target="_blank" href="../3/3.html"
><img
src="https://img0.baidu.com/it/u=3312603872,2552024421&fm=253&fmt=auto&app=120&f=JPEG?w=972&h=547"
onmouseover='this.src="https://img1.baidu.com/it/u=3213028832,2848109658&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750"'
onmouseout='this.src="https://img0.baidu.com/it/u=3312603872,2552024421&fm=253&fmt=auto&app=120&f=JPEG?w=972&h=547"'
/></a>
</div>
</div>
</body>
</html>
</body>
</html>
不知道是不是你要的效果?随手按你的写了下 你换行的原因是因为你的父级840,但你子元素li加起来超过了840,因为你图片设置了大小没考虑边框
因你的xttblog 总宽为840,但边框为5,则按photo1所示总宽为840px + 5px(左边) + 5px(右边) = 850px
Photo2和3分别宽设定为420,则第二行内容实际宽为 430px(2图)+430(3图) -5(重合部分) = 855px,已经超出实际xttblog设定的总宽,所以会掉落;
调整方式:将photo1设置为832px;其左右边框共计8px;共计840px; (为方便计算,边框取偶数 4 )
计算photo2和3的宽,840px(总宽) - 12px(总边框为4条则为16px,减去你设定的重合边框 16-4 = 12px) ;故除去边框的实际两块内容共828px,828/2则为每个图的宽度414px
根据你的代码调整后如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>test</title>
</head>
<body>
<html>
<head>
<style type="text/css">
/** 重置浏览器默认标签样式 */
* {
margin: 0;
padding: 0;
}
body {
background-image: url(img/background.jpg);
background-size: cover;
}
.xttblog {
width: 840px; /** 大框宽 */
height: 750px; /** 大框高 */
margin-top: 30px; /** 顶距 */
margin-left: auto;
margin-right: auto;
color: black;
}
.box {
list-style-type: none;
}
.box:after {
content: ".";
display: block;
line-height: 0;
width: 0;
height: 0;
clear: both;
visibility: hidden;
overflow: hidden;
}
.box li {
float: left;
}
.box li a, .box li a:visited {
display: block;
border: 4px solid #ccc; /** 框线厚度 */
margin-left: -4px; /** 框线重叠 */
margin-top: -5px;/** 框线重叠*/
z-index: 1;
}
.box li a:hover {
border-color: rgb(233, 99, 121);
z-index: 2;
}
</style>
</head>
<body>
<div class="xttblog">
<ul class="box">
<li><a class="photo1" target="_blank" href="../1/1.html"><img src="img/1.jpg" onmouseover='this.src="img/1-after.jpg"' onmouseout='this.src="img/1.jpg"' width="832px" height="100px" /></a></li>
<li><a class="photo2" target="_blank" href="../2/2.html"><img src="img/2.jpg" onmouseover='this.src="img/2-after.jpg"' onmouseout='this.src="img/spring.jpg"' width="414px" height="650px" /></a></li>
<li><a class="photo3" target="_blank" href="../3/3.html"><img src="img/3.jpg" onmouseover='this.src="img/3-after.jpg"' onmouseout='this.src="img/summer.jpg"' width="414px" height="650px"/></a></li>
</ul>
</div>
</body>
</html>
不考虑 IE 兼容性的话,更推荐使用 display: grid 方式来调整布局。
页:
[1]