Django项目中Div及其内部元素居中问题求助
Django页面内容居中问题修复方案
问题需求
做第一个Django项目,需要实现:
- 一个承载除导航栏外所有内容的div容器,位于屏幕正中央,宽度占比50%
- 容器内所有元素也需居中显示
当前页面效果:
原模板代码
<html><style> body { margin: 0; padding: 0; } img[src="/media/images/crate_bar.png"] { margin: 0; padding: 0; display: block; width: 100%; height: auto; box-sizing: border-box; } img[src="/media/images/logo.png"] { position: absolute; display: block; width: auto; height: auto; left: 50%; transform: translateX(-50%); top: 0; } #logo { display: flex; justify-content: center; align-items: center; text-align: center; } #main_container { display: flex; justify-content: center; align-items: center; } #second_container { display: flex; justify-content: center; align-items: center; width: 50%; } </style><div id="logo"> <img src="/media/images/crate_bar.png"> <a href="{% url 'mainapp:home_view' %}"><img src="/media/images/logo.png" alt="logo"></a> </div><h1> {% if user.is_superuser %} <a href="{% url 'mainapp:new_article' %}"><button type=" button">New article</button></a> {% endif %} {% block content %} <div id="main_container"> <div id="second_container"> <ul> {% for article in list_of_articles %} {% if article.article_image %} <img src="{{article.article_image.url }}" height="200" width="450"> {% endif %} <p>{{article.publication_date}}</p> <h1><a href="{% url 'mainapp:article_view' article.id %}">{{article.title}}</a></h1> {% endfor %} </ul> </div> {% endblock %} </div></html>
问题分析
#second_container使用flex布局后,内部的ul会被强制横向排列,导致内容布局混乱#main_container的align-items: center会让容器内容垂直居中,若内容高度超过容器,会出现溢出或布局异常body未设置min-height,没有足够的布局高度上下文<h1>标签错误嵌套在{% block content %}外部,导致HTML结构混乱
修改后的代码
<html> <style> body { margin: 0; padding: 0; min-height: 100vh; /* 确保body占满视口高度 */ } img[src="/media/images/crate_bar.png"] { margin: 0; padding: 0; display: block; width: 100%; height: auto; box-sizing: border-box; } img[src="/media/images/logo.png"] { position: absolute; display: block; width: auto; height: auto; left: 50%; transform: translateX(-50%); top: 0; } #logo { display: flex; justify-content: center; align-items: center; text-align: center; position: relative; /* 让绝对定位的logo相对于导航栏容器定位 */ } #main_container { display: flex; justify-content: center; /* 仅水平居中容器 */ padding: 20px 0; /* 上下留白,避免内容紧贴导航栏 */ } #second_container { width: 50%; /* 占屏幕宽度的50% */ text-align: center; /* 让内部所有元素水平居中 */ } /* 清除列表默认样式,避免偏移 */ #second_container ul { list-style: none; padding: 0; margin: 0; } /* 文章图片自适应容器宽度,防止溢出 */ #second_container img { max-width: 100%; height: auto; } </style> <div id="logo"> <img src="/media/images/crate_bar.png"> <a href="{% url 'mainapp:home_view' %}"><img src="/media/images/logo.png" alt="logo"></a> </div> {% if user.is_superuser %} <div style="text-align: center; margin: 10px 0;"> <a href="{% url 'mainapp:new_article' %}"><button type="button">New article</button></a> </div> {% endif %} {% block content %} <div id="main_container"> <div id="second_container"> <ul> {% for article in list_of_articles %} {% if article.article_image %} <img src="{{article.article_image.url }}"> {% endif %} <p>{{article.publication_date}}</p> <h1><a href="{% url 'mainapp:article_view' article.id %}">{{article.title}}</a></h1> {% endfor %} </ul> </div> </div> {% endblock %} </html>
修改说明
- 给
body添加min-height: 100vh,确保页面布局有足够高度上下文 - 给
#logo设置相对定位,让内部绝对定位的logo不会脱离导航栏区域 - 简化
#main_container样式,仅保留水平居中,去掉垂直居中避免内容布局异常 - 将
#second_container改为块级布局,用text-align: center实现内部元素水平居中 - 清除列表默认的内边距和项目符号,避免布局偏移
- 让文章图片自适应容器宽度,防止超出50%宽度的容器范围
- 调整"New article"按钮的位置,修正HTML结构错误并设置居中显示
内容的提问来源于stack exchange,提问作者Ravdar
相关产品推荐
相关产品推荐

