Crates.io | normalize-css-z |
lib.rs | normalize-css-z |
version | 0.7.0 |
source | src |
created_at | 2024-01-13 19:35:20.430275 |
updated_at | 2024-01-20 09:59:46.158887 |
description | Normalization of a CSS z-index value to a 32-bit floating-point number (well, kind of...) |
homepage | |
repository | https://github.com/sjinno/normalize-css-z |
max_upload_size | |
id | 1098769 |
size | 37,634 |
This project is a work in progress, so please watch for a new release and ensure to use the latest version.
I struggled to map CSS z-index values to 32-bit floating-point numbers between 0.0 and 1.0 because dividing a large number by another large number, such as 2_147_483_646.0 / 2_147_483_647.0
, does not yield precise results.
To illustrate the issue, here are some examples (see playground):
2_147_483_646.0 / 2_147_483_647.0 = 1.0
2_147_483_645.0 / 2_147_483_647.0 = 1.0
2_147_483_644.0 / 2_147_483_647.0 = 1.0
2_147_483_643.0 / 2_147_483_647.0 = 1.0
2_147_483_642.0 / 2_147_483_647.0 = 1.0
2_147_483_641.0 / 2_147_483_647.0 = 1.0
2_147_483_640.0 / 2_147_483_647.0 = 1.0
2_147_483_639.0 / 2_147_483_647.0 = 1.0
2_147_483_638.0 / 2_147_483_647.0 = 1.0
2_147_483_637.0 / 2_147_483_647.0 = 1.0
I spent some time experimenting to figure out a reasonable approach to this challenge, and I may have finally found a way to manage the headache of mapping CSS z-index values.
Run the following Cargo command in your project directory:
cargo add normalize-css-z
Or add the following line to your Cargo.toml:
[dependencies]
normalize-css-z = "0.7"
And in your Rust file:
use normalize_css_z::normalize;
fn main() {
let z_ = 2_147_483_647;
if let Some(z) = normalize(z_) {
// Do something with `z`.
} else {
// Handle unsupported z-index.
}
}
NOTE: This version has not been thoroughly tested yet.
To use, add the following line to your Cargo.toml:
[dependencies]
normalize-css-z = { version = "0.7", features = ["custom"] }
And in your Rust file:
use normalize_css_z::{
normalizer::Normalizer,
ranges::RangesBuilder,
};
fn main() {
let builder = RangesBuilder::default()
.with_lower(0..=100)
.with_middle(101..=200)
.with_upper(201..=300);
let normalizer = Normalizer::new(builder.build());
if let Some(z) = normalizer.calc(0) {
// Do something with `z`.
} else {
// Handle unsupported z-index.
}
}
LOWER | MIDDLE | UPPER |
---|---|---|
-2_147_483_647..=-2_139_095_039 |
-4_194_303..=4_194_304 |
2_139_095_040..=2_147_483_647 |
8,388,608 * 3 + 1 = 25,165,825
Licensed under either of
at your option.