当前位置: 首页 > 知识库问答 >
问题:

我的CSS列比网页宽,但应该是成比例的

吴鸿彩
2023-03-14

我的页面上有2个css栏:左边的是75%,右边的是25%。然而,由于某种原因,右栏稍微突出,使它比页面更宽(见下图)。我如何使两个列在一起的宽度与徽标在顶部?

这是我的基本HTML:

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-175481126-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'UA-175481126-1');
</script>

<style>
ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
font-family: Tahoma, Geneva, sans-serif;
background-color: #333;
}
li {
float: left;
border-right: 1px solid #bbb;
}
li a {
display: block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
/* Change the link color to #111 (black) on hover */
 li a:hover {
   background-color: #111;
   color: white;
   text-decoration:none;
 }

/* for buttons*/
.paging {
background-color: #333;
border: none;
color: white;
padding: 8px 14px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
font-family: Tahoma, Geneva, sans-serif;
}
button:hover {
background-color: #111;
}

.register {
  float: right;
}

.paging {
  background-color: #333;
  border: none;
  color: white;
  padding: 8px 14px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 16px;
  font-family: Tahoma, Geneva, sans-serif;
}
button:hover {
  background-color: #111;
}

/* title */

.title {
  color: black;
  padding: 10px;
  text-align: center;
  font-size: 40px;
  font-family: Tahoma, Geneva, sans-serif;
  Color: black;
  text-decoration: none;
}

/* descriptions */

.description {
  color: black;
  padding: 15px;
  font-family: Tahoma, Geneva, sans-serif;
  text-align: left;
  font-size: 13px;
}

/* embedd url */
.iframe-container{
  position: relative;
  width: 100%;
  padding-bottom: 56.25%; 
  height: 0;
    margin-left: auto;   /* Automatic margin from left */ 
    margin-right: auto; /* Automatic margin from right */
}
.iframe-container iframe{
  position: absolute;
  top:0;
  left: 0;
  width: 100%;
  height: 100%;
}

/* make columns */

.ads {
  float: right;
  background-color: #c1c4c9;
  width: 25%;
}

.videos {
  float: left;
  width: 75%;
  padding-right: 10%;
  padding-left: 10%;
}

.image {
/*  padding-right: 3%;*/
/*  padding-left: 3%;*/
  padding-top: 3%;
  padding-bottom: 3%;
}

.row {
    display: flex;
}

.banner {
  float: left;
  width: 100%;
  height: 5%;
  background-color: red;
  color: white;
  text-align: center;
}

/* header */
.header {
  background-color: #F1F1F1;
  text-align: center;
  padding: 20px;
  font-family: Tahoma, Geneva, sans-serif;
}
</style>

<html>

{% load static %}
<link rel="shortcut icon" type="image/png" href="{% static 'images/favicon.ico' %}"/>

<div class="header">
  <a href="/">
  <img src="https://i.ibb.co/5Rqps7F/logo-black.png" alt="Computer Man">
</a>
</div>

<ul>
  <li class="all"><a href="/">All videos</a></li>
  <li class="stam"><a href="/stam">Stam videos</a></li>
  <li class="music"><a href="/music">Music videos</a></li>
  <li class="news"><a href="/news">News videos</a></li>
  <li class="contact"><a href="/contact">Contact</a></li>
  <li class="register"><a href="/register">Login/Register</a></li>
</ul>

<div class="banner">
    <text align="center">We are still developing our site, so we may not be able to update videos as often as we want</text>
</div>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>

这是页面HTML:

{% include 'base.html' %}
<style>
    .{{ category }} {
        background-color: grey;
    }
</style>

<div class="row">
    <div class="videos">
    {% autoescape off %}
            <h1 class="title"> {{ video_.title }} </h1>
            {% ifnotequal video_.tag 'none' %}
                <small align = left> {{ video_.tag }} </small>
            {% endifnotequal %}
            <div class="iframe-container"><p align="center"> {{ video_.url }}</p></div>
            <div class="description"> {{ video_.description }} </div>
            <hr/>

{% endautoescape %}
    </div>

    <div class="ads">
        {% for ad in ad_item %}
            {% ifequal ad.redirect 'False' %}
                <img class="image" src="{{ ad.pic }}"></img>
            {% endifequal %}
            {% ifnotequal ad.redirect 'False' %}
                <a href="{{ ad.redirect }}"><img class="image" src="{{ ad.pic }}"></img></a>
            {% endifnotequal %}
        {% endfor %}
    </div>
</div>

你也可以在我的网站上看到tachlis.herokuapp.com(这就是问题所在)。

共有2个答案

陆翔飞
2023-03-14

您在问题中描述的问题是由于元素溢出了正文宽度。现在,知道了这一点,试图缩小到底是哪一个元素导致了这一点总是一件令人烦恼的事情。

解决这一问题的一种方法是在控制台中运行此脚本:

var docWidth = document.documentElement.offsetWidth;

[].forEach.call(
  document.querySelectorAll('*'),
  function(el) {
    if (el.offsetWidth > docWidth) {
      console.log(el);
    }
  }
);

我冒昧地在你的网站上这么做,而罪魁祸首就是这个区块:

<div class="row">
    <div class="videos>
        .....
    </div>
    <div class="ads">
        .....
    </div>
</div>

一个非常快速的解决方法是将overflow-x:hidden添加到body元素中。

body {
    overflow-x: hidden;
}

您还可以查看您的行块,看看具体是什么导致了溢出的发生。

理想的解决方案是添加*{box-sizing:border-box;},为行元素定义100%的宽度,删除行元素的边距。

CSS示例:

* {
    box-sizing: border-box;
}

.row {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    flex: 0 0 100%;
    max-width: 100%;
    /* you can just remove these margins all together. Just wanted to emphasize that there should be no margin left or right, to avoid overflow */
    margin-left: 0px;
    margin-right: 0px;
}

.ads {
    display: block;
    float: right;
    background-color: #c1c4c9;
    width: 25%;
}

.videos {
    display: block;
    float: left;
    width: 75%;
    padding-right: 10%;
    padding-left: 10%;
}
蒋向笛
2023-03-14

在容器上使用flex,在儿童上使用float将不起作用。擦除浮动,从容器中删除flex-wrap,将box-sizing:border-box添加到所有元素,如果需要严格的宽度,则在子元素(=您的“列”)上使用flex-grow:0flex-shrink:0

 类似资料:
  • 问题内容: 我想创建一个div可以随窗口宽度变化而改变其宽度/高度的。 是否有任何CSS3规则可以允许高度根据宽度而改变,同时保持其长宽比? 我知道我可以通过JavaScript来做到这一点,但我宁愿只使用CSS。 问题答案: 只需使用百分比值创建包装器,如下所示: 它将导致高度等于其容器宽度的75%(长宽比为4:3)。 这取决于以下事实: 相对于生成的盒子的包含块的宽度计算百分比(来源:w3.o

  • 问题内容: 我正在使用Python2.x。 比较时我的编辑会警告我,但使用时不会警告。 我在Python Shell中进行了测试,并确定两者都是有效的语法,但我的编辑器似乎在说这是首选。 是这样吗?如果是,为什么? 问题答案: 摘要: 使用时要核对对象的身份(如检查,看看是否是)。使用时要检查的平等(例如是等于?)。 说明: 你可以在其中返回的自定义类True 例如: is检查对象身份。只有1个对

  • 当我比较,但是当我使用。 我在pythonshell中做了一个测试,确定两者都是有效语法,但我的编辑器似乎在说是首选。 情况是否如此,如果是,原因何在?

  • 问题内容: 我有一个可以放在一起的网站,它的固定长宽比大约等于风景,例如视频。 我想使它居中并扩展以填充可用的宽度和可用的高度,但不要在任何一侧变大。 例如: 高而薄的页面将使内容伸展整个宽度,同时保持成比例的高度。 短而宽的页面将使内容伸展到整个高度,并具有成比例的宽度。 我一直在研究两种方法: 使用具有正确长宽比的图像来扩展容器,但我无法在主要浏览器中以相同的方式表现该图像。 设置成比例的底部

  • 问题内容: 下面的代码将在元素下方创建一个箭头: 问题在于,我们必须指示链接宽度才能获得适当大小的箭头,因为我们无法以像素为单位指示边框宽度。 如何使响应三角形百分比为基础? 问题答案: 您可以使用倾斜和旋转的伪元素在链接下创建一个 响应三角形 : 三角形通过属性保持其长宽比。 如果您希望形状根据其内容来适应其大小,则可以删除类的宽度

  • 问题内容: 有人告诉我,InnoDB比MyISAM好得多。因此,当我创建表时,是否应该 始终 尝试使用InnoDB Engine而不是MyISAM?还是两者都有很大的好处? 问题答案: 是无事务的并且是堆组织的。记录由表中的行偏移量标识,索引将此偏移量存储为行指针。 支持交易并按索引组织。记录由的值标识(或未定义隐藏的内部列),并存储在中。二级索引将的值存储为行指针。 涉及全表扫描或二级索引查找的