• 0

HTML/CSS/JS Help Setting up 3 column centered Table


Question

Hello

 

I'm trying to setup a table on an HTML page that keeps column 1 & 3 the same width.

 

The table itself is set to 100% width and column 2 has a fixed pixel width.

 

The page is for reference instructions and we're trying to keep everything reactive all the way down to mobile.

Currently I have the table columns set to 45% / 10% / 45% and it 'works' but the column width skews when i add things to column 3; I'd like column 1 & 3 to always remain equal in width even if i resize the window. I believe I'll need javascript for this but am not sure

 

does anyone have any advise?

 

here's a couple screenshots to show what I mean:

image.thumb.png.2fc1a9e3f4e42e3b08a77930a735ce8f.png

 

with items in 3rd column:

image.thumb.png.70a4d611a903589fd3af47a9194f94e2.png 

 

basic table code:

<table width="100%" border="0" cellspacing="1" cellpadding="1">
  <tr>
    <td width="45%" align="right" valign="top"></td>
    <td width="10%" align="center" valign="top"></td>
    <td width="45%" align="left" valign="top"></td>
  </tr>
</table>

 

11 answers to this question

Recommended Posts

  • 0

oh my god; i feel so silly today. I figured out the correct way to do what I want without affecting the child tables. I just need to set the fixed table as an inline style and not in the CSS :rofl:

 

so now my basic table setup is as follows and works perfectly in all browsers

 

<table width"100%" border="0" cellspacing="1" cellpadding="1" style="table-layout:fixed">
  <tr>
    <td width="50%" align="right" valign="top">Instruction Text</td>
  </tr>
  <tr>
    <td width="268" align="center" valign="top">Device Screen Display</td>
  </tr>
  <tr>
    <td width="50%" align="left" valign="top">Sub Info</td>
  </tr>
</table>

 

  • 0

i feel silly and this shows I'm still new to HTML/CSS as I found this can be done without JavaScript.

 

https://css-tricks.com/fixing-tables-long-strings/

 

I knew I needed to make it a fixed table but did not realize you could set 2 columns to the same width % through CSS and they'll remain equal :)

 

.instructTable {
	table-layout: fixed;
	width: 100%;
}

.instructTable td:nth-Child(2) {
	width: 268px;
}

.instructTable td:nth-Child(1),
.instructTable td:nth-Child(3) {
	width: 50%;
}

is my new table CSS class

  • 0
  On 13/08/2018 at 16:19, Matthew S. said:

could always use a grid system too, like Bootstrap or Unsemantic

Expand  

It's a table. I don't think he is trying to do a table layout (i hope so anyway). I think he just wants the table to be adaptive with the center column keeping a fixed size in pixels and the two other columns adjusting to 50% of the remaining space. BTW you should probably not use 50% as it's not really 50%. Should probably do :

width: calc(50% - 134px); /* calc is not supported in IE 8 and lower */

Also you should handle the overflow of columns with a fixed table layout. With a fixed table-layout any content of a column that can't be wrapped will not be rendered unless you specify an overflow of scroll or do some mouseover trick.

 

For example this content dhaoisjdipawjipojqweiodjweiojdioqjdiojweiojdweiojdioewjiodjweio in a column with a fixed width of 268px of a table with a fixed layout will be clipped after the first 268px unless the overflow property of the column is set to scroll or the content is wrapped in a div with a mouseover (or click) event showing the content.

 

If you are trying to do a table layout then don't. Use a grid.

Edited by LaP
  • 0
  On 13/08/2018 at 16:19, Matthew S. said:

could always use a grid system too, like Bootstrap or Unsemantic

Expand  

am trying to avoid adding more libraries right now but those are definitely worth looking into :)

 

@LaP a grid may work better for me; i'm just using the table with no boarders to line up the content

The screen is in the center; instruction on the left; and any extra info about the screen is in another table on the right as shown in the screenshots in the OP

 

I'm finding now that using a 'fixed' table on the outer table it causes internal tables to be forced to 100% width and it will not allow me to adjust individual cell widths so I think i'll look into these grid layouts

 

image.thumb.png.68f93bb3b2bebe13c773951e8bd1382d.png

(notice how the 2nd table is now stretched on the right)

  • 0

If you don't have to support older browsers there's a native css grid system now. I never used it seriously outside of some tests so i don't know if it's any good.

 

https://developer.mozilla.org/fr/docs/Web/CSS/CSS_Grid_Layout

 

https://caniuse.com/#search=display%3A grid

  Quote

The CSS Grid Layout specification supersedes several older ones. The feature is implemented in most moderne browsers, other than Opera Mini and partial support in Internet Explorer 10 & 11. An overview can be found at css-tricks.com. Because a somewhat large userbase still is not supportet (about 15% according to caniuse.com we recommend you use this feature with caution.

 

Recommended polyfills:

https://github.com/codler/Grid-Layout-Polyfill

Expand  

http://html5please.com/#grid

  • 0

oh nice, was not aware of that; we're coding this new site for current HTML5 standards so old browsers aren't an issue for us :)

 

edit: thank you @LaP that's going to be exactly what I need; should make things a lot cleaner

 

messing with a snip https://codepen.io/anon/pen/YjgMbV

  • 0

ugh IE11 doesn't support the native 'grid' css. the polyfil you listed above uses the '-ms-grid' flag instead which isn't cross compatible

 

does anyone know of a good up-to-date polyfil for grid and know how to implement it or know of alternates to 'grid'?

  • 0
  On 13/08/2018 at 22:54, Riva said:

Doesnt this work?

snip

Expand  

yes but I don't want to effect all tables; i'm still using a couple elsewhere in the page

  • 0

Like Matthew said you can try bootstrap. You can import just the grid system from their site. I don't think you need the js for just the grid system so you can import the css only.

 

https://github.com/twbs/bootstrap/releases/download/v4.1.3/bootstrap-4.1.3-dist.zip

 

https://getbootstrap.com/docs/4.1/getting-started/contents/#comparison-of-css-files

 

https://getbootstrap.com/docs/4.1/layout/grid/

 

For the grid system only you just need to import bootstrap-grid.min.css. You can import bootstrap-reboot.min.css if you want to standardize cross-browser rendering or you can use Normalize (or nothing). Bootstrap supports IE 10 and 11 only. If you want IE 9 support you'll have the try something else.

  • 0
  On 13/08/2018 at 15:41, Brandon H said:

i feel silly and this shows I'm still new to HTML/CSS as I found this can be done without JavaScript.

 

https://css-tricks.com/fixing-tables-long-strings/

 

I knew I needed to make it a fixed table but did not realize you could set 2 columns to the same width % through CSS and they'll remain equal :)

 

.instructTable {
	table-layout: fixed;
	width: 100%;
}

.instructTable td:nth-Child(2) {
	width: 268px;
}

.instructTable td:nth-Child(1),
.instructTable td:nth-Child(3) {
	width: 50%;
}

is my new table CSS class

Expand  

after playing around some more I managed to isolate the CSS of the internal tables so this method seems to work the best for me right now; I'll look into bootstrap for the future but don't want to add an extra library right now :)

 

thanks a lot for the suggestions guys; always appreciated

 

native CSS grids would have been perfect if not for the lack of support in IE11 and unfortunately that's my lowest common denominator to support still. oh well

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • “which covers most of what people can hears. ” Oh yeah, you really reviewed this AI slop. Neowin should cut out the middleman at this point.
    • £129 in the U.K., that is a fair drop in price and if anyone have a need for one then now is a good time to buy one. But for most people if they have a pretty good router it would be money wasted,, unless they need Wi-Fi 7 and I doubt many will notice any difference even if they have Wi-Fi 7 devices. The 2.5Gb/s lan and Wan could be useful for some people, but why only one 2.5 lan? sure, there is not much around in the 2.5Gb/s line at the moment and a lot of devices like TVs would not benefit by it, but if someone has a couple of computers with 2.5Gb/s lan, they have to buy a switch, so more cost. So a unmanaged one can be picked up for around £50 these days, but that is still extra and electrical another socket and box. I suppose sticking another 2.5Gb LAN on the router would have added a bit of more cost, but not that much. I don't really have much need for a Wi-Fi 7 router, I have an Archer AX53 that does what I need, the one thing I do miss is the USB port that don't seem to be a thing these days on routers, just to stick a small USB drive in for documents, saves booting up the nas.
    • But it is a step in the right direction, and besides you need to understand that this is a technology that is still in the laboratory. We are not even sure if there will be a final product or if the product will be altered over and over again before a final product. Thinking and responding in a positive way would be ideal when responding to this article.
    • I think it is more to do with the wider channels, so more data can be sent at the same time, not about frequencies. No doubt some other things as well.
    • UniGetUI 3.3.0 by Razvan Serea UniGetUI is an application whose main goal is to create an intuitive GUI for the most common CLI package managers for Windows 10 and Windows 11, such as Winget, Scoop and Chocolatey. With UniGetUI, you'll be able to download, install, update and uninstall any software that's published on the supported package managers — and so much more. UniGetUI features Install, update and remove software from your system easily at one click: UniGetUI combines the packages from the most used package managers for windows: WinGet, Chocolatey, Scoop, Pip, Npm and .NET Tool. Discover new packages and filter them to easily find the package you want. View detailed metadata about any package before installing it. Get the direct download URL or the name of the publisher, as well as the size of the download. Easily bulk-install, update or uninstall multiple packages at once selecting multiple packages before performing an operation Automatically update packages, or be notified when updates become available. Skip versions or completely ignore updates in a per-package basis. Manage your available updates at the touch of a button from the Widgets pane or from Dev Home pane with UniGetUI Widgets. The system tray icon will also show the available updates and installed package, to efficiently update a program or remove a package from your system. Easily customize how and where packages are installed. Select different installation options and switches for each package. Install an older version or force to install a 32bit architecture. [But don't worry, those options will be saved for future updates for this package] Share packages with your friends to show them off that program you found. Here is an example: Hey @friend, Check out this program! Export custom lists of packages to then import them to another machine and install those packages with previously-specified, custom installation parameters. Setting up machines or configuring a specific software setup has never been easier. Backup your packages to a local file to easily recover your setup in a matter of seconds when migrating to a new machine UniGetUI 3.3.0 release notes: This release was expected to be 3.2.1, but it incudes more changes than planned, so it has been named 3.3.0 instead. Changelog Added default install options on a per-package-manager level! Added pre/post-install/update/uninstall commands! Added an option to close/kill process(es) before installing/updating/uninstalling a package Added cloud package backup and restore (via GitHub) more info on that here. Added the option to bulk-download installers Added the option to select package manager executable PowerShell7 can now clear older versions when updating to a new one Improvements to InstallOptions dialogs Installer download will properly guess the downloaded file name. Added "Dependencies" field to Package Details. Improvements to WinGet source management Searchbox has been moved to the titiebar, less wasted space Improvements for when window size is less wide Toolbar improvements Improvements on internal error detection and handling YAML and XML can't be created no more (more info on that here: #3860) Lots of bugfixes Other internal improvements Security enhancements Some features (pre/post install commands, command-line arguments, etc.) will be restricted by default. Bundles will also have those features restricted by default. Those features can be enabled with toggles that require an UAC prompt to be modified Bundles will show a security report when potentially dangerous settings are present. Fix some potential command-injection vulnerabilities from custom command-line arguments What's changed Load translations from Tolgee by @martinet101 in #3644 Dynamic JSON [de]serialization by @marticliment in #3679 Bump vedantmgoyal9/winget-releaser from 3e78d7ff0f525445bca5d6a989d31cdca383372e to 19e706d4c9121098010096f9c495a70a7518b30f in the actions-deps group by @dependabot[bot] in #3711 Update Scoop nirsoft bucket URL to ScoopInstaller/Nirsoft by @hboyd2003 in #3719 Per-package-manager and global default installation options by @marticliment in #3685 Further improvements to InstallOptions by @marticliment in #3721 Add toggle to enable/disable insecure settings by @marticliment in #3722 Make 'Pause updates for' submenu item use translation by @szumsky in #3705 Add toggle to enable/disable insecure settings by @marticliment in #3723 Separe Install, update and uninstall custom command-line args by @marticliment in #3748 Warn the user when a bundle contains potentially harmful prefs by @marticliment in #3749 Setting keys will be stored on const strings by @marticliment in #3750 Improve local icon detection code comments by @mrixner in #3767 Pre-install and post-install operations by @marticliment in #3756 Show Version in Update Live Dialog by @mrixner in #3798 Clear older versions of PowerShell7 modules on update by @marticliment in #3810 Allow Executable Selection by @mrixner in #3703 Add dependencies field to Package Details by @marticliment in #3822 Feat/recheck version before update by @theguy000 in #3827 feat: Add Cloud Backup and Restore via GitHub Gists by @theguy000 in #3826 Bundles file size improvements by @marticliment in #3832 Move searchbox to titlebar by @marticliment in #3837 Fix crashes & better error handling by @marticliment in #3859 Improvements to WinGet source management by @marticliment in #3876 Allow the user to force user gsudo via a SecureSetting (fix #3692) by @marticliment in #3877 Improvements to Toolbar by @marticliment in #3882 Download: UniGetUI 3.3.0 | 53.3 MB (Open Source) Links: WingetUI Home Page | GitHub | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
  • Recent Achievements

    • One Month Later
      Ricky Chan earned a badge
      One Month Later
    • First Post
      leoniDAM earned a badge
      First Post
    • Reacting Well
      Ian_ earned a badge
      Reacting Well
    • One Month Later
      Ian_ earned a badge
      One Month Later
    • Dedicated
      MacDaddyAz earned a badge
      Dedicated
  • Popular Contributors

    1. 1
      +primortal
      505
    2. 2
      ATLien_0
      207
    3. 3
      Michael Scrip
      205
    4. 4
      Xenon
      141
    5. 5
      +FloatingFatMan
      116
  • Tell a friend

    Love Neowin? Tell a friend!