【问题标题】:CSS, centered div, shrink to fit?CSS,居中的 div,缩小以适应?
【发布时间】:2021-11-23 21:35:28
【问题描述】:

这就是我想要的:

text text text text text text text text text text text
text text text text text text text text text text text
                   +-----------+
                   | some text |
                   +-----------+
text text text text text text text text text text text
text text text text text text text text text text text

...“一些文本”块是一个 div。我希望 div 是包含其文本而不换行所需的最小宽度。如果文本太长而无法不换行,则可以换行。

我不想为 div 设置明确的宽度。我也不想设置最小宽度或最大宽度;就像我说的那样,如果一行中包含太多文本而无需换行,则可以换行。

【问题讨论】:

  • 这个问题还没有满意的答案。
  • @StevenSoroka 看看我对 flexbox 的回答,如果这对你来说仍然很重要...我知道这个问题已经很老了。

标签: css


【解决方案1】:

DIV 元素默认是块级的,这意味着它们会自动获得 100% 的宽度。要改变这一点,请使用这个 CSS...

.centerBox {
  display:inline-block;
  text-align:center;
}


<div class="centerBox">
  Some text
</div>

编辑:更新为使用 CSS 类而不是内联属性,并将“block”更改为“inline-block”

【讨论】:

  • ‘width: auto’是多余的,可以省略。显然,您还需要在父级上设置 text-align-center 。一种技术上正确的方法,尽管可能将 div 突变为内联并不是 OP 想要的!
  • 这不太行,因为如果您确实有多行文本,任何格式(边框、填充等)都会应用于每个单独的部分。但是内联块确实有效!耶!
  • 您可以将其替换为“span”元素,然后您无需指定“display: inline: width: auto”,但您的解决方案不会将“一些文本”放在中心
  • 是否可以缩小 div 但仍然不能让其他元素取代它
【解决方案2】:

我不知道,这里的解决方案似乎部分正确,但实际上并没有奏效。根据 Josh Stodola 的回答,这是一个在 Firefox、Safari、Chrome 和 IE 7、8 和 9 中测试过的跨浏览器解决方案

CSS:

body {
    text-align: center;
}

#centered-div {
    text-align: left;
    background: #eee;

    display: inline-block;

    /* IE7 bs - enables inline-block for div-elements*/
    *display: inline;
    zoom: 1;
}

标记:

<div id="centered-div">
    Cum sociis natoque penatibus et magnis dis<br />
    parturient montes, nascetur ridiculus mus.
</div>

要添加 IE6 支持(叹​​气),请将 _height: [yourvalue] 添加到 div。是的,带有下划线。

在 JSFiddle 上自行测试:http://jsfiddle.net/atp4B/2/

【讨论】:

    【解决方案3】:

    乔什·斯托多拉的道具,尽管他并不完全正确。需要的属性是:

    display: inline-block;
    

    这解决了我的问题。耶!

    【讨论】:

    • inline-block 在某些浏览器中不起作用。如果您需要跨浏览器支持,请不要使用它。
    • inline-block 适用于我所知道的所有浏览器。要处理 IE display: inline-block; *zoom: 1; *display: inline;。养成在需要内联块时编写整个内容的习惯。当你真正想要的是inline-block时,请不要使用float
    【解决方案4】:
    <style type="text/css">
        /* online this CSS property is needed */
        p.block {
            text-align: center;
        }
        /* this is optional */
        p.block cite {
            border: solid 1px Red;
            padding: 5px;
        }    
    </style>
    
    <p>Some text above</p>
    <p class="block"><cite>some text</cite></p>
    <p>Some text below</p>
    

    提示:不要将 DIV 用于文本块(用于 SEO 和更好的语义目的)

    【讨论】:

    • 好吧,同意,但你也添加了不必要的元素(跨度)。
    • 它适用于正确的 css cmets — /* */ 而不是 //。此外,您的图片链接已损坏。
    【解决方案5】:

    我推荐 flexbox!看看这个网站有什么可能,solved by flexbox

    它很新,但适用于所有主要的现代浏览器(IE10 使用 -ms- 前缀,IE11+,Firefox 31+,Chrome 31+,Safari 7+,...) - 请参阅 this chart

    基本上,垂直和水平居中,连同动态大小,可以在 4 个语句中完成:

    parent {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100%;
    }
    

    确保这个父级实际上是 100% 的高度。您可能还需要将 bodyhtml 设置为 100% 高度。

    我的实现可以在我自己的个人网站上看到,http://pgmann.cf

    【讨论】:

      【解决方案6】:

      以下是我根据您正在寻找的内容制作的示例:
      (jsFiddled 在这里:http://jsfiddle.net/yohphomu/

      警告:

      我是一个 CSS 狂热者!!!

      如果我正确理解您的问题,则无需设置高度或宽度,因为它们的默认设置是自动(也就是说您可以使用自动),但唯一的问题是,如果您想更改背景或放置边框将使其超出所需字段。为什么会这样以及我们如何解决它,请继续阅读。

      或者只是复制并研究示例。

      任何有这个问题的人都没有意识到(假设你有这个问题并且正在使用 div) div 标签之间的任何东西都被认为是一个完整的集合(为了理解目的),这意味着在那个 div 中是你的所有东西希望它代表(计算机执行他们被告知的操作,而不是您希望他们执行的操作)所以(例如)为了将 text-align 设置为居中,它需要整个行空间,并且(最终)如果它有一个边框,它将与它使用的所有空间相接。如果您理解这一点,请继续阅读,如果不是很好,将无法帮助您。

      既然我们了解了会发生什么,我们该如何解决呢?好吧,我们需要一个部分来居中,另一个来着色。在我的示例中,我使用 div 将其居中并跨越到颜色。我需要 div 吗?我很肯定我没有。我可以通过使用 p 居中来实现同样的效果(或者我可以摆脱 p 并只使用 div)。我这样做的原因是为了保持井井有条。

      其实只是因为我想了之后才意识到,但又不想修复它。

      希望这回答了您的问题。你花了 4 年才得到答案,但我却花了 30 分钟才弄明白(而且我已经研究 CSS 几天了)。

      例子:

      <div class='container'>
          <div class="text">
              text text text text text text text text text text text
      text text text text text text text text text text text text text text text text text
          </div>
          <div class="holder">
              <p><span>text here</span></p>
          </div>
          <div>
              text text text text text text text text text text text
      text text text text text text text text text text text text text text text text text
          </div>
          </div>
      

      然后 css 看起来像:

      .container {
      width: 500px;
      height: 500px;
      }
      .text {
          font-size: 20px;
      }
      .holder {
      text-align: center;
      
      
      }
      span {
      background-color: blue;
          border: 1px solid black;
      }
      

      注意:我设置了容器的宽度和高度,因为我同时在做一个项目,并用文本模拟全屏。

      另外请注意,我已经使文本具有单独的背景颜色和边框。我这样做是为了表明它的测量是独立的,并在需要时重新调整。

      不客气,我认为人们不理解你的问题。希望我做到了。

      【讨论】:

      • 这是错误的。 OP 说“我不想为 div 设置明确的宽度。”收缩包装允许浏览器确定所需的最小尺寸,而不是指定小于 100% 的绝对尺寸。
      【解决方案7】:

      这样的?

      <html>
      <head>
      </head>
      <body style="text-align: center;">
      
         <div style="width: 500px; margin: 0 auto;">
      
             <p>text text text text text text text text text text text text text text text text text text text text text text</p>
      
             <div>hello</div>
      
             <p>text text text text text text text text text text text text text text text text text text text text text text</p>
      
         </div>
      
      
      </body>
      

      【讨论】:

        【解决方案8】:
        <style>
        p.one
        {
        border-style:solid;
        border-width:2px;
        border-color:red;
        display:inline-block;
        }
        </style>
        
        <p class="one">some text</p>
        

        【讨论】:

          【解决方案9】:

          HTML

          <div class="outerdiv">
          <div class="innerdiv">
          ++++TEXT+++
          </div>
          </div>
          

          CSS

          .outerdiv{
          text-align: center;
          }
          .innerdiv{
          display: inline-block;
          }
          

          【讨论】:

            【解决方案10】:

            display: inline-block 如果块没有在所需的居中文本之前和之后关闭,则将不起作用。你真正需要的是在块元素上设置width: fit-content; margin: auto;,参见sn-p。

            .center {
              display: block;
              width: fit-content;
              margin: 1em auto;
              padding: .5em;
              text-align: right;
              background: yellow;
            }
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce fringilla diam sagittis, scelerisque ipsum ac, imperdiet tortor. Curabitur dapibus metus eu neque consectetur hendrerit. Cras interdum faucibus malesuada.
            
            <div class="center">
              Lorem ipsum yourself, buddy!<br>
              Try to align this!
            </div>
            
            In auctor aliquam erat in pharetra. Suspendisse potenti. Pellentesque vehicula interdum sem vel tristique. Nullam erat nisl, imperdiet et turpis ut, ornare vulputate erat.

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-12-24
              • 2011-11-24
              • 1970-01-01
              • 2013-09-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多