如何格式化我的 CSS 和 Bootstrap,以便在页面宽度减小时仅包裹某些元素?

Posted

技术标签:

【中文标题】如何格式化我的 CSS 和 Bootstrap,以便在页面宽度减小时仅包裹某些元素?【英文标题】:How can I format my CSS and Bootstrap so that only certain elements wrap when page width decreases? 【发布时间】:2016-01-02 14:49:03 【问题描述】:

当浏览器窗口足够宽时,我的页面元素会根据需要呈现:

理想情况下,当页面宽度缩小时,“添加联系人”按钮和“创建广告系列”尽可能长时间地保持在同一行。相反,当页面缩小时,“创建广告系列”按钮会立即切换到下一行:

我认为这是我如何设置 Bootstrap 行的问题。请在此处找到我的 React 和 html:http://jsfiddle.net/connorcmu/Lq2ew48v/

相关部分:

<section className="row">
      <div className="col-lg-3">
        <Dropdown
          secondary=this.toggle('showCreateDropdown')
          caption=this.getIntlMessage('addContact')
          primary=this.toggleForm('contactForm', 'uploadForm')
          show=this.state.showCreateDropdown
          fields=[
            value: this.getIntlMessage('uploadMultiple'),
            action: this.toggleForm('uploadForm', 'contactForm')
          ] />
      </div>

      <div className="col-lg-3">
        <a target="_blank"
          data-track="click"
          id="createNewsletter"
          data-action="navigate"
          href=props.gemUrl
          className="btn btn-default newsletter"
          onClick=this.onCreateNewsletter
          data-label="create-newsletter">
          self.getIntlMessage('createCampaign')
        </a>
      </div>

【问题讨论】:

我会为此使用 flexbox;与引导网格不同,它基于内容,因此当空间不足时它会自然换行,如果您愿意,可以在发生这种情况时展开按钮。 【参考方案1】:

应该是 class="..." 而不是 className="..."

您可以在一个 div 中添加多个 col 类,以针对每个定义的屏幕尺寸定义 div 的单独行为。您可以使用 class="col-xs-12 col-md-6 col-lg-3" 代替 class="col-lg-3"。

【讨论】:

我在 React 工作,它需要 className 而不是 class,但我喜欢你的想法【参考方案2】:

这是基本的引导程序,我建议您阅读文档以获得更好的想法。

在这里,您使用了col-lg-3,它告诉 div 在屏幕宽度较大时保持彼此相邻。但是,您还没有提到当屏幕宽度为中 (md)、小 (sm) 或超小 (xs) 时 div 的行为方式。因此,当屏幕宽度减小时,它们都级联起来各占一行,与col-*-12 相同。因此,解决方案是定义所有或所需屏幕尺寸的行为。所以,你的代码应该是:-

<div className="col-lg-3 col-md-6 col-sm-12">
    <Dropdown
      secondary=this.toggle('showCreateDropdown')
      caption=this.getIntlMessage('addContact')
      primary=this.toggleForm('contactForm', 'uploadForm')
      show=this.state.showCreateDropdown
      fields=[
        value: this.getIntlMessage('uploadMultiple'),
        action: this.toggleForm('uploadForm', 'contactForm')
      ] />
  </div>

  <div className="col-lg-3 col-md-6 col-sm-12">
    <a target="_blank"
      data-track="click"
      id="createNewsletter"
      data-action="navigate"
      href=props.gemUrl
      className="btn btn-default newsletter"
      onClick=this.onCreateNewsletter
      data-label="create-newsletter">
      self.getIntlMessage('createCampaign')
    </a>
  </div>

【讨论】:

这是我最初的努力之一,但它导致了一些看起来很愚蠢的奇怪行为,过早地跳转到那个包裹效果【参考方案3】:

试试这个解决方案。有点像之前所说的,但是为 col-xs 大小以及 col-sm 和 col-md 设置媒体断点:

render: function render() 
  var self = this, 
      props = self.props;

  return (
    <div className="controls col-lg-12">
      this.renderInfo()
      this.renderModal()

      <section className="row">
        <div className="col-xs-4 col-sm-3 col-md-3 col-lg-3">
          <Dropdown
            secondary=this.toggle('showCreateDropdown')
            caption=this.getIntlMessage('addContact')
            primary=this.toggleForm('contactForm', 'uploadForm')
            show=this.state.showCreateDropdown
            fields=[
              value: this.getIntlMessage('uploadMultiple'),
              action: this.toggleForm('uploadForm', 'contactForm')
            ] />
        </div>

        <div className="col-xs-4 col-sm-3 col-md-3 col-lg-3">
          <a target="_blank"
            data-track="click"
            id="createNewsletter"
            data-action="navigate"
            href=props.gemUrl
            className="btn btn-default newsletter"
            onClick=this.onCreateNewsletter
            data-label="create-newsletter">
            self.getIntlMessage('createCampaign')
          </a>
        </div>

        <div className="col-xs-4 col-sm-3 col-md-3 col-lg-3">
          <span className="count">
            self.getIntlMessage('totalCount'): props.count
          </span>
        </div>

        <form className="col-xs-12 col-md-3 col-lg-3" onSubmit=self.search>
          <input
            id="searchBar"
            type="text"
            ref="filterTextInput"
            placeholder=self.getIntlMessage('search')
            value=self.state.query
            className='form-control' + (self.state.searching ? ' searching' :   '')
            onChange=self.search />
        </form>
      </section>

      self.renderForm()
  </div>
);

【讨论】:

以上是关于如何格式化我的 CSS 和 Bootstrap,以便在页面宽度减小时仅包裹某些元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 Bootstrap 轮播图像堆叠? HTML/CSS(使用 PHP 显示图像)

我的 CSS 在 React 项目中被 Bootstrap 覆盖

laravel bootstrap-如何对齐侧边栏以适合不同的屏幕?

Bootstrap 4中的导航栏药丸颜色以填充整个高度

Django Forms and Bootstrap - CSS 类和 <divs>

如何使用 Bootstrap 3.1 使我的 CSS 响应