html - 做元素有预设宽度?
问题描述
我是 HTML/CSS 初学者,我对<div>
元素的宽度有疑问。
这是我的代码:
header {
background-image: linear-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7)), url(IMAGES/hero.jpg);
height: 100vh;
background-size: cover;
background-position: center;
background-attachment: fixed;
}
.hero-text-box {
position: absolute;
width: 1140px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
<body>
<header>
<nav>
</nav>
<div class="hero-text-box">
<h1>Goodbye junk food. Hello super healthy meals.</h1>
<a href="#" class="btn btn-full">I'm hungry</a>
<a href="#" class="btn btn-ghost">Show me more</a>
</div>
</header>
</body>
结果如下所示:
但是,如果我注释掉 CSS 中的“宽度”命令,如下所示:
header {
background-image: linear-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7)), url(IMAGES/hero.jpg);
height: 100vh;
background-size: cover;
background-position: center;
background-attachment: fixed;
}
.hero-text-box {
position: absolute;
/*width: 1140px;*/
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
<body>
<header>
<nav>
</nav>
<div class="hero-text-box">
<h1>Goodbye junk food. Hello super healthy meals.</h1>
<a href="#" class="btn btn-full">I'm hungry</a>
<a href="#" class="btn btn-ghost">Show me more</a>
</div>
</header>
</body>
然后图像变为:
我想知道为什么第二张图片看起来像它的样子?例如,为什么浏览器选择在“食物”一词之后放置一个换行符,而在“健康”之后放置另一个换行符?为什么每个单词后面没有换行符?还是每封信?
自从我开始学习 HTML/CSS 以来,我一直很难理解围绕元素间距和定位的规则。他们似乎是武断的。当我从 CSS<div>
中删除属性时,我的文本默认为这个特定宽度是否有原因?看起来包含标题和'width: 1140px'
我的链接有某种我不知道的预设宽度,但这似乎不正确。<div>
解决方案
<div>
元素是“块级”元素。
如果您<div>
没有添加 CSS,并在浏览器的 Web 检查器中检查它,您将看到浏览器显示以下样式:
div {
display: block;
/* ... other default properties ... */
}
块级元素隐含的值为width: 100%
,占据其父元素的整个宽度。
这里发生的事情是应用绝对定位的结果。
当您设置position: absolute
时<div>
,它具有隐含left
和right
的值0
。
div {
position: absolute;
/* implicit values:
left: 0;
right: 0;
*/
}
当您将属性显式设置left
为 时50%
,该right
属性仍被隐式设置为0
,因此现在您实际上<div>
只设置了其原始宽度的 50%。
您transform
用于将整个元素拉回中心,但这样做会改变位置,而不是宽度,因此宽度缩小的后果left: 50%
仍然存在。
推荐阅读
- python - 我无法让 re.split 处理数字,但将它们放在字符串中并放在一起,
- visual-studio - Windows 10下VS 2010 SP1 32位远程调试监视器
- spring - Spring JPA 瞬态列表未初始化
- html - VBA 从网页上的下拉框中选择一个值
- apache - 使用 Apache Drill 查询 FIX 协议消息文件
- elasticsearch - ElasticSearch:具有索引管理员权限的新用户无法在 Kibana 中访问它
- sql - 插入具有特定关键字的行时向用户发送通知
- javascript - 本地存储在使用 DNS 时不保存数据,但在使用 IP 时保存
- elasticsearch - 弹性:错误 400(错误请求):未能执行脚本 [type=illegal_argument_exception]
- elasticsearch - 从 Elasticsearch 中同步删除文档